Wikipedia information page for general programming scripts
Wikipedia information page
This page serves as a central repository for
scripts
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
CC BY-SA 4.0
. See
licensing
for further details.
Remember to
Keep it simple, stupid!
Do one thing and do it well; this is a place for simple scripts and not whole programs.
All material on Wikipedia is by default under the
CC BY-SA
license (and in most cases, also the
GNU Free Documentation License
(GFDL)). The CC BY-SA license is designed for artistic and literary works, but not for software. However, version 4.0 of CC BY-SA allows its "
ShareAlike
" provision to be fulfilled by releasing modified code under the GPL, version 3. However, if you want your work to be of the greatest use to the public, please consider dual-licensing it so that reusers can take advantage of future versions of the GPL. 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
/Wikilinks
- Makes wikilinks clickable in the output window; contributed to the public domain by
IceKarma
on April 22, 2005.
Scripts for Colloquy
edit
Scripts for XChat/HexChat
edit
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.
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.
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)
reply
Use of the linkify plugin plus a wikilink config file allows you to see all those [[links]] that everyone is typing as real links.
Wingaim users who haven't installed activeperl, download
activeperl 5.8
first, as per
Perl plugin support
, then
reinstall gaim
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?
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"
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.
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!
Restart Gaim, then go to Tools > Preferences > Plugins and select the "Linkify" plugin.
(Contributed by
User:Omegatron
Use the following script, which will make any [[links]] appear as [[links]]
#!/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
=~
/ /
$string
=~
s/(\W)/sprintf("%%%02X", ord($1))/seg
return
$string
sub
wikilink
my
$s
shift
my
$u
urlencode
$s
my
$l
wikilang
"[[$s]]
sub
wikitemplate
my
$s
shift
my
$u
urlencode
$s
my
$l
wikilang
"{{$s}}
sub
wikify
my
$line
shift
$line
=~
s/\[\[(.*?)\]\]/wikilink $1/eg
$line
=~
s/{{(.+?)}}/wikitemplate $1/eg
return
$line
sub
sig_message_public
my
$server
$msg
$nick
$address
$target
@_
my
$chatnet
$server
->
chatnet
};
my
$ok
for
my
$t
split
/\s+/
Irssi::
settings_get_str
'wiki_active_channels'
))
$ok
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)
User:Sam Hocevar
has an irssi script to do much the same thing; see
his Wikipedia
page;
wikilinks.pl
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
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
"\\[\\[\\(.*?\\)\\]\\]"
lambda
page
browse-url
concat
"http://localhost:4242/mwlink?page="
emacs-wiki-escape-url
page
))))
))
IceChat 5.5 or below
edit
Press Control-S to bring up Script Editor
Paste code into a new script file
Hit "update and close" in the
Main
menu.
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.
[10:10]
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
To use this script, select
Scripting
Edit events...
, right-click on the
OnChannelMessage
event and select
New handler
, then paste the script.
For using the
secure server
, change the following line in the used script:
%wikibase="http://en.wikipedia.org/wiki/"
to
%wikibase="https://en.wikipedia.org/wiki/"
# Parameters:
# $0 = source nick
# $1 = source username
# $2 = source host
# $3 = message
%wikibase
"http://en.wikipedia.org/wiki/"
%msg
$3
%done
%replace
%iter
while
%done
==
%linkleft
$str
find
%msg
"[["
%iter
%linkright
$str
find
%msg
"]]"
%iter
%linklength
$(
%linkright
%linkleft
%linklength
$(
%linklength
if
((
%linkleft
>=
&&
%linklength
))
%wikitarget
$str
mid
%msg
$(
%linkleft
),
%linklength
%url
%wikibase%wikitarget
%newtarget
$k
12
$fmtlink
%wikitarget
openurl
%url
$k
# Brackets avoid mix-up when wikiword is too short
%msg
$str
replace
%msg
"[[%newtarget]]"
"[[%wikitarget]]"
%replace
else
%done
%iter
++
# Avoid infinite loop
if
%iter
%done
if
%replace
echoprivmsg
$0
$1
$2
%msg
# halt normal message processing
halt
# Function exits without output for unprocessed messages
Version 4 introduced small changes in the scripting language KVS and thus old scripts may not work any longer. The Version 4.0+ script has additional the possibility to display URLs for wikilinks which are going to the
account creation tool
on the
toolserver
and to link templates correctly.
# Parameters:
# $0 = source nick
# $1 = source username
# $2 = source host
# $3 = message
%accbase
"http://toolserver.org/~acc/acc.php?action=zoom&id="
%wikibase
"http://en.wikipedia.org/wiki/"
%acc
%template
%msg
$3
%done
%replace
%iter
while
%done
==
%linkleft
$str
find
%msg
"[["
%iter
%linkleft_acc
$str
find
%msg
"[[acc:"
%iter
%linkleft_template
$str
find
%msg
"{{"
%iter
if
%linkleft_acc
>=
%acc
%linkleft
%linkleft_acc
if
%linkleft_template
>=
%template
%linkleft
%linkleft_template
if
%template
==
%linkright
$str
find
%msg
"}}"
%iter
else
%linkright
$str
find
%msg
"]]"
%iter
%linklength
$(
%linkright
%linkleft
%linklength
$(
%linklength
if
((
%linkleft
>=
&&
%linklength
))
%wikitarget
$str
mid
%msg
$(
%linkleft
),
%linklength
if
%acc
==
%acctarget
$str
mid
%wikitarget
),
%linklength
%url
%accbase%acctarget
else
if
%template
==
%url
%wikibase%wikitarget
else
%url
%wikibase
"Template:"
%wikitarget
%newtarget
$k
12
$fmtlink
%wikitarget
openurl
%url
$k
# Brackets avoid mix-up when wikiword is too short
if
%template
==
%msg
$str
replace
%msg
"[[%wikitarget]]"
"[[%newtarget]]"
else
%msg
$str
replace
%msg
"{{%wikitarget}}"
"{{%newtarget}}"
%replace
else
%done
%iter
++
# Avoid infinite loop
if
%iter
%done
if
%replace
echoprivmsg
$0
$1
$2
%msg
# halt normal message processing
halt
# Function exits without output for unprocessed messages
; Copyright (c) 2016 The Wordsmith.
; This script is dual-licensed under the GPL,
; version 3 or (at your option) any later version.
; Redistribution of source code must retain this copyright notice and appropriate attribution.
; See http://www.gnu.org/licenses/gpl.txt for more details.
on $*:text:/^\[\[.*?\]\]$/i:#:{
var %pos1 = $calc($pos($1-,[,2) + 1)
var %pos2 = $pos($1-,],1)
var %match = $mid($1-, %pos1, $calc(%pos2 - %pos1))
%match = $urlencode(%match)
/echo $chan Wikilink: http://en.wikipedia.org/wiki/ $+ %match
alias UrlEncode return $regsubex($1-, /([^a-z\d_+.-])/ig, % $+ $base( $asc(\t), 10, 16, 2) )
/mwlink
- Ruby program that can be run as a daemon (intercepts HTTP requests and redirects them to the appropriate Wikimedia page) or text processor (converts wikilinks to text hyperlinks).
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 #cvn-wp-en:
ON $50:TEXT:/gibberish|copyvio.*diff.*(http\S+)/iS:#cvn-wp-en: 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
An
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
//
<>
);
foreach
my
$c
@input
if
ord
$c
>=
255
'&#'
ord
$c
';'
else
$c
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. This is a Mac-only solution, but I thought I'd share it for those of you who can use it.
Compile the script below 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.
Here's the script:
set
theHTML
to
""
tell
application
"Style"
set
selText
to
selection
of
document
as
Unicode text
set
selStart
to
get
offset
of
selection
of
document
set
selEnd
to
get
offset
of
end
of
selection
of
document
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
for
dataLen
close access
fileRef
tell
application
"Finder"
move
alias
tempName
to
the
trash
end
tell
set
numChars
to
dataLen
div
repeat
with
from
to
numChars
set
theHTML
to
theHTML
""
set
to
get
character
of
myRawData
set
to
get
character
of
myRawData
set
lVal
to
((
ASCII number
256
ASCII number
)))
set
theHTML
to
theHTML
lVal
as
string
"; "
end
repeat
tell
application
"Style"
set
selection
of
document
to
((
selection
of
document
" ( "
theHTML
" ) "
end
tell
Authors
Known to work on
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"
Type
here
and
all
characters
with
code
greater
than
127
will
be
converted
to
amp
1234
codes
/p>
Input
:<
/p>
textarea
name
"input"
cols
"80"
rows
"25"
onKeyUp
"revtxt()"
Sorry
this
page
is
useless
with
JavaScript
disabled
/textarea>
Output
:<
/p>
textarea
name
"output"
cols
"80"
rows
"25"
Sorry
this
page
is
useless
with
JavaScript
disabled
/textarea>
/form>
script
type
"text/javascript"
/script>
/html>
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, Internet Explorer, Camino and
Safari
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).
In
Safari
, use the "Show all Bookmarks" option. Choose the "Bookmarks Bar" collection. Select the script below into the copy buffer and simply paste ([Command]-v) it into the window on the right. A new bookmark will automatically be created and will appear in the bookmarks bar. Re-name it something sensible like "Select All".
javascript
for
document
forms
length
++
for
document
forms
].
elements
length
++
document
forms
].
elements
];
if
type
==
'checkbox'
checked
true
void
A script written in Perl to mass upload photographs to Commons. See
commons:User:Nichalp/Upload script
/ImageFileMigrator
Python script to download all files from a MediaWiki and add them to another MediaWiki using a Sysop account.
After visiting a Wikipedia link, that link changes color from blue to purple on my computer screen. To tag pages with categories, I've been opening all the pages at
Category:NA-Class articles
, for example, to turn the links purple. Then I use the
All pages with prefix
. Those pages for which the link still is blue need a Category:NA-Class category tag. It takes a lot of time to initially open all the pages within a particular category to turn the link from blue to purple. Is there a way to change the colors of the links in
Category:NA-Class articles
as the appear on my computer screen without having to visit each of the links? I tried editing my temporary internet file (browser history) and tried using the 'Print all linked documents' option of windows print feature to printing to a file (that I then deleted). I wasn't able to edit my temporary internet file (browser history) and the 'Print all linked documents' option didn't result in making the category links purple. Can you create me a script that causes all the links on a page (e.g.
Category:NA-Class articles
) to change color to show that I visited the page (without actually opening the linked page)? I am open to other methods as well. Thanks.
GregManninLB
talk
15:57, 17 April 2008 (UTC)
reply
In follow up, I posted this request at
Wikipedia:WikiProject User scripts/Requests
GregManninLB
talk
16:10, 17 April 2008 (UTC)
reply
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:Request a query
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)
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 24 2026 20:02 (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)
Requesting database dump: List of all anon IP users with at least 1 edit.
OlEnglish
talk
03:10, 4 February 2009 (UTC)
reply