Software Hoek

Linux Leert Twitteren


Als je, net als ik, Abraham al gezien hebt dan duurt het even voordat je het nut inziet van nieuwe ontwikkelingen. Twitter is een van die ontwikkelingen. Wat moet je er mee? En dan, zie je plotseling het licht, denk je. Je gaat Twitter inzetten om bijvoorbeeld de status van je server door te geven. Of om elke dag een willekeurige tweet te versturen die reclame maakt voor je website. Dat laatste is nu juist wat dit script doet. Maar je kunt er ook nog andere dingen mee doen, zoals: reclame maken voor je bedrijf, product of evenement, of een quote van de dag versturen, of herinneringen sturen.
De laatste regel van het script is de eigenlijke motor van het programma, die de gegenereerde tweet ook daadwerkelijk verstuurt. Die regel kun je natuurlijk in elke gewenste andere toepassing gebruiken. Je kunt het zo gek niet verzinnen, of het is mogelijk.
Wie weet ga ik ooit nog eens het nut van Facebook inzien. Nah, ik zou mijn adem maar niet inhouden voordat dat gebeurt.

Supertweet


Het vorig jaar heeft Twitter hun API gewijzigd. Om softwarematig tweets te versturen moet je nu gebruik maken van 0Auth. En dat maakt het automatisch versturen van tweets een stuk lastiger. Maar gelukkig heeft Supertweet hier een oplossing voor gevonden.
Naast je Twitter account moet je ook bij Supertweet een account nemen, wat je dan koppelt aan je Twitter account. Supertweet neemt dan het 0Auth deel van de API voor zijn rekening. Daarvoor hoef je je Twitter wachtwoord niet eens aan Supertweet te geven. Sterker nog, Supertweet raadt je aan om een ander wachtwoord te nemen dan wat je voor Twitter gebruikt.
In feite geef je Supertweet een unieke sleutel tot jouw Twitter account. Als je geen gebruik meer wilt maken van Supertweet hoef je alleen maar die sleutel te vernietigen (op de Twitter website) en Supertweet kan geen tweets meer uit jouw naam versturen. Dat is ook het hele idee achter 0Auth trouwens. Daarmee geef je dus gecontroleerd toegang tot je account aan verschillende partijen. Elke partij krijgt een andere unieke sleutel tot jouw account. En elke partij kun je afzonderlijk de toegang tot jouw account ontzeggen door de daarbij horende sleutel te vernietigen.

Dus, voordat je dit script kunt gebruiken moet je je Twitter account koppelen aan een Supertweet account. Maar dat is een fluitje van een cent.

Het Autotweet Bash Script


#!/bin/bash

# Gebruik:
#   autotweet        genereer een willekeurige tweet
#   autotweet 6      genereer tweet nummer 6

TWIT_USER="Twitter_naam"
TWIT_SECRET="supertweet_wachtwoord"
TWIT_URL="http://api.supertweet.net/1/statuses/update.xml"

NUM_TWEETS=10

# RAND=$[ ( $RANDOM % $NUM_TWEETS + 1 ) ]
SEED=$(head -c4 /dev/urandom | od -t u4 | awk '{ print $2 }')
RAND=$[ ( $SEED % $NUM_TWEETS + 1 ) ]

if [ $# -ne 0 ] ; then
    RAND=$1
fi

case $RAND in
    1) TWEET="Twittertje nummer 1";;
    2) TWEET="Twittertje nummer 2";;
    3) TWEET="Twittertje nummer 3";;
    4) TWEET="Twittertje nummer 4";;
    5) TWEET="Twittertje nummer 5";;
    6) TWEET="Twittertje nummer 6";;
    7) TWEET="Twittertje nummer 7";;
    8) TWEET="Twittertje nummer 8";;
    9) TWEET="Twittertje nummer 9";;
   10) TWEET="Twittertje nummer 10";;
    *) TWEET="Default twittertje voor als opgegeven tweet niet bestaat";;
esac

curl -u $TWIT_USER:$TWIT_SECRET -d "status=$TWEET" $TWIT_URL -s > /dev/null

Kopieer dit script en plak het in een bestandje met de naam autotweet of zo. Vergeet niet het bestandje executable te maken.

Voordat je dit script kunt gebruiken moet je er een aantal wijzigingen in aanbrengen. Zo moet je de variabelen TWIT_USER en TWIT_SECRET nog voorzien van jouw account gegevens. Dat zijn dus respectievelijk je Twitter user name en je Supertweet wachtwoord (dus niet je Twitter wachtwoord!).
Verder moet je natuurlijk de tweetjes nog invullen. Er staan er hier 10, maar het kunnen er zoveel zijn als je zelf wilt. Je moet wel steeds de variabele NUM_TWEETS aanpassen aan het aantal tweets wat je hebt.
De tweet met nummer *) is de default tweet, die verstuurd wordt als de variabele RAND een ongebruikte waarde heeft. Ik had kunnen kiezen voor het geven van een foutmelding bij een ongebruikte waarde, maar dit vind ik eigenlijk net zo handig. Foutmeldingen zie je toch niet als je het programma via cron aanroept.

Als je alle aanpassingen hebt gemaakt kun je gaan Twitteren. Uhm, ik bedoel, dan kan je server gaan twitteren. Elke keer als >autotweet wordt aangeroepen wordt er een willekeurige tweet uit de lijst getwitterd. Je kunt er ook voor kiezen om >autotweet 6 aan te roepen. In dat geval wordt de tweet met het nummer 6 getwitterd. Vul je daar een verkeerd nummer in, of iets wat nergens op slaat, dan wordt de default tweet getwitterd.

Supertweet blokkeert gelijke tweetjes die te snel na elkaar verstuurd worden. Dus sta er niet versteld van dat je tijdens het testen niet alle tweets te zien krijgt die je verstuurd hebt.

Update


De willekeurigheid van de twitters viel me een beetje tegen. Dit wordt waarschijnlijk veroorzaakt omdat de tijd een belangrijke factor is bij het genereren van de waarde van $RANDOM in Bash. En omdat autotweet elke dag op precies dezelfde tijd wordt aangeroepen kan het voor komen dat je drie dagen na elkaar de zelfde tweet voorbij ziet komen.
Daarom heb ik gezocht naar een andere manier om een willekeurige getal op te roepen. De file /dev/urandom bevat constant willekeurige data, die afkomstig is van systeemruis zoals dat zo mooi heet. Die ruis is voornamelijk afkomstig van asynchrone events die dus op willekeurige momenten kunnen optreden. Het uitlezen van die file en er een willekeurig getal van maken is iets meer werk dan de vorige methode. Maar de resultaten zijn in ieder geval wel een stukje meer gespreid.