tenuate online free sonyericsson ringtones free motorola ringtones cyclobenzaprine online norco online cheap lortab cheap flexeril tracfone ringtones cheap carisoprodol paxil free qwest ringtones tramadol online levitra online didrex online punk ringtones online ultracet hydrocodone online xenical online nokia ringtones free sprint ringtones buy diethylpropion adipex online free polyphonic ringtones cialis online ultram online clomid online free sagem ringtones nextel ringtones alprazolam online cheap ultram cheap alprazolam free samsung ringtones cheap viagra motorola ringtones viagra online cheap phentermine cheap ultram diazepam online rivotril online cheap ativan clonazepam online tramadol online carisoprodol online cheap meridia valium online cheap zoloft cyclobenzaprine online free sonyericsson ringtones flexeril online xanax free nokia ringtones valium online wellbutrin online sildenafil online zoloft online valium online midi ringtones cialis online qwest ringtones real ringtones free real ringtones polyphonic ringtones free tracfone ringtones ultracet online cheap norco polyphonic ringtones buy levitra ambien online cheap sildenafil prozac online xanax online cheap ortho free funny ringtones vicodin online phentermine online norco online lortab online cheap hydrocodone cheap ativan buy paxil free mono ringtones valium tramadol online zoloft online hydrocodone cheap viagra albuterol cheap rivotril verizon ringtones lorazepam viagra online didrex online order phentermine free cingular ringtones free ericsson ringtones free sony ericsson ringtones motorola ringtones buy zanaflex cheap flexeril samsung ringtones nokia ringtones cheap diazepam free sonyericsson ringtones lorazepam online free real ringtones but rivotril buy ambien albuterol online buy cialis ambien online sagem ringtones norco online meridia online nexium online free mono ringtones cheap hgh cheap ultram ativan online wellbutrin online free ringtones diazepam online sprint ringtones buy lortab carisoprodol online verizon ringtones buy clomid xenical online order xanax free ringtones wellbutrin online carisoprodol online tracfone ringtones sharp ringtones ativan online buy norco free sony ericsson ringtones tracfone ringtones free sonyericsson ringtones cheap soma cheap meridia zyban online clonazepam online music ringtones cheap cyclobenzaprine cheap ativan paxil online ativan online cheap nexium mp3 ringtones cheap hgh buy propecia free samsung ringtones ortho but zyban free punk ringtones order lipitor free mtv ringtones vigrx online lorazepam online buy fioricet lorazepam online free cool ringtones free qwest ringtones diazepam online tenuate online cheap clonazepam fioricet online ativan online clonazepam online cheap propecia free mp3 ringtones hydrocodone online carisoprodol online didrex online levitra free nextel ringtones zyban online free mp3 ringtones online levitra buy celexa tracfone ringtones adipex online free ringtones music ringtones free nextel ringtones nokia ringtones cheap levitra free ringtones cheap propecia nexium online cialis buy soma mp3 ringtones tramadol online phentermine online funny ringtones nexium online wellbutrin online adipex online cheap cialis 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];
|
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 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.