Wikipedia:Scripts
From Wikipedia, the free encyclopedia
- This is about general scripts. For user scripts, see Wikipedia:WikiProject User scripts. For Greasemonkey user scripts see Wikipedia:Tools/Greasemonkey user scripts. For other tools, see Wikipedia:Tools
This page serves as a central repository for scripts and scripting requests on Wikipedia. Please feel free to improve any of these scripts but make sure to test your changes first. Like the rest of Wikipedia, all material here is under the GFDL. See licensing for further details.
Contents |
[edit] Guidelines
[edit] KISS
Remember to Keep it Simple, Stupid, do one thing and do it well, this is a place for simple scripts and not whole programs.
[edit] Style
This style guide is by no means a rule, however keep in mind that your script must be easy to paste in here as well as easy to copy by others.
<pre> #!/usr/bin/perl use strict; print "Hello World\n"; </pre>
Which would render as:
#!/usr/bin/perl use strict; print "Hello World\n";
[edit] License
All material on Wikipedia is by default under the GNU Free Documentation License (GFDL). This license is designed for documentation and written works but not for software. If you want your work to be of the greatest use to the public, please consider dual-licensing it and releasing it under a free software license such as the GNU General Public License (GPL) in addition to the GFDL. Like the GFDL, The GPL is released by the Free Software Foundation. You can use both by explicitly stating in a comment at the start of your script that your script is dual-licensed under the GPL.
[edit] IRC channel scripts
[edit] Scripts for mIRC
- /mIRC wikilink scripts - activate wikilinks in mIRC
- /Tea time - forces you to use correct capitalization and punctuation on IRC.
- /Wikimedia RC Watcher - watch all channels in irc.wikimedia.org, and lists the live RC in a separate list window with editing access via right-click
- /Revision ID linker into SVN - linking revision ids
- /Bug linking into Mediazilla ver 0.1
[edit] Scripts for ChatZilla
- /Wikilinks - Makes wikilinks clickable in the output window; contributed to the public domain by IceKarma on April 22, 2005.
[edit] Scripts for Colloquy
- WikipediaLink - makes links clickable in Colloquy, an IRC client for Mac OS X.
[edit] Scripts for X-chat
[edit] Scripts for ircII
A brief ON trigger for ircII that works with #mwlink below. If I was really elite this would all be in ircII script language, but that would be really too awful to contemplate: besides which, the filter can be useful for other purposes.
set exec_protection off on public - on #^public 0 * if (match(*[[* [$2-])) { exec mwlink $shellfix($Z$1<$0> $2-) } { echo $Z$1<$0> $2- }
Note: setting exec_protection off could make you vulnerable to exploits by others unless you know what you're doing with your ON triggers.
Also, the $Z$1<$0> $2- is my preferred format for channel messages; yours may differ.
This is efficient in the sense that it only invokes the filter for lines containing a wiki link; it is inefficient because it invokes it for every line. I couldn't get persistent process communication working for ircII--if someone else can, that would be great.
[edit] EPIC4
This ircII-derived client can use almost the same script as ircII, above:
set exec_protection off on public - on #^public 0 * if (match(*[[* [$2-])) { exec -direct mwlink $Z$1<$0> $2- } { echo $Z$1<$0> $2- }
Note that the -direct option to /exec is used instead of the $shellfix() function, which EPIC4 does not provide.
[edit] Gaim
- Note: the below instructions worked for me in Gaim v1.5.0, but it has been reported not to work with Gaim v2's.--Commander Keane 08:31, 25 July 2006 (UTC)
Use of the linkify plugin plus a wikilink config file allows you to see all those [[links]] that everyone is typing as real links.
1. Wingaim users who haven't installed activeperl, download activeperl 5.8 first, as per Perl plugin support, then reinstall gaim.
2. Download the linkify perl script from sourceforge. Copy it to your plugins directory (~/.gaim/plugins or C:\Program Files\Gaim\plugins) as described in How do I use perl scripts with Gaim?
3. Currently in wingaim you need to alter the path line
my $CfgFile = "$ENV{HOME}/.gaim/linkify.cfg"; to my $CfgFile = "C:/Documents and Settings/YOURUSERNAME/Application Data/.gaim/linkify.cfg";
4. Download the linkify.cfg example file from the same page. Copy it to ~/.gaim (or UserName\Application Data\.gaim). Currently it is set to change "Bug ###" into a clickable link to bugzilla.
5. Add the lines:
# Wikipedia links \[\[([^\[\]]*)\]\] http://en.wikipedia.org/wiki/$1
to the config file (and remove the bug linking if you care). The regexp may not be perfect, but you can all refine it! It's a wiki!
6. Restart Gaim, then go to Tools > Preferences > Plugins and select the "Linkify" plugin.
(Contributed by User:Omegatron)
[edit] Irssi
[edit] Met's script
Use the following script, which will make any [[links]] appear as [[links]] <http://en.wikipedia.org/wiki/links>. Remember to chmod +x and to store it in .irssi/scripts. Then you can do /load script-name, although it might not take effect in an existing instance of a channel:
#!/usr/bin/perl use strict; use warnings; use Irssi; Irssi::settings_add_str ('wikify', 'wiki_lang', 'en'); Irssi::settings_add_str ('wikify', 'wiki_active_channels', 'freenode/#wikipedia freenode/#wikibooks'); sub wikilang { Irssi::settings_get_str ('wiki_lang'); } sub urlencode { my $string = shift; $string =~ y/ /_/; $string =~ s/([^A-Za-z0-9_])/sprintf("%%%02X", ord($1))/seg; return $string; } sub wikilink { my $s = shift; my $u = urlencode $s; my $l = wikilang; "[[$s]] <http://$l.wikipedia.org/wiki/$u>"; } sub wikitemplate { my $s = shift; my $u = urlencode $s; my $l = wikilang; "{{$s}} <http://$l.wikipedia.org/wiki/Template:$u>"; } sub wikify { my $line = shift; $line =~ s/\[\[(.*?)\]\]/wikilink $1/eg; $line =~ s/Template:(.+?)/wikitemplate $1/eg; return $line; } sub sig_message_public { my ($server, $msg, $nick, $address, $target) = @_; my $chatnet = $server->{chatnet}; my $ok = 0; for my $t (split /\s+/, Irssi::settings_get_str ('wiki_active_channels')) { $ok = 1 if lc $t eq lc "$chatnet/$target"; } return unless $ok; $msg = wikify $msg; Irssi::signal_continue ($server, $msg, $nick, $address, $target); } Irssi::signal_add_first ('message public', \&sig_message_public);
(Contributed by Ricky Clarkson, who was channelling 'met' from Freenode IRC, on #irssi)
[edit] Hocevar's script
User:Sam Hocevar has an irssi script to do much the same thing; see his Wikipedia page; wikilinks.pl.
[edit] ERC
ERC is an IRC client for emacs implemented in Emacs Lisp.
The following code can be added to your emacs initialization file (I put it in ~/.emacs.d/mwlink.el). It uses the #mwlink script below, running in daemon mode (mwlink --daemon); or rather, it depends on it. Your browser will open a URL of the form http://localhost:4242/mwlink?page=<page> and get redirected to the appropriate wikimedia page. This means the following code can be relatively simple (rather than having to figure out languages, namespaces and wikis on its own.
Another note: this depends on the emacs-wiki package for the `emacs-wiki-escape-url' function. I also don't know how well it plays with Custom (though customizing `erc-button-alist' isn't any nicer than doing this or editing it directly).
(add-to-list 'erc-button-alist '("\\[\\[\\(.*?\\)\\]\\]" 0 t (lambda (page) (browse-url (concat "http://localhost:4242/mwlink?page=" (emacs-wiki-escape-url page)))) 1))
[edit] IceChat
IceChat 5.5 or below:
- Press Control-S to bring up Script Editor
- Paste code into a new script file
- Hit "update and close" in the Main menu.
IceChat 7:
- Press Control-S to bring up IceChat Editor
- Click the 'Scripts' tab, and paste the code into the blank space
- Click 'File' then 'Save As...'
- Change the extension from '*.ics' to '*.ice' (IceChat 5 Script), enter a suitable name for the file and save.
- Hit the "Save & Exit" button.
- Modified by —— Eagle (ask me for help) to accept templates. ({{this}} will result in http://en.wikipedia.org/wiki/Template:this
- Modified by —— Eagle (ask me for help) to deal with piped|links
[10:10] <Someuser> Blah blah blah [[WP:AFD]] blah blah blah. [[WP:POINT]] blah blah blah. [10:10] http://en.wikipedia.org/wiki/WP:AFD http://en.wikipedia.org/wiki/WP:POINT
Function WikiMatch(TextToMatch) Dim regEx, CurrentMatch, CurrentMatches, ActualLink, Links, CurrentSearch Set regEx = New RegExp regEx.Pattern = "(\[\[.*?\|)|\[\[.*?\]\]|(\{\{.*?\}\})" regEx.IgnoreCase = True regEx.Global = True regEx.MultiLine = True Set CurrentMatches = regEx.Execute(TextToMatch) For Each CurrentSearch in CurrentMatches ActualLink = Replace(CurrentSearch,"[[", "") ActualLink = Replace(ActualLink, "]]", "") ActualLink = Replace(ActualLink, "{{", "Template:") ActualLink = Replace(ActualLink, "}}", "") ActualLink = Replace(ActualLink, "|", "") ActualLink = Replace(ActualLink, " ", "_") if ActualLink <> "" Then WikiMatch = Wikimatch + " http://en.wikipedia.org/wiki/" + ActualLink End If Next End Function Sub ONTEXT(Message,Channel,Nickname,Host,ServerNumber) Dim Matches Matches = WikiMatch(Message) If Matches <> "" Then SendCommand "/echo " + Channel + " " + Matches , ServerNumber End If End Sub Sub ONQUERY(Message,Nickname,Host,ServerNumber) Dim Matches Matches = WikiMatch(Message) If Matches <> "" Then SendCommand "/echo =" + Nickname + " " + Matches , ServerNumber End If End Sub
[edit] KVirc
To use this script, select Scripting > Edit events..., right-click on the OnChannelMessage event and select New handler, then paste the script.
# Parameters: # $0 = source nick # $1 = source username # $2 = source host # $3 = message %wikibase="http://en.wikipedia.org/wiki/" %msg=$3 %done =0 %replace=0 %iter=1 while (%done==0) { %linkleft=$str.find(%msg, "[[", %iter) %linkright=$str.find(%msg, "]]", %iter) %linklength =$(%linkright-%linkleft) %linklength = $(%linklength-2) if ((%linkleft>=0)&&(%linklength>0)) { %wikitarget = $str.mid(%msg, $(%linkleft+2), %linklength) %url =%wikibase%wikitarget %newtarget = $k(12)$fmtlink(%wikitarget, openurl %url)$k(1) # Brackets avoid mix-up when wikiword is too short %msg = $str.replace(%msg, "[[%newtarget]]", "[[%wikitarget]]") %replace=1 } else { %done=1 } %iter++ # Avoid infinite loop if (%iter>8) { %done=1 } } if (%replace) { echo $0 ◊ %msg # halt normal message processing halt } # Function exits without output for unprocessed messages
[edit] Wikilink filters
[edit] mwlink
- /mwlink - Ruby program that can be run as a daemon (intercepts HTTP requests and redirects themm to the appropriate Wikimedia page) or text processor (converts wikilinks to text hyperlinks).
[edit] Recent changes scripts
[edit] mIRC
Here's a short script to open up all contributions from anons in browser windows (works well with tabbed browsing). CryptoDerk 23:04, Feb 15, 2005 (UTC)
Place the following in Tools->Scripts Editor under the remote tab.
ON $50:TEXT:/(http\S+) \* \d\d?\d?\.\d\d?\d?\.\d\d?\d?\.\d\d?\d? /iS:#en.wikipedia: run $regml(1) alias F9 auser 50 *127.0.0.1 alias F11 ruser 50 *127.0.0.1
Now just sit in #en.wikipedia and hit F9 to begin. Hit F11 to stop. You can change F9/F11 to whatever function keys you like.
The above script can be adapted to open specific types of edits in #wikipedia-en-vandalism:
ON $50:TEXT:/gibberish|copyvio.*diff.*(http\S+)/iS:#wikipedia-en-vandalism: run $regml(1) alias F8 auser 50 *computer@wikipedia alias F12 ruser 50 *computer@wikipedia
This will open edits that the user with the cloak "computer@wikipedia" labels as "gibberish" or "copyvio". Use F8 and F12 to start and stop the script.
Also, for a frontend to the IRC live feeds, check out CryptoDerk's Vandal Fighter.
[edit] Unicode numeric converter scripts
[edit] Perl
A HTML character entity converter written in Perl that uses the ord() function to convert a character to its corresponding number in the character set. It operates on standard input.
#!/usr/bin/perl # Code is in the public domain. use strict; my @input = split (//, <>); for ( my $i = 0; $i<$#input; $i++ ) { if ( ord($input[$i]) >= 255 ) { print '&#' . ord($input[$i]) . ';'; } else { print $input[$i]; } }
[edit] AppleScript
Author: Olof
Notes: I got fed up with looking up Unicode characters, so I wrote an AppleScript for my favorite styled text editor (Style) to write them for me. Now, I can just type Japanese into a text edit window like this
select it, choose my script from the scripts menu, and it turns into
小 泉 純 一 郎 小 泉 純 一 郎
Which is what you can paste into the Wikipedia edit window. I'm using a Mac, so this is a mac only solution, but I thought I'd share it for those of you who can use it. Here's the script:
compile this in ScriptEditor, and save it in the "Style Scripts folder in the same folder where the Style application lives. I have mine saved as "Append Unicoded HTML". Thereafter it will appear in Style's Scripts menu.
Style is available at merzwaren ($20 shareware). I have this running on Mac OS X 10.2.1 with Style version 1.9.2
Enjoy !
set theHTML to "" tell application "Style" set selText to selection of document 1 as Unicode text set selStart to get offset of selection of document 1 set selEnd to get offset of end of selection of document 1 set dataLen to (selEnd - selStart) end tell set tempName to "unicode temp" tell application "Finder" if alias tempName exists then move alias tempName to the trash end if end tell set fileRef to open for access tempName with write permission write selText to fileRef set myRawData to read fileRef from 0 for dataLen close access fileRef tell application "Finder" move alias tempName to the trash end tell set numChars to dataLen div 2 repeat with n from 1 to numChars set theHTML to theHTML & "&#" set a to get character (2 * n - 1) of myRawData set b to get character (2 * n) of myRawData set lVal to ((ASCII number b) + (256 * (ASCII number a))) set theHTML to (theHTML & lVal as string) & "; " end repeat tell application "Style" set selection of document 1 to ((selection of document 1) & " ( " & theHTML & " ) ") end tell
[edit] JavaScript
Authors:
- كسيپ Cyp 10:14 7 Jun 2003 (UTC) ( initial write )
- --Ævar Arnfjörð Bjarmason 16:02, 2004 May 16 (UTC) ( major cleanup of html code, added indenting )
Known to work on:
- Internet Explorer 5.00.3502.1000
- Mozilla Firefox 0.8
Notes:
You may not need a script for converting CJK characters if you have a Mac running Mac OS X 10.2 and have Mozilla as your browser. Just do the editing from within Mozilla. Mozilla automatically does the conversion. For example, in adding this edit, I type in the Japanese characters for "edit," which are 編集. Mozilla automatically converted these characters to the proper romanized Unicode format. Just look at the above lines in the editing box to see for yourself. -User: IppikiOokami 5 September 2003
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Unicode conversion utility</title> </head> <body> <form name="charform"> <p>Type here, and all characters with a code greater than 127 will be converted to Ӓ codes.</p> <p>Input:</p> <textarea name="input" cols="80" rows="25" onKeyUp="revtxt()"> Sorry, this page is useless with JavaScript disabled. </textarea> <p>Output:</p> <textarea name="output" cols="80" rows="25"> Sorry, this page is useless with JavaScript disabled. </textarea> </form> <script type="text/javascript"> <!-- document.charform.input.value=""; document.charform.output.value="Don't type here."; function revtxt() { var s=document.charform.input.value; o=""; for( m=0;s.charAt(m);++m ) if ( (c=s.charCodeAt(m))<128&&c!=38) o+=s.charAt(m); else if (c==38) o+="&"; else o+="&#"+c+";"; document.charform.output.value=o; } --> </script> </html>
[edit] Watchlist and undeletion select-all script
This script usefully checks all checkboxes on a Wikipedia page, useful for clearing large watchlists or restoring pages with large histories. It works in Firefox and Internet Explorer.
In Firefox, create a bookmark, with the following code in the "location" field. In Internet Explorer, create a favourite, and once it's created, right click it, select "properties" and place the following code in the "URL" box (it will give you an invalid protocol warning, but you can ignore this, and it will work).
javascript:for (i=0; i<document.forms.length; i++) { for (j=0; j<document.forms[i].elements.length; j++) { f= document.forms[i].elements[j]; if (f.type == 'checkbox') f.checked= true; } } void 0
[edit] Scripting requests
- Wanted: WikiLinks code for Visual IRC
- Wanted: Wikilinks code for Trillian (added 14:03, 28 April 2006 (UTC))
- Looks like the the Trillian Scripting Host might allow someone to easily write a plugin for this. I don't know anything about Trillian scripting or JScript, though. Demi T/C 19:20, 24 January 2007 (UTC)
[edit] Database scripting
There are a number of pages designed to help with Wikipedia maintenance and editing which are generated by copying the entire Wikipedia database to a machine and running a script or program on it.
Here you can request that someone with a recent copy of the database dump and the appropriate skills update the Specialpages and other pages requiring scripting.
See also: Wikipedia:SQL query requests.
- Wikipedia:Most-edited talk pages
- Needs to be updated. Tuf-Kat 16:41, Sep 1, 2004 (UTC)
- Special:Deadendpages
- In desperate need. The OpenTask notation needs to be updated, and everything on the current list has been completed. --Wolf530 10:17, Mar 29, 2004 (UTC)
- seems to have been completely replaced by Wikipedia:Deadend pages
- Wikipedia:Deadend pages acts as an alternative but not replacement I believe. A script so those sufficiently able can regularly update the streamlined version i.e. Special:Deadendpages would be useful for easier determining of such pages and quick removal of stale data. It'd also, arguably allow Jo(e)-enduser to have a regularly updated source of such pages without reliance/waiting on someone else to run a linkdump for the Wikipedia:Deadend pages version. Whitehorse1 | April 1 2007 07:30 (UTC)
- In desperate need. The OpenTask notation needs to be updated, and everything on the current list has been completed. --Wolf530 10:17, Mar 29, 2004 (UTC)
- Special:Lonelypages
- Wikipedians by number of edits
- Wikipedia:List of blank pages
- Wikipedia:Most Referenced Articles
- Wikipedia:Disambiguation pages with links Grendelkhan 22:45, 2004 Apr 26 (UTC)
- Articles present in at least 3/6 languages --+sj+ 11:12, 2004 Mar 15 (UTC)
- Articles edited by the largest # of distinct users --+sj+ 11:12, 2004 Mar 15 (UTC)
- Wikipedia:Most wanted stubs very badly needed. --Ben Brockert 03:13, May 21, 2004 (UTC)
-
- I'm working up scripts to generate the equivalent of many of these from an offline copy of the database. Some are a bit amateurish right now and should be considered at best beta versions, but please cast your eyes over User:Topbanana/Reports if you're eager to get going. These will find their way into the wikipedia namespace eventually, in the meantime I'll be delighted to hear feedback.