WikiLink - The Mediawiki Interface: Difference between revisions

From Knot Atlas
Jump to navigationJump to search
No edit summary
No edit summary
 
(179 intermediate revisions by 74 users not shown)
Line 1: Line 1:
{{Manual TOC Sidebar}}

WikiLink is actually two separate things; firstly, a java class for interfacing with a mediawiki server, and secondly, a Mathematica package providing a wrapper around this. This page documents the Mathematica package, while the java class, and its addition functionality, will be documented elsewhere.
WikiLink is actually two separate things; firstly, a java class for interfacing with a mediawiki server, and secondly, a Mathematica package providing a wrapper around this. This page documents the Mathematica package, while the java class, and its addition functionality, will be documented elsewhere.

WikiLink is available as a standalone package, suitable for use with any Mediawiki installation, and is included in the [[KnotTheory`]] package.

====License====
====License====
<tt>WikiLink.nb</tt>, <tt>WikiLink.m</tt> and <tt>wikilink.jar</tt> are copyright Scott Morrison, available under your choice of the MIT or GPL licenses. The other components are copyright by other parties, all available under the Apache license.
<tt>WikiLink.nb</tt>, <tt>WikiLink.m</tt> and <tt>wikilink.jar</tt> are copyright Scott Morrison, available under your choice of the MIT, Apache or GPL licenses. The other components are copyright by other parties, all available under the Apache license.


====Download====
====Download====
If you already have [[KnotTheory`]] installed, there's no need to install anything. The functionality of WikiLink is available as soon as you open KnotTheory`.
Download [[Media:WikiLink.zip|WikiLink.zip]] ([[Image:WikiLink.zip|file description]]). Unzip this, probably in the same place you've unzipped the [[KnotTheory`]] package. This will create a subdirectory called WikiLink, containing (at least) these files:

