PHPGangsta - Der praktische PHP Blog

PHP Blog von PHPGangsta


Verschiedene Möglichkeiten, mit PHP zu twittern

with 12 comments

Twitter lebt natürlich von manuell eingetippten Kommentaren, aber ab und zu ist es auch sinnvoll und nötig, automatisiert Tweets zu senden. Das geht dank der vielseitigen API auf verschiedensten Wegen, wovon ich einige hier vorstellen möchte.

Den Anfang macht eine Funktion von Fabien Potencier. Zur Nutzung dieser Funktion ist keine Extension oder Framework nötig, es werden nur PHP-Funktionalitäten verwendet:

function tweet($message, $username, $password)
{
  $context = stream_context_create(array(
    'http' => array(
      'method'  => 'POST',
      'header'  => sprintf("Authorization: Basic %s\r\n", base64_encode($username.':'.$password)).
                   "Content-type: application/x-www-form-urlencoded\r\n",
      'content' => http_build_query(array('status' => $message)),
      'timeout' => 5,
    ),
  ));
  $ret = file_get_contents('http://twitter.com/statuses/update.xml', false, $context);

  return false !== $ret;
}
tweet($message, $username, $password);

Eine sehr ähnliche Lösung umgesetzt mit Hilfe der PHP-Extension curl:

function postTweet($message, $username, $password)
{
	$url = 'http://twitter.com/statuses/update.json';
	$fld = http_build_query(array('status' => $message));
	$ch = curl_init();

	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_USERPWD, $username.':'.$password);
	curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $fld);

	$ret = curl_exec($ch);

	return false !== $ret;
}
postTweet($message, $username, $password);

Eine andere Methode ist die Verwendung der Zend-Framework-Klasse Zend_Service_Twitter.

$twitter = new Zend_Service_Twitter($username, $password);
$response = $twitter->status->update($message);

Natürlich kann man auch seine Twitter-Timeline via API abrufen, aber das könnt ihr euch selbst nachschauen wie das geht. Nagut, als Stichworte seien friendsTimeline() und userTimeline() gegeben 😉

Auf der Linux-Kommandozeile kann man natürlich auch auf Twitter zugreifen, hier beispielsweise die Abfrage der Freundes-Timeline:

curl -u username:password  http://twitter.com/statuses/friends_timeline.xml

Viele weitere Funktionen und Klassen findet man im API-Wiki von Twitter.

Edit: Auf vielfachen Wunsch hin habe ich einen weiteren Artikel verfasst über die Nutzung von Twitter mit OAuth.

Written by Michael Kliewe

März 3rd, 2010 at 9:15 am

12 Responses to 'Verschiedene Möglichkeiten, mit PHP zu twittern'

Subscribe to comments with RSS or TrackBack to 'Verschiedene Möglichkeiten, mit PHP zu twittern'.

  1. Es gibt doch bereits Lösungen die derartiges Vorstellen. Siehe bspw. Zend_Service_Twitter. Allerdings ists auch schön zu sehen wie es mit curl funktioniert.

    Marc Binder

    3 Mrz 10 at 09:17

  2. Vielleicht solltest du den Artikel komplett lesen 😉

    Michael Kliewe

    3 Mrz 10 at 09:30

  3. Das weis ich doch 😉

    Wollte trotzdem das mal kurz angesprochen haben 😛

    Marc Binder

    3 Mrz 10 at 09:42

  4. Vielleicht noch ein paar Worte, warum ich das hier schreibe:
    Manchmal kann man nicht die „schöne“ Zend-Lösung verwenden, wenn z.B. die Mindestvoraussetzungen nicht erfüllt sind, der Server kein fsockopen() unterstützt, oder man schlichtweg nicht soviel Overhead hochladen möchte (auch wenn man nur die unbedingt benötigten Klassen hochladen würde wären das >10), dann wählt man eine der Lösungen da oben, mit 20 Zeilen ist man dabei.

    Dass das natürlich nicht die Vorteile auf lange Sicht mit sich bringt liegt aber auf der Hand. Um die beiden Snippets oben wiederverwendbar zu machen für die verschiedenen API-Funktionen oder um Warnings im Fall eines Verbindungsabbruchs abzufangen und stattdessen Exceptions zu werfen muß man sie noch ordentlich erweitern.

    Aber in einigen Fällen retten einem solche 20-Zeiler den Tag.

    Michael Kliewe

    3 Mrz 10 at 09:58

  5. Schade, als ich die Schlagzeile gelesen hab, hatte ich gehofft das es um OAuth geht.

    Die Basic variante bringt leider nicht viel:

    When are you going to turn off Basic Auth?

    We announced in December of 2009 that we would target June 2010 for deprecation of Basic Auth.

    http://apiwiki.twitter.com/OAuth-FAQ

    Martin

    3 Mrz 10 at 10:03

  6. Ich würde tippen dass Twitter den Support noch verlängert, da es noch zu viele nutzen.
    Aber trotzdem ein spannendes Thema, wenn gewünscht kann ich da gern mal einen Artikel verfassen, was OAuth ist und wie man es nutzt um zu twittern.

    Michael Kliewe

    3 Mrz 10 at 10:14

  7. Ist erwünscht. 🙂

    Mouse

    3 Mrz 10 at 10:55

  8. Ja, das Thema OAuth wäre auch sehr interessant. Trotzdem guter Artikel zum Thema 😉

    Robert Kummer

    3 Mrz 10 at 13:13

  9. Ich habe lange nach einem Tutorial gesucht welches mir einfach erklären würde, um was ich meine eigene Twitterklasse erwitern muss die bisher auf dem Basic Auth basiert aber leider gibt es nur so total verstrickte fertige Klassen.

    Prinzipiell wird einfach nur der Header beim cUrl erweitert mit dem Token, Token-Key und ein paar anderen sachen aber leider ist diese zusammenstellung der Parameter nicht ganz so simpel zu erstellen.

    Martin

    3 Mrz 10 at 13:20

  10. Schöner Artikel, benutze kein Twitter, aber das ist ein guter Einblick. Wie wärs mit sowas für Facebook? 😉 Einfache Beispiele a la „Auf der Pinnwand“ posten oder Notizen ablegen 🙂

    Schönes Woe!

    Patric

    6 Mrz 10 at 11:45

  11. […] den Kommentaren zu meinem Artikel über das Twittern via PHP wurde ich darum gebeten die Twitter-API-Benutzung auch mittels OAuth zu zeigen. Das werde ich hier […]

  12. Sehr cooler Artikel – und weitergeholfen hat er mir auch noch 🙂
    Ich hab in meinem Adminbereich die erste (oberste) Version eingebaut, da ich Probleme mit „curl_init()“ hatte. php_curl ist bei meinem HOST/Server leider nicht aktiv…
    Kann man noch den „Absender/ via“ ändern?
    Vielen Dank und reinhaun!
    Marcus

    Marcus

    9 Apr 10 at 18:23

Leave a Reply

You can add images to your comment by clicking here.