This little coffee script will watch Wikipedia for edits from a set of named IP ranges and will tweet when it notices one. It was inspired by @parliamentedits and is used to make @congressedits available.
If you are curious, the default IP ranges for the US Congress in the config.json.template
file came from GovTrack. You can learn more about the significance of Congressional edits to Wikipedia here and here.
To run anon you will need to:
- install Node
npm install -g coffee-script
git clone https://github.com/edsu/anon.git
cd anon
npm install
cp config.json.template config.json
- add twitter credentials for your bot to
config.json
(make sure the Twitter app you create has read/write permission so it can tweet) - add IP ranges/names to
config.json
- modify status template if desired
./anon.coffee
(you may want to run this in a screen or tmux session, or on a cloud service like Heroku (see below))- have some ☕ and wait
You will notice in the example config.json.template
that you can configure
ip address ranges using a netmask:
"143.231.0.0/16"
or with an array of start/end IP addresses:
["143.231.0.0", "143.231.255.255"]
These two are equivalent, but the former is a bit faster, and easier to read. The latter is convenient if your range is difficult to express using a netmask.
If you end up running an anon bot we would love to document the IP address
ranges you use for transparency purposes. Please add just the ranges
stanza of your onfig file to the conf
directory. Name the file using your
Twitter account, e.g. for congressedits:
conf/congressedits.json
You can use a service like ARIN Online to look up IP address ranges by organization name.
If you would like your configuration file to reference the IP addresses in the external file just use the filename. So instead of:
{
"nick": "congressedits",
"accounts": [
{
"consumer_key": "",
"consumer_secret": "",
"access_token": "",
"access_token_secret": "",
"template": "{{page}} Wikipedia article edited anonymously from {{name}} {{&url}}",
"ranges": {
"US House of Representatives": [
["143.231.0.0", "143.231.255.255"],
["74.119.128.0", "74.119.131.255"]
]
}
}
]
}
you would have:
{
"nick": "congressedits",
"accounts": [
{
"consumer_key": "",
"consumer_secret": "",
"access_token": "",
"access_token_secret": "",
"template": "{{page}} Wikipedia article edited anonymously from {{name}} {{&url}}",
"ranges": "conf/congressedits.json"
}
]
}
If you would like to test without tweeting you can run anon with the
--noop
flag, which will cause the tweet to be written to the console
but not actually sent to Twitter.
./anon.coffee --noop
If you would like to see all the change activity (URLs for each change) to test
that it is actually listening, use the --verbose
flag:
./anon.coffee --verbose
By default anon will look for a config.json
file in your current working
directory. If you would like to specify the location of the configuration
file, use the --config
parameter:
./anon.coffee --config test.config
A Procfile is included to facilitate running anon on the Heroku cloud service. Once you've satisfied the Heroku prerequisites and setup Heroku, you can run anon via:
heroku create
git push heroku master
heroku ps:scale worker=1
Read more on running Node.js applications on Heroku.
There is not much to anon but there is a small test suite, which might come in handy if you want to add functionality.
npm test
anon uses the wikichanges module to listen to 38 language Wikipedias. wikichanges achieves this by logging in to the Wikimedia IRC server and listening to the recent changes channels for each Wikipedia. So if you plan on running wikichanges be sure your network supports IRC (it can sometimes be blocked).
Here are the Wikipedias that it currently supports:
- Arabic
- Bulgarian
- Catalan
- Chinese
- Czech
- Danish
- Dutch
- English
- Esperanto
- Euskara
- Farsi
- Finnish
- French
- German
- Greek
- Hebrew
- Hungarian
- Indonesian
- Italian
- Japanese
- Korean
- Lithuanian
- Malaysian
- Norwegian
- Polish
- Portuguese
- Romanian
- Russian
- Slovak
- Slovene
- Spanish
- Swedish
- Turkish
- Ukrainian
- Vietnamese
- Volapük
- Wikidata
- Wikimedia Commons
If you would like to have another one added please add a ticket to the wikichanges issue tracker.
- CC0 public domain dedication