Otherwise, download [http://katlas.math.toronto.edu/svn/WikiLink/tags/stable/WikiLink.zip WikiLink.zip]. Unzip this anywhere you like. This will create a subdirectory called WikiLink, containing (at least) these files:
{| border=1
{| border=1
|-
|-
Line 12: Line 15:
!Description
!Description
|-
|-
| <tt>WikiLink.nb</tt>
| <tt>mathematica/WikiLink.nb</tt>
| The Mathematica notebook containing wrapper function definitions.
| The Mathematica notebook containing wrapper function definitions.
|-
|-
| <tt>WikiLink.m</tt>
| <tt>mathematica/WikiLink.m</tt>
| The Mathematica package automatically generated from <tt>WikiLink.nb</tt>.
| The Mathematica package automatically generated from <tt>WikiLink.nb</tt>.
|-
|-
| <tt>wikilink.jar</tt>
| <tt>wikilink.jar</tt>
| The WikiLink java class and source code ([[MediawikiConnection.java]]).
| The WikiLink java classes and source code.
|-
|-
|
|
<tt>jdom.jar</tt><br/>
<tt>jars/jdom.jar</tt><br/>
<tt>commons-httpclient-3.0-rc2.jar</tt><br/>
<tt>jars/commons-httpclient-3.0-rc2.jar</tt><br/>
<tt>commons-codec-1.3.jar</tt><br/>
<tt>jars/commons-codec-1.3.jar</tt><br/>
<tt>commons-lang-2.1.jar</tt><br/>
<tt>jars/commons-lang-2.1.jar</tt><br/>
<tt>commons-logging.jar</tt><br/>
<tt>jars/commons-logging.jar</tt><br/>
| Libraries (all available under either GPL or the Apache license) required by <tt>wikilink.jar</tt>
| Libraries (all available under either GPL or the Apache license) required by <tt>wikilink.jar</tt>
|}
|}


====Importing the package in Mathematica====
====Importing the package in Mathematica====
First, you'll need to set some paths, so WikiLink` can find the java files it needs.
If you're not using KnotTheory`, first, you'll need to set some paths, so WikiLink` can find the java files it needs. You need to add the "mathematica/" subdirectory of the WikiLink distribution to the Mathematica $Path.


<!--$$WikiLinkPath = "/path/to/WikiLink/mathematica/";$$-->
<!--$$KnotAtlasPath = "c:\\scott\\math.berkeley.edu\\Work\\Mathematica\\KnotAtlas\\";$$-->
<!--Robot Land, no human edits to "END"-->
<!--Robot Land, no human edits to "END"-->
{{In|
{{In|
n = 1 |
n = 1 |
in = <nowiki>KnotAtlasPath = "c:\\scott\\math.berkeley.edu\\Work\\Mathematica\\KnotAtlas\\";</nowiki>}}
in = <nowiki>WikiLinkPath = "/path/to/WikiLink/mathematica/";</nowiki>}}
<!--END-->
<!--END-->
<!--$$AppendTo[$Path, KnotAtlasPath];$$-->
<!--$$AppendTo[$Path, WikiLinkPath];$$-->
<!--Robot Land, no human edits to "END"-->
<!--Robot Land, no human edits to "END"-->
{{In|
{{In|
n = 2 |
n = 2 |
in = <nowiki>AppendTo[$Path, KnotAtlasPath];</nowiki>}}
in = <nowiki>AppendTo[$Path, WikiLinkPath];</nowiki>}}
<!--END-->
<!--END-->
<!--$$SetDirectory[KnotAtlasPath];$$-->
<!--$$<<WikiLink`$$-->
<!--Robot Land, no human edits to "END"-->
<!--Robot Land, no human edits to "END"-->
{{In|
{{In|
n = 3 |
n = 3 |
in = <nowiki>SetDirectory[KnotAtlasPath];</nowiki>}}
in = <nowiki><<WikiLink`</nowiki>}}
<!--END-->
<!--$$<< "WikiLink\\WikiLink.m"$$-->
<!--Robot Land, no human edits to "END"-->
{{In|
n = 4 |
in = <nowiki><< "WikiLink\\WikiLink.m"</nowiki>}}
<!--END-->
<!--$$SetJarPath[KnotAtlasPath <> "WikiLink\\"];$$-->
<!--Robot Land, no human edits to "END"-->
{{In|
n = 5 |
in = <nowiki>SetJarPath[KnotAtlasPath <> "WikiLink\\"];</nowiki>}}
<!--END-->
<!--END-->

If you've already loaded KnotTheory` (e.g., with the statement <code><<KnotTheory`</code>), you can simply begin at this point.


We then try to connect to the wiki. Executing this line will prompt you for a username and password.
We then try to connect to the wiki. Executing this line will prompt you for a username and password.
Line 69: Line 62:
"http://katlas.math.toronto.edu/w/index.php",
"http://katlas.math.toronto.edu/w/index.php",
InputString["Enter Your Username:"],
InputString["Enter Your Username:"],
InputString["Enter Your Password"]
InputString["Enter Your Password:"]
]-->
]-->
{{In|
{{In|
Line 76: Line 69:
"http://katlas.math.toronto.edu/w/index.php",
"http://katlas.math.toronto.edu/w/index.php",
InputString["Enter Your Username:"],
InputString["Enter Your Username:"],
InputString["Enter Your Password"]
InputString["Enter Your Password:"]
]</nowiki>}}
]</nowiki>}}


Line 83: Line 76:
<!--Robot Land, no human edits to "END"-->
<!--Robot Land, no human edits to "END"-->
{{HelpLine|
{{HelpLine|
n = 6 |
n = 4 |
in = <nowiki>WikiUserName</nowiki> |
in = <nowiki>WikiUserName</nowiki> |
out= <nowiki>WikiUserName[] returns either the name of the user you are logged in as, your IP address if you're not logged in, or $Failed if something more complicated has happened!</nowiki>}}
out= <nowiki>WikiUserName[] returns either the name of the user you are logged in as, your IP address if you're not logged in, or $Failed if something more complicated has happened!</nowiki>}}
Line 90: Line 83:
<!--Robot Land, no human edits to "END"-->
<!--Robot Land, no human edits to "END"-->
{{InOut|
{{InOut|
n = 7 |
n = 5 |
in = <nowiki>WikiUserName[]</nowiki> |
in = <nowiki>WikiUserName[]</nowiki> |
out= <nowiki>ScottManualRobot</nowiki>}}
out= <nowiki>ScottManualRobot</nowiki>}}
Line 96: Line 89:


====Usage====
====Usage====
WikiLink` provides functions for checking your login status, getting and setting pages, as well as transparently extending some of Mathematica's string manipulation functions to wiki pages.
WikiLink` provides only a few functions.

<!--$$?WikiUserName$$-->
<!--Robot Land, no human edits to "END"-->
{{HelpLine|
n = 6 |
in = <nowiki>WikiUserName</nowiki> |
out= <nowiki>WikiUserName[] returns either the name of the user you are logged in as, your IP address if you're not logged in, or $Failed if something more complicated has happened!</nowiki>}}
<!--END-->


<!--$$?WikiGetPageText$$-->
<!--$$?WikiGetPageText$$-->
<!--Robot Land, no human edits to "END"-->
<!--Robot Land, no human edits to "END"-->
{{HelpLine|
{{HelpLine|
n = 8 |
n = 7 |
in = <nowiki>WikiGetPageText</nowiki> |
in = <nowiki>WikiGetPageText</nowiki> |
out= <nowiki>WikiGetPageText[pagename] returns the raw text of the specified page.</nowiki>}}
out= <nowiki>WikiGetPageText[pagename] returns the raw text of the specified page.</nowiki>}}
Line 108: Line 109:
<!--Robot Land, no human edits to "END"-->
<!--Robot Land, no human edits to "END"-->
{{HelpLine|
{{HelpLine|
n = 9 |
n = 8 |
in = <nowiki>WikiSetPageText</nowiki> |
in = <nowiki>WikiSetPageText</nowiki> |
out= <nowiki>WikiSetPageText[pagename, text] overwrites the contents of the specificied page with the given text.
out= <nowiki>WikiSetPageText[pagename, text] overwrites the contents of the specificied page with the given text.
Line 116: Line 117:
<!--Robot Land, no human edits to "END"-->
<!--Robot Land, no human edits to "END"-->
{{HelpLine|
{{HelpLine|
n = 10 |
n = 9 |
in = <nowiki>WikiSetPageTexts</nowiki> |
in = <nowiki>WikiSetPageTexts</nowiki> |
out= <nowiki>WikiSetPageText[{{pagename1, text1},{pagename2,text2},...}] efficiently sets multiple pages, by first checking which texts are already up to date.</nowiki>}}
out= <nowiki>WikiSetPageText[{{pagename1, text1},{pagename2,text2},...}] efficiently sets multiple pages, by first checking which texts are already up to date.</nowiki>}}
Line 123: Line 124:
<!--Robot Land, no human edits to "END"-->
<!--Robot Land, no human edits to "END"-->
{{HelpLine|
{{HelpLine|
n = 11 |
n = 10 |
in = <nowiki>WikiUploadFile</nowiki> |
in = <nowiki>WikiUploadFile</nowiki> |
out= <nowiki>WikiUploadFile[name, description] uploads the specified file to the wiki.</nowiki>}}
out= <nowiki>WikiUploadFile[name, description] uploads the specified file to the wiki.</nowiki>}}
Line 132: Line 133:
<!--Robot Land, no human edits to "END"-->
<!--Robot Land, no human edits to "END"-->
{{InOut|
{{InOut|
n = 12 |
n = 11 |
in = <nowiki>WikiSetPageText["Sandbox", "A robotic edit, at 19:39, 31-August-2005."]</nowiki> |
in = <nowiki>WikiSetPageText["Sandbox", "A robotic edit, at 19:39, 31-August-2005."]</nowiki> |
out= <nowiki>True</nowiki>}}
out= <nowiki>True</nowiki>}}
Line 140: Line 141:
<!--Robot Land, no human edits to "END"-->
<!--Robot Land, no human edits to "END"-->
{{InOut|
{{InOut|
n = 13 |
n = 12 |
in = <nowiki>WikiGetPageText["Sandbox"]</nowiki> |
in = <nowiki>WikiGetPageText["Sandbox"]</nowiki> |
out= <nowiki>A robotic edit, at 19:39, 31-August-2005.</nowiki>}}
out= <nowiki>A robotic edit, at 19:39, 31-August-2005.</nowiki>}}
Line 150: Line 151:
<!--Robot Land, no human edits to "END"-->
<!--Robot Land, no human edits to "END"-->
{{InOut|
{{InOut|
n = 14 |
n = 13 |
in = <nowiki>WikiSetPageTexts[{{"Sandbox", "A robotic edit, by --~~"<>"~~"}, {"Sandbox2", "The determinant of the knot [[3_1]] is 3."}}]</nowiki> |
in = <nowiki>WikiSetPageTexts[{{"Sandbox", "A robotic edit, by --~~"<>"~~"}, {"Sandbox2", "The determinant of the knot [[3_1]] is 3."}}]</nowiki> |
out= <nowiki>{}</nowiki>}}
out= <nowiki>{}</nowiki>}}
Line 157: Line 158:
<!--Robot Land, no human edits to "END"-->
<!--Robot Land, no human edits to "END"-->
{{InOut|
{{InOut|
n = 15 |
n = 14 |
in = <nowiki>WikiGetPageText["Sandbox2"]</nowiki> |
in = <nowiki>WikiGetPageText["Sandbox2"]</nowiki> |
out= <nowiki>The determinant of the knot [[3_1]] is 3.</nowiki>}}
out= <nowiki>The determinant of the knot [[3_1]] is 3.</nowiki>}}
<!--END-->

=====String manipulation functions=====
<code>WikiLink`</code> provides functions WikiPageMatchQ, WikiPageFreeQ, WikiStringReplace and WikiStringCases. Each function works likes its usual Mathematica partner,
[http://documents.wolfram.com/mathematica/functions/StringMatchQ StringMatchQ],
[http://documents.wolfram.com/mathematica/functions/StringFreeQ StringFreeQ],
[http://documents.wolfram.com/mathematica/functions/StringReplace StringReplace]
or [http://documents.wolfram.com/mathematica/functions/StringCases StringCases]. Instead of providing a string, or list of strings, as the first argument, you should give the name of a page, or a list of names.

You can use these to perform all sorts of editing tricks.

<!--$$WikiPageMatchQ[{"Sandbox", "Sandbox2"}, "determinant"]$$-->
<!--Robot Land, no human edits to "END"-->
{{InOut|
n = 15 |
in = <nowiki>WikiPageMatchQ[{"Sandbox", "Sandbox2"}, "determinant"]</nowiki> |
out= <nowiki>{False, False}</nowiki>}}
<!--END-->
<!--$$WikiPageFreeQ[{"Sandbox", "Sandbox2"}, "[["~~(DigitCharacter..)~~"_"~~(DigitCharacter..)~~"]]"]$$-->
<!--Robot Land, no human edits to "END"-->
{{InOut|
n = 16 |
in = <nowiki>WikiPageFreeQ[{"Sandbox", "Sandbox2"}, "[["~~(DigitCharacter..)~~"_"~~(DigitCharacter..)~~"]]"]</nowiki> |
out= <nowiki>{True, False}</nowiki>}}
<!--END-->
<!--$$WikiStringCases[{"Sandbox", "Sandbox2"}, "[["~~ShortestMatch[__]~~"]]"]$$-->
<!--Robot Land, no human edits to "END"-->
{{InOut|
n = 17 |
in = <nowiki>WikiStringCases[{"Sandbox", "Sandbox2"}, "[["~~ShortestMatch[__]~~"]]"]</nowiki> |
out= <nowiki>{{Sandbox, {[[User:ScottManualRobot|ScottManualRobot]]}},
{Sandbox2, {[[3_1]]}}}</nowiki>}}
<!--END-->
<!--$$WikiStringReplace[{"Sandbox", "Sandbox2"}, "robotic edit"->"robotic edit (using WikiLink`)]$$-->
<!--Robot Land, no human edits to "END"-->
{{InOut|
n = 18 |
in = <nowiki>WikiStringReplace[{"Sandbox", "Sandbox2"}, "robotic edit"->"robotic edit (using WikiLink`)]</nowiki> |
out= <nowiki>$Failed</nowiki>}}
<!--END-->
<!--$$WikiGetPageTexts[{"Sandbox", "Sandbox2"}]$$-->
<!--Robot Land, no human edits to "END"-->
{{InOut|
n = 19 |
in = <nowiki>WikiGetPageTexts[{"Sandbox", "Sandbox2"}]</nowiki> |
out= <nowiki>{{Sandbox, A robotic edit, by\
--[[User:ScottManualRobot|ScottManualRobot]] 14:54, 18 Feb 2006\
(EST)}, {Sandbox2, The determinant of the knot [[3_1]] is 3.}}</nowiki>}}
<!--END-->
<!--END-->


Line 166: Line 218:


====Compatibility====
====Compatibility====
WikiLink (with some modifications made in July 2007) appears to work with mediawiki 1.10.1. Bug reports appreciated!

WikiLink has been tested against mediawiki 1.4.5beta3 and 1.4.7.
WikiLink has been tested against mediawiki 1.4.5beta3 and 1.4.7.

WikiLink has known issues on mediawiki 1.5.0. Retrieving multiple pages at once is broken. This appears to be a mediawiki bug, and will not be fixed. The same problem does not occur on mediawiki 1.5.8. --[[User:Scott|Scott]] 10:56, 27 Mar 2006 (EST)


I expect WikiGetPage text to continue working in mediawiki 1.5 and beyond, because it uses the stable interface [[Special:Export]]. Logging in and setting pages will quite likely break in the next version. If you've tried this, please let me know about your experiences. I'm hoping that soon (1.5?) [[Special:Import]] will become available, and I can switch to using this. --[[User:Scott|Scott]] 15:57, 31 Aug 2005 (EDT)
I expect WikiGetPage text to continue working in mediawiki 1.5 and beyond, because it uses the stable interface [[Special:Export]]. Logging in and setting pages will quite likely break in the next version. If you've tried this, please let me know about your experiences. I'm hoping that soon (1.5?) [[Special:Import]] will become available, and I can switch to using this. --[[User:Scott|Scott]] 15:57, 31 Aug 2005 (EDT)

====Todo====
I'd love to [http://ant.apache.org/manual/develop.html#writingowntask create an Ant task] which allows uploading a file to a wiki. We could then use this in build scripts for KnotTheory, etc. --[[User:Scott|Scott]] 04:07, 17 Sep 2005 (EDT)


====See Also====
====See Also====

Latest revision as of 00:41, 28 May 2009

WikiLink is actually two separate things; firstly, a java class for interfacing with a mediawiki server, and secondly, a Mathematica package providing a wrapper around this. This page documents the Mathematica package, while the java class, and its addition functionality, will be documented elsewhere.

WikiLink is available as a standalone package, suitable for use with any Mediawiki installation, and is included in the KnotTheory` package.

License

WikiLink.nb, WikiLink.m and wikilink.jar are copyright Scott Morrison, available under your choice of the MIT, Apache or GPL licenses. The other components are copyright by other parties, all available under the Apache license.

Download

If you already have KnotTheory` installed, there's no need to install anything. The functionality of WikiLink is available as soon as you open KnotTheory`.

Otherwise, download WikiLink.zip. Unzip this anywhere you like. This will create a subdirectory called WikiLink, containing (at least) these files:

Filename Description
mathematica/WikiLink.nb The Mathematica notebook containing wrapper function definitions.
mathematica/WikiLink.m The Mathematica package automatically generated from WikiLink.nb.
wikilink.jar The WikiLink java classes and source code.

jars/jdom.jar
jars/commons-httpclient-3.0-rc2.jar
jars/commons-codec-1.3.jar
jars/commons-lang-2.1.jar
jars/commons-logging.jar

Libraries (all available under either GPL or the Apache license) required by wikilink.jar

Importing the package in Mathematica

If you're not using KnotTheory`, first, you'll need to set some paths, so WikiLink` can find the java files it needs. You need to add the "mathematica/" subdirectory of the WikiLink distribution to the Mathematica $Path.

In[1]:= WikiLinkPath = "/path/to/WikiLink/mathematica/";
In[2]:= AppendTo[$Path, WikiLinkPath];
In[3]:= <<WikiLink`

If you've already loaded KnotTheory` (e.g., with the statement <<KnotTheory`), you can simply begin at this point.

We then try to connect to the wiki. Executing this line will prompt you for a username and password.

In[6]:= CreateWikiConnection[ "http://katlas.math.toronto.edu/w/index.php", InputString["Enter Your Username:"], InputString["Enter Your Password:"] ]

The function WikiUserName[] checks that we're logged in

In[4]:= ?WikiUserName
WikiUserName[] returns either the name of the user you are logged in as, your IP address if you're not logged in, or $Failed if something more complicated has happened!
In[5]:= WikiUserName[]
Out[5]= ScottManualRobot

Usage

WikiLink` provides functions for checking your login status, getting and setting pages, as well as transparently extending some of Mathematica's string manipulation functions to wiki pages.

In[6]:= ?WikiUserName
WikiUserName[] returns either the name of the user you are logged in as, your IP address if you're not logged in, or $Failed if something more complicated has happened!
In[7]:= ?WikiGetPageText
WikiGetPageText[pagename] returns the raw text of the specified page.
In[8]:= ?WikiSetPageText
WikiSetPageText[pagename, text] overwrites the contents of the specificied page with the given text. WikiSetPageText[pagename, text, summary] overwrites the contents of the specificied page with the given text and notes summary in the change log.
In[9]:= ?WikiSetPageTexts
WikiSetPageText[{{pagename1, text1},{pagename2,text2},...}] efficiently sets multiple pages, by first checking which texts are already up to date.
In[10]:= ?WikiUploadFile
WikiUploadFile[name, description] uploads the specified file to the wiki.

Thus for example after

In[11]:= WikiSetPageText["Sandbox", "A robotic edit, at 19:39, 31-August-2005."]
Out[11]= True

we get

In[12]:= WikiGetPageText["Sandbox"]
Out[12]= A robotic edit, at 19:39, 31-August-2005.

The function WikiSetPageTexts is most useful for batch uploads, as it does considerably more error checking, and filters out edits which won't change the page text. It takes as argument a list of {"title", "text"} pairs, and returns a list of those pairs which failed.

In[13]:= WikiSetPageTexts[{{"Sandbox", "A robotic edit, by --~~"<>"~~"}, {"Sandbox2", "The determinant of the knot [[3_1]] is 3."}}]
Out[13]= {}
In[14]:= WikiGetPageText["Sandbox2"]
Out[14]= The determinant of the knot [[3_1]] is 3.
String manipulation functions

WikiLink` provides functions WikiPageMatchQ, WikiPageFreeQ, WikiStringReplace and WikiStringCases. Each function works likes its usual Mathematica partner, StringMatchQ, StringFreeQ, StringReplace or StringCases. Instead of providing a string, or list of strings, as the first argument, you should give the name of a page, or a list of names.

You can use these to perform all sorts of editing tricks.

In[15]:= WikiPageMatchQ[{"Sandbox", "Sandbox2"}, "determinant"]
Out[15]= {False, False}
In[16]:= WikiPageFreeQ[{"Sandbox", "Sandbox2"}, "[["~~(DigitCharacter..)~~"_"~~(DigitCharacter..)~~"]]"]
Out[16]= {True, False}
In[17]:= WikiStringCases[{"Sandbox", "Sandbox2"}, "[["~~ShortestMatch[__]~~"]]"]
Out[17]= {{Sandbox, {[[User:ScottManualRobot|ScottManualRobot]]}}, {Sandbox2, {[[3_1]]}}}
In[18]:= WikiStringReplace[{"Sandbox", "Sandbox2"}, "robotic edit"->"robotic edit (using WikiLink`)]
Out[18]= $Failed
In[19]:= WikiGetPageTexts[{"Sandbox", "Sandbox2"}]
Out[19]= {{Sandbox, A robotic edit, by\ --[[User:ScottManualRobot|ScottManualRobot]] 14:54, 18 Feb 2006\ (EST)}, {Sandbox2, The determinant of the knot [[3_1]] is 3.}}

Troubleshooting

The instruction ShowJavaConsole[] will bring up a window in which some debugging information is displayed.

Compatibility

WikiLink (with some modifications made in July 2007) appears to work with mediawiki 1.10.1. Bug reports appreciated!

WikiLink has been tested against mediawiki 1.4.5beta3 and 1.4.7.

WikiLink has known issues on mediawiki 1.5.0. Retrieving multiple pages at once is broken. This appears to be a mediawiki bug, and will not be fixed. The same problem does not occur on mediawiki 1.5.8. --Scott 10:56, 27 Mar 2006 (EST)

I expect WikiGetPage text to continue working in mediawiki 1.5 and beyond, because it uses the stable interface Special:Export. Logging in and setting pages will quite likely break in the next version. If you've tried this, please let me know about your experiences. I'm hoping that soon (1.5?) Special:Import will become available, and I can switch to using this. --Scott 15:57, 31 Aug 2005 (EDT)

Todo

I'd love to create an Ant task which allows uploading a file to a wiki. We could then use this in build scripts for KnotTheory, etc. --Scott 04:07, 17 Sep 2005 (EDT)

See Also

All of the Mathematica notebooks in Category:Knot Atlas Maintenance Software rely on WikiLink, and so are good examples of how to use it.

You may also be interested in the Wikipedia page on mediawiki bots, and in particular the Python Wikipedia Robot Framework.