+49 711 12159058 tomalo.stuttgart@gmail.com

Wie baue ich mir einen Twitter-Bot mit PHP? (Teil 1)

Nachdem ich mich vor ein paar Wochen mit einem Twitter-Bot beschäftigt habe, möchte ich natürlich allen Interessierten zeigen, wie man so etwas macht. Mein Twitter-Bot holt sich alle Replies, die an den Bot geschickt wurden, und retweetet diese Nachrichten.
Anfangs hatte ich es so geschrieben, dass den Nachrichten einfach das @meinbot rausgelöscht wird und am Anfang ein „RT: @deradressat“ eingefügt wird. Dann hab ich allerdings das Skript so umgeschrieben, dass die neue Retweet-Funktion von Twitter genutzt wird, die es seit November 2009 gibt.

Zuallererst braucht ihr natürlich einen Twitter-Account, über den das Ganze laufen soll. Diesen kann man auf http://twitter.com/ registrieren.
Als zweites sollte man eine gescheite Server-Umgebung haben. Wir brauchen die Möglichkeit, Cronjobs einzurichten und eine PHP-Umgebung mit Curl.

Kommen wir zum Code:
Einerseits habe ich eine Klasse für die Twitter API genutzt, die man bei Google Code findet. Leider ist der Entwickler nicht sehr aktiv und wir müssen noch einige Anpassungen machen, die nicht funktionieren.
Zum einen wird bei der Abfrage nach den Replies immer eine ID mitgegeben, damit ich nicht immer alle Nachrichten bekomme, sondern nur die, die ich noch nicht abgefragt habe. Die ID der neuesten Nachricht speicher ich bei jedem Aufruf in eine Datei. Beim nächsten Aufruf wird die ID aus der Datei gelesen und genutzt.
Diese ID wird vor der Abfrage als Integer gecastet, was inzwichen ein Problem ist, weil die ID schon weit über dem Integer-Wert liegt. Also entfernen wir das (int) vor dem Wert und fragen ab, ob die ID numerisch ist. Dies wird mit der Funktion „is_numeric()“ ausgeführt.
Zum anderen habe ich eine neue Funktion im Code eingefügt, die die API von Twitter für die Retweets nutzt. Diese war noch nicht vorhanden, da ja neu.

Aber bevor ich viel erzähle, habe ich hier die Anpassungen für euch:

class.twitter.php: Änderung der Funktion getReplies()


/**
* Get @ replies
* @param integer Optional. Paging of tweets. Number specifies which page of results
* @param string $since (HTTP-formatted date) Optional.  Narrows the resulting list of direct messages to just those sent after the specified date.
* @param integer $since_id Optional. Returns results posted that have an ID greater than $since_id
* @return string
**/
function getReplies( $page = false, $since = false, $since_id = false )
{
if( !in_array( $this->type, array( 'xml','json','rss','atom' ) ) )
return false;

$args = array();
if( $page )
$args['page'] = (int) $page;
if( $since )
$args['since'] = (string) $since;
if( is_numeric($since_id) )
$args['since_id'] =  $since_id;

$qs = '';
if( !empty( $args ) )
$qs = $this->_glue( $args );
echo $qs;
$request = 'http://twitter.com/statuses/replies.' . $this->type . $qs;
return $this->objectify( $this->process( $request ) );
}

1 Kommentar

  • Am 11. Januar 2010 09:54 schrieb uberVU - social comments:

    Social comments and analytics for this post…

    This post was mentioned on Twitter by tomalo_de: New blog post: Wie baue ich mir einen Twitter-Bot mit PHP? (Teil 1) http://bit.ly/53N8E0 #twitter #bot…

    (Pflichtfeld)
    (Pflichtfeld, wird nicht angezeigt)