====== Macro Guide ======
In the program you can use various macros to generate content automatically or modify things.
Please note that you can use the variable itself from the project used anywhere. E.g. if you defined “Your E-Mail” you can use it in the project like %your e-mail%.
The usage is recursive and allows you to use macros in the content that a macro creates.
Some macros allow you to define how they are used according to the case of the result.\\
* If you use **%Random_Anchor_Text%** it means to **capitalize each word**.\\
* If you use **%RANDOM_ANCHOR_TEXT%** it means to write **all upper case**.\\
* If you use **%rANdOm_AnChoR_TeXT%** it means to **mix up and lower case**.\\
Just all lowercase will not touch the macro content.
===== Spin Syntax explained =====
A spin syntax always begins with a %%{%% and ends with a %%}%%.
Multiple items are separated with a %%|%%. A random item is used when creating the content.
Example: This %%{%%is%%|%%can be%%}%% a test.\\
Output 1: This is a test.\\
Output 2: This can be a test.\\
As you see above the resulting content can have two variations and a random one is used here. However, you can also use fixed data when using so called spintags as in the example below.
Example: %%{%%#TAG1 I love %%{%%the%%|%%your%%}%% site%%|%%#TAG2 Hello there%%}%%. %%{%%#TAG1 Best forum ever.%%|%%#TAG2 How are you?%%}%%\\
Output 1: I love the site. Best forum ever.\\
Output 2: Hello there. How are you?\\
In no way would it ever create content with “I love this forum. How are you?” or “Hello there. Best forum ever.”. And as you see in the example above you can also use nested spin syntax.
Another example is the use of URL domain binding like the following...
Example: %%{%%#.de Hallo Fremder!%%|%%#.com Hello Stranger!%%}%%\\
Output 1: For a German Site it will write: Hallo Fremder!\\
Output 2: For a Site ending with .com it will write: Hello Stranger!\\
Another syntax is the following where all variations are used but in a random order.
Example: %%~{%%Sentence 1.%%|%%Sentence 2.%%|%%Sentence 3.}\\
Output 1: Sentence 1. Sentence 3. Sentence 2.\\
Output 2: Sentence 3. Sentence 1. Sentence 2.\\
Output 3: Sentence 2. Sentence 2. Sentence 1.\\
You can also use **nested spin syntax** where you put one spin syntax in another like: {This **{was|is}** wonderful.|Thank{ you| you all|s}}
===== #file_links[,,] =====
This macro will read a random line from a file or URL and put them together according to the mode. The line output can have the following values:
|S|Joins the lines with a single space.|
|L|Joins the lines with a new link|
|N|Joins the lines with nothing inbetween.|
|SP|Same as “S” but reads the number of lines not randomly but one after the other.|
|LP|Same as “L” but reads the number of lines not randomly but one after the other.|
|NP|Same as “N” but reads the number of lines not randomly but one after the other.|
You can also use a syntax like (,) or [..] for the parameter . This would not always use the same number of lines but choose a random one between the given range (e.g. #file_links[names.dat,(2,10),S]).
Another alternative is to use a directory instead of a a file. Than a random file from that directory is used.
\\
Example: I like: #file_links[names.dat,2,S] and all on this forum who contribute to it.\\
Output: I like: Devin Ozz and all on this forum who contribute to it.\\
The macro reads two random names from the file “names.dat” and put a space between them.
===== #file[] or #file= =====
This macro reads the content of a file or URL.
Example: Something about myself: #file[about_yourself.dat]\\
Output: Something about myself: I am a poor coder and need your money ;)\\
The macro reads the whole content of the file “about_yourself.dat” and inserts it into the text.
===== #grabbed or #grabbed[,] or #grabbedAll[...] =====
This will try to insert content of grabbed content from the present website. The file xgrab.txt can hold the definitions on how to get the content in the following way...
[...]
[...]
The content is collected (first match on the page only unless you use #grabbedall) and joined together the way that line output is defined.
|S|Joins the lines with a single space (default).|
|L|Joins the lines with a new link|
|N|Joins the lines with nothing in between.|
Example: I read “#grabbed[N]” and had to smile :)\\
Output: I read “Welcome to my Forum” and had to smile :)\\
Assuming the webpage has a title like “Welcome to my Forum” and your //xgrab.txt// file has something defined like “//[...]//” you get that output. Unfortunately I couldn't find any decent xgrab.txt file to play with so you have to create your own or copy it from an other program that also uses this.
Extended syntax could hold more variables like #grabbed[S,4] which will take 4 matches and merg them with a space.
===== #gennick[XYZ,,] =====
This macro generates a random nick name with a character length between min length and max length. The first parameter is ignored for now. Just put anything you want for it.
Example: Hello #gennick[XYZ,5,10]\\
Output: Hello DevinSan\\
In the example above the macro created a nickname with a length of 8 characters and inserted it in the text.
===== #random[] =====
This inserts a range of characters in the text. A range can have the following syntax:
#random[a,b,c] -> This will either insert a, b or c into the text.
#random[0..9,A..Z] -> This will insert a number or an upper case character into the text.
Example: My password is: test#random[0..9]#random[-,_]#random[a..z,A..Z]\\
Output: My password is: test3-H\\
The example above inserted 3 characters according to the used ranges in the macro.
===== #err[] =====
This macro is not inserting anything but indicates that the whole text for this content should be modified with spell/type errors. The number can go from 1 to 10000 and indicates how often spell/type errors should be created for a word. If you use 10000 you will have almost every word in the text spelled wrong.
But why you might ask yourself now is this of any use? Normally you want to create perfectly written content and not have your text with spell errors. Some people prefer this to not create duplicate content and have it look more natural as spell errors happen to everyone of us.
Used spelling errors are:
^Type^Description / Example^
|skip character|example becomes exaple (missing the m)|
|double character|example becomes exxample (x repeated)|
|reverse two characters|example becomes exmaple (a and p swapped)|
|use next character on keyboard|example becomes exsmple (s is next on keyboard to a)|
|additional character on keyboard|example becomes exsample (s is next on keyboard to a)|
===== #trans ... #notrans =====
This macro tries to translate the text between #trans and #notrans to the language used on the site where it is submitting to. Please note that the language detection on the site might not always work and that this translation is done online. If the translation fails, it will use the original text. The original text can be in any language as the translation tries to auto detect the language, but I would suggest you to use English here.
Example: #trans The minute that we are born we begin to die. #notrans\\
Output: Die Minute, die wir geboren werden, beginnen wir zu sterben.\\
The example above is translating the sentence “The minute that we are born we begin to die.” into “Die Minute, die wir geboren werden, beginnen wir zu sterben.” while we submit to a German site like http://www.rostock-schwarz.de/
Another format could be used where you specify the langauge to translate in the macro itself using:
**#trans_de** //Some text here// **#notrans**\\
**#trans_en_de** //Some text here// **#notrans**
The first macro will always translate the content to German no matter where it submits to.\\
The second macro will always translate it to German but will not auto detect the input language but assume it is English. Please use some of the language codes from below:
|Code|Language|
|af|Afrikaans|
|ar|Arabic|
|az|Azerbaijani|
|be|Belarusian|
|bg|Bulgarian|
|bn|Bengali|
|bs|Bosnian|
|ca|Catalan|
|ceb|Cebuano|
|cs|Czech|
|cy|Welsh|
|da|Danish|
|de|German|
|el|Greek|
|en|English|
|eo|Esperanto|
|es|Spanish|
|et|Estonian|
|eu|Basque|
|fa|Persian|
|fi|Finnish|
|fr|French|
|ga|Irish|
|gl|Galician|
|gu|Gujarati|
|ha|Hausa|
|hi|Hindi|
|hmn|Hmong|
|hr|Croatian|
|ht|Haitian Creole|
|hu|Hungarian|
|hy|Armenian|
|id|Indonesian|
|ig|Igbo|
|is|Icelandic|
|it|Italian|
|iw|Hebrew|
|ja|Japanese|
|jw|Javanese|
|ka|Georgian|
|km|Khmer|
|kn|Kannada|
|ko|Korean|
|la|Latin|
|lo|Lao|
|lt|Lithuanian|
|lv|Latvian|
|mi|Maori|
|mk|Macedonian|
|mn|Mongolian|
|mr|Marathi|
|ms|Malay|
|mt|Maltese|
|ne|Nepali|
|nl|Dutch|
|no|Norwegian|
|pa|Punjabi|
|pl|Polish|
|pt|Portuguese|
|ro|Romanian|
|ru|Russian|
|sk|Slovak|
|sl|Slovenian|
|so|Somali|
|sq|Albanian|
|sr|Serbian|
|sv|Swedish|
|sw|Swahili|
|ta|Tamil|
|te|Telugu|
|th|Thai|
|tl|Filipino|
|tr|Turkish|
|uk|Ukrainian|
|ur|Urdu|
|vi|Vietnamese|
|yi|Yiddish|
|yo|Yoruba|
|zh-CN|Chinese (Simplified)|
|zh-TW|Chinese (Traditional)|
|zu|Zulu|
===== #spin ... #nospin =====
This macro takes the content between #spin and #nospin and uses the configured spinners on it to rewrite the content.
Example: #spin The minute that we are born we begin to die. #nospin\\
Output: The min. that they are born we all start to disappear.\\
This is just a sample of what spin rewriters might make out of it.
===== #gpt ... #nogpt =====
GPT stands for //**G**enerative **Pr**e-trained **T**ransformer// and will generate text using AI. [[https://en.wikipedia.org/wiki/GPT-3|Read more about GPT3 on Wikipedia]]
Optional parameters are: #gpt-
Where is the length in words of the generated. Between #gpt and #nogpt you have to supply some keywords that the generated text is about.
Example: #gpt10 seo software #nogpt\\
Output: This is a randomly generated text with content about SEO software.\\
Make sure you sign up at [[https://inferkit.com/|https://inferkit.com/]] for an API-KEY. The API Key must have been entered once while in the Article Manager and add a GPT3 generated article.
===== #openai[,,,,,] =====
This will create a text based on the prompt using the AI model "**model**", the temperature "**temperature**" (optional) and **language** (optional).
You can also use a custom template defined in //openai.dat// file (Science Article,Case Study,...). If you use just the template, you also need to define the **** and ****.
Make sure you have defined your OpenAI API Key before when e.g. adding an article in article manager ones.
Example: #openai[gpt-3.5-turbo,write a positive sentence about humans.]\\
Output: Humans have managed not to kill themselves as a species (yet).\\
Example: #openai[gpt-4,Case Study,10,SEO Software,0.7]\\
Output: A case study about SEO Software would be very nice.\\
===== %random--% =====
This is generating a random number between min and max.
Example: I was born on %random-1960-1980%.\\
Output: I was born on 1968.\\
The example above generated a random number between 1960 and 1980 and finally inserted 1968.
===== %columnspinfile--% =====
This macro is reading a random line from the file and taking the set column (seperated by a , from it. If you use the macro with the same file name but a different column, than that exact line is used and not again a new random line. This makes it possible to e.g. have a file with address data and use the same content that belongs to one address instead of unrelated data.
Example: I life in %columnspinfile-address_data.dat-1% - %columnspinfile-address_data.dat-3%.\\
Output: I life in Australia – Amaroo.\\
Lets have a quick look at the file “address_data.dat”:
...
Australia,ACT,Amaroo,2914,37 Parkes Road,(02) 6114 7945,
United States,OK,Oklahoma City,73109,4310 Meadow Drive,405-990-7523,
...
As you see it has one address each line and seperated by a “,”.
The content is: Country,State,City,ZIP,Street,Phone.
Now the program takes a random line out of that file and uses that content to insert the different columns into the text where %columnspinfile-address_data.dat-1% is the country and %columnspinfile-address_data.dat-3% is the city.
===== %spinfolder-%, %spinfolder2-%, %spinfolderdelete-% =====
This macro is using a random file from the folder and using that as content.
Also note that the program is trying to match the same file name or file number when locating a file in a different folder. E.g. if %spinfolder-c:\my_articles\% is using file “article6.txt” than it tries to use “summary6.txt” (or anything with the number 6 in file name) from the macro %spinfolder-c:\my_article_summaries\%.
%spinfolder2% is not keeping the previously used content in mind and %spinfolderdelete% is deleting the file after using it to not use it again.
Example: %spinfolder-c:\my_articles\%\\
Output: This is the content of article 6 which I have put in a folder....\\
===== %spinfilename- =====
This macro is taking the filename from a random file in the given folder as content. It is not reading the file but just using the filename itself. It is removing the extension and transforming "_" to spaces like:
"c:\articles\How_SEO_Works.txt" -> "How SEO Works"
===== %spinfile-% =====
This is reading a random line from the file. Though the same line is used if this macro is used more than once on a submission with the same file.
As alternative you can also use a directory instead of a a file. Than a random file from that directory is used.
Example: My name is %spinfile-names.dat% %spinfile-lnames.dat%.\\
Output: My name is Earl Grey.\\
The example above is using the macro two times but on different files (so it is always using a random line, just when you later use the %spinfile-names.dat or %spinfile-lnames.dat% on the same site it is using the same content).
===== %spinfile2-% =====
This macro is having the same behavior as the %spinfile% one, except that the contents is never kept in mind and a new random content is used each time you use it, even with the same file.
===== %file-% =====
This is the same as using the #file[] macro but it is not accepting an URL.
Example: %file-c:\my_articles\article6.txt%\\
Output: This is the content of article 6 which I have put in a folder....\\
===== %keyword% =====
This will insert a random keyword that you have defined in your project into the text. Please don't use %keywords% (note the s) as that would insert all keywords into the text and not just one.
Example: My site is all about %keyword% and %keyword%\\
Output: My site is all about division and joy .\\
The example above is taking two times a random keyword (in this case joy and division) from your project and inserts it.
If you use %KeyWord% it will capitalize each word in case it has more than one.
===== %keyword% =====
This macro would insert not a random keyword but take the exact order from the project setting. %keyword1% is taking the first defined keyword, %keyword2% the second and so on.
Example: My site is all about %keyword1% and %keyword2%\\
Output: My site is all about joy and divistion.\\
Assuming you have “joy, division, music, ...“ defined in your project as keywords you would get the above output as it takes %keyword1% which is joy and %keyword2% which is division.
===== %source_url% =====
This is replaced with the URL that the program “clicked” to get to the current page. It can be seen as a referrer page used in HTML headers e.g. to indicate where the User came from.
Example: I clicked on a link from %source_url% and came here.\\
Output: I clicked on %%http://www.gsa-onlione.de%% and came here.\\
If the current URL is now %%https://www.gsa-online.de/contact.php%% but was previously on %%https://www.gsa-onlione.de%% you would get the output from above.
===== %targeturl%, %blogurl%, %blog_url% =====
This is replaced with the current URL the program is on.
Example: I clicked on a link from %source_url% and now I am on %targeturl%.\\
Output: I clicked on %%https://www.gsa-onlione.de%% and now I am on %%https://www.gsa-online.de/contact.php%%.\\
This example uses the previous %source_url% macro as well to demonstrate what the content of the macros might be.
===== %targetsubdomain% =====
This macro inserts the full domain of the site we submit to.
Example: Nice to be on % targetsubdomain%.\\
Output: Nice to be on forum.gsa-online.de.\\
===== %targetdomain% =====
This macro will insert the main domain without the suddomain as in the macro above.
Example: Nice to be on % targetdomain%\\
Output: Nice to be on gsa-online.de.\\
===== %targethost% =====
This macro will insert the host together with http:// or https:// into the text.
Example: Now the whole site %targethost% is great.\\
Output: Now the whole site %%https://www.gsa-online.de%% is great.\\
===== %targetpath% =====
This macro is just taking the path from the URL the program is on.
Example: I am surfing on %targethost%%%targetpath%%%.\\
Output: I am surfing on %%https://www.gsa-online.de/contact.php%%\\
In this sample we used two macros as this macro alone is not making much sense in most cases.
===== %targetparameters% =====
This macro is just taking the parameters of an URL (including the ?-Sign).
Also note that if there is no parameter used for the URL it is left empty.
Example: I am surfing on %targethost%%%targetpath%%%targetparameters%.\\
Output: I am surfing on %%https://www.gsa-online.de/contact.php?lang=de%%\\
In this case we used all tree macros from above.
===== %original_targeturl%, %original_targethost%, %original_targetpath%, %original_targetparameters% =====
These macros are referring to the very first URL used when the submission started. The output is the same as the one without the original_ prefix.
===== %url_domain% =====
This is replaced with the domain of your URL that you want to submit.
Example: I am working a lot on my site at %url_domain% lately.\\
Output: I am working a lot on my site at gsa-online.de lately.\\
===== %url_path% =====
This is replaced with the path of the URL that you want to submit.
===== %url_parameters% =====
This is replaced with the parameter of the URL that you want to submit.
===== %link% =====
This gets internally handled as **%anchor_text%**
===== %random_email%, %email% =====
This is generating a random email address with a correct syntax and an existing domain. The program tries to reuse the value used from “names.dat” (random names) to generate an email that looks related to your name.
Example: My email is %random_email%.\\
Output: My email is blah@hotmail.com.\\
===== %emailuser% =====
This macro will insert the content of an email that you see before the @ sign.
Example: My email is %random_email% so the thing before the @ is %emailuser%.\\
Output: My email is blah@hotmail.com so the thing before the @ is blah.\\
The example above might not make a lot sense when using in your project content but it might be required for scripting things together.
===== %emailhost% =====
This macro will insert the content of an email that you see after the @ sign.
Example: My email is %random_email% so the thing after the @ is %emailhost%.\\
Output: My email is blah@hotmail.com so the thing before the @ is hotmail.com.\\
Again this example might not make much sense when using in your project content but it might be required for scripting things together.
===== %name% =====
This generates a random name (first name only) and would be the same as when using the macro %spinfile-names.dat%.
Example: My name is %name%.\\
Output: My name is Earl.\\
===== %website%, %url% =====
This will insert the URL you are trying to submit.
Example: %anchor_text%\\
Output: GSA\\
Assuming that the URL is defined as %%http://www.gsa-online.de/%% and the anchor text as GSA you would get the above content.
===== %blogtitle%, %blog_title% =====
The title of the current URL you are about to submit to (everything between html tag ) is used here.
Example: Wow “%blogtitle%” is indeed an interesting topic.\\
Output: Wow “How to do things.” is indeed an interesting topic.\\
Assuming the website you submit to has How to do things. in there html (the one you see in top of your browser) you would get the above content.
===== %meta_keyword% =====
A random meta keyword from the site you are submitting to.
Example: Nice to see someone writing about %meta_keyword%.\\
Output: Nice to see someone writing about SEO.\\
Assuming that the website you submit to has:
===== %datetime-% =====
This will get you the current date time according to the format string. Below are some exambles:
|y | Year last 2 digits|
|yy | Year last 2 digits|
|yyyy | Year as 4 digits|
|m | Month number no-leading 0|
|mm | Month number as 2 digits|
|mmm | Month using ShortDayNames (Jan)|
|mmmm | Month using LongDayNames (January)|
|d | Day number no-leading 0|
|dd | Day number as 2 digits|
|ddd | Day using ShortDayNames (Sun)|
|dddd | Day using LongDayNames (Sunday)|
|ddddd | Day in ShortDateFormat|
|dddddd | Day in LongDateFormat |
|c | Use ShortDateFormat + LongTimeFormat|
|h | Hour number no-leading 0|
|hh | Hour number as 2 digits|
|n | Minute number no-leading 0|
|nn | Minute number as 2 digits|
|s | Second number no-leading 0|
|ss | Second number as 2 digits|
|z | Milli-sec number no-leading 0s|
|zzz | Milli-sec number as 3 digits|
|t | Use ShortTimeFormat|
|tt | Use LongTimeFormat|
|u | Unix time stamp|
|am/pm | Use after h : gives 12 hours + am/pm|
|a/p | Use after h : gives 12 hours + a/p|
|ampm | As a/p but TimeAMString,TimePMString|
|/ | Substituted by DateSeparator value|
|: | Substituted by TimeSeparator value|
Important : if you want to see characters such as dd in the formatted output, placing them in " marks will stop them being interpreted as date or time elements.
In addition to this formatting, various of the above options are affected by the following variables, with their default values :
|DateSeparator | /|
|TimeSeparator | :|
|ShortDateFormat | dd/mm/yyyy|
|LongDateFormat | dd mmm yyyy|
|TimeAMString | AM|
|TimePMString | PM|
|ShortTimeFormat | hh:mm|
|LongTimeFormat | hh:mm:ss|
|ShortMonthNames | Jan Feb ...|
|LongMonthNames | January, February ...|
|ShortDayNames | Sun, Mon ...|
|LongDayNames | Sunday, Monday ...|
|TwoDigitYearCenturyWindow | 50|
===== %data_url-% =====
This will insert the content of a file encoded in base64 and also adds the rest required to use this for DATA URI SCHEME.
Example: \\
Output: \\
===== %spinfolder_data_url-% =====
Same as %data_url% macro but using a random file from that folder.
===== %random_articlemix% =====
This is a special macro that is taking the content from many results of a %random_article% macro and creates a new unique article from them. Though keep in mind that the result might not be too good readable. The higher the **** parameter is, the more unique but also to more unreadable it becomes.
Right now there are just three levels.
|%random_articlemix**0**% |Take many articles and mix there paragraphs to one article.|
|%random_articlemix**1**% |Take many articles and mix there paragraphs + mix sentences in each paragraph.|
|%random_articlemix**2**% |Take many articles and mix sentences to new paragraphs.|
===== %random_title% =====
This is a macro that will generate an article title based on the TAG (keyword or anchor text).
You can see possible titles when adding an article manually and choosing to generate a title in GUI.
===== %related_url_link% =====
This will search on search engines for a related website to the projects topic and make a link.
e.g. you can use at the end of your article...
Related links:
- %related_url_link%
- %related_url_link%
This can e.g. turn into...
Related links:
- http://www.gsa-online.de/
- http://captcha-breaker.gsa-online.de/
...when the project is about SEO ;)
Another possible syntax is **%related_url_link[ignore=domain1.com|url2.com|otherpart]%**
===== %ab_body%, %ab_title% =====
This uses the Article Builder API to create content while submitting. You can add the macro in Article Title and "Article" field. Please note that you might not see the content in the TEST/Preview when editing the project.
Please note that the last chosen category from GUI is used to pull content.
===== %project_name% =====
The name of the project is inserted (not in test/preview).
===== %article%, %article_title%, %article_summary% =====
The macros %article%, %article_title% and %article_summary% will all corrolate to one article in project's article manager . Meaning if you use %article_title% somewhere, it will use %article% from that same randomly chosen article as well.
===== %domain_as_name%, %subdomain_as_name% =====
The macro will generate a friendly name from the domain like **gsa-online.de** becomes **Gsa Online**