Twitter API mit oAuth nutzen

Am 30. Juni wird Twitter die Standard Authentifizierung der Twitter API abschalten. Bis dahin sollte man seine Scripte so umstellen, dass sie oAuth benutzen. Wie lange man dafür noch Zeit hat erfährt man übrigens hier: http://www.countdowntooauth.com/ 😉

Da es mittlerweile schon einige PHP Klassen gibt welche oAuth unterstützen ist die Umstellung relativ einfach zu bewerkstelligen. Hier ein kleines Tutorial:

Zunächst muss man auf http://dev.twitter.com/ eine neue “App” anlegen. (Vorher einloggen) Der Prozess ist selbsterklärend. Nachdem man die App angelegt hat erhält man einen “Consumer key” und ein “Consumer secret”. Diese beiden Strings benötigen wir später für die Authentifizierung. Weiterhin braucht man den “oAuth Token” und das “oAuth Token Secret”. Um diese zu bekommen oben auf Your apps klicken. Dann auf “Edit Details” der entsprechen App. Nach zwei weiteren Klicks auf “Application detail” (rechts) und “My Access Token” (auch rechts) hat man alle benötigten Tokens und Passwörter zusammen die man in einem PHP-Script benötigt.

Nun kann man entweder selbst damit anfangen eine oAuth Authentifizierung zu coden oder man benutzt eine der fertigen Klassen. Ich habe für dieses Beispiel eine fertige oAuth Klasse von Abraham Williams benutzt.
Hier ein kleines Codebeispiel für die Authentifizierung mit oAuth und dem anschließenden posten eines Tweets:

$consumer_key = 'insert_key';
$consumer_secret = 'insert_secret';
$access_key = 'insert_key';
$access_secret = 'insert_secret';

require_once('twitteroauth/twitteroauth.php');

$twitter = new TwitterOAuth ($consumer_key, $consumer_secret, $access_key, $access_secret);
$twitter->post('statuses/update', array('status' => 'Testing oAuth. Please ignore...'));

34 thoughts on “Twitter API mit oAuth nutzen

  1. Ana

    Ich scheitere leider daran, für die Tweet-Message eine Variable ($msg) einzufügen:

    $twitter->post(‘statuses/update’, array(‘status’ => ‘$msg’));

    Dies gibt den Variablennamen als Text aus.

    So
    $twitter->post(‘statuses/update’, array(‘status’ => $msg));
    und so
    $twitter->post(‘statuses/update’, array(‘status’ => “$msg”));
    geht gar nichts.

    Bin dankbar für jeden Tipp!

    Ana

  2. Simon

    Das Problem schein woanders zu liege, so funktioniert es bei mir ohne Probleme:

    $this->twitter->post(‘statuses/update’, array(‘status’ => $message));

  3. Ana

    Danke, habe den Fehler gefunden. In der Message hatte es Klammerzeichen “)”. Ohne geht es, muss jetzt nur noch sehen, ob man auch Klammerzeichen maskieren kann.

  4. Marcus

    Hi,
    sehr cooles Tutorial!!! Funzt auch alles soweit bei mir.
    Ich hab in meinem blog nen Adminbereich mit mehreren Nutzern, die tweeten können. Hatte das bislang mit php-curl gelöst.
    Hast du evtl. einen Tipp, wie über mein UI andere Nutzer mit IHREM Twitter-Namen und PW tweets erstellen können? Oder gild das nur für mich, weil ich die App registriert habe?
    THX
    Marcus

  5. MS

    Gibt es eigentlich auch eine andere als die “oAuth Klasse von Abraham Williams”? Ich habe keine Möglichkeit, curl zu nutzen und stehe im Moment vor einem Rätsel, wie ich – wie bisher – mein Statusupdate mit php an Twitter senden soll. :-(((

  6. Simon

    @Marcus: Richtig, die “Authorization” ist nur für den Twitter Account gültig mit dem du eingeloggt warst als du die App angelegt hast. Für mehrere Nutzer müssten diese entsprechen auch eine App mit ihrem Account registrieren.

    @MS: Bei Twitter sind noch einige oAuth Klassen verlinkt: http://dev.twitter.com/pages/oauth_libraries#php
    Ob eine davon ohne CURL auskommt kann ich dir allerdings nicht sagen.

  7. Matthias Rau

    Hallo zusammen,

    danke für das Tutorial hier. Allerdings bin ich offenbar zu doof für das ganze. Ich habe jetzt folgendes Problem. Ich habe den Code so aufgebaut:

    require_once(‘twitteroauth.php’);
    $twitter = new TwitterOAuth ($consumer_key, $consumer_secret, $access_key, $access_secret);
    $datei = file(‘../wetter/homepagewetter1.txt’);
    $msg = $datei[8];
    $twitter->post(‘statuses/update’, array(‘status’ => $msg));

    Anstelle, dass mir jetzt die achte Zeile der Datei angezeigt wird, bleibt der Klartext bei Twitter stehen, also “$datei[8]”. Die Textdatei sieht folgendermaßen aus:
    http://www.wetter-kressbronn.de/wetter/homepagewetter1.txt

    Ich hoff, ihr könnt mir helfen, denn ich verzweifel schon den ganzen Abend dran!

    Viele Grüße
    Matze

  8. Endolino

    Hallo,
    Du schreibst:

    “Um diese zu bekommen oben auf Your apps klicken. Dann auf “Edit Details” der entsprechen App. Nach zwei weiteren Klicks auf “Application detail” (rechts) und “My Access Token” (auch rechts) hat man alle benötigten Tokens und Passwörter zusammen die man in einem PHP-Script benötigt.”

    Leider finde ich “My Access Token” und Passwörter nicht. Wo sollen die denn stehen?

    Wäre dir zu 1000 Dank verbunden!!!

  9. Simon

    Nachdem du die App angelegt hast findest du unter “Application details” den “Consumer key” sowie den “Consumer secret”. Wenn du dann rechts auf “My Access Token” klickst findest du dort den “Access Token” und das “Access Token Secret”.

    Das funktionier natürlich erst nachdem du eine App angelegt hast!

  10. Pingback: BLOGTRAFFIC: Der Blog-Monitor » Twitter und das OAuth-Verfahren

  11. Martin

    Hab leider auch das Problem das der Code nicht funzt. Wenn ich mir die Fehlermeldung anschaue. Kommt folgendes:

    stdClass Object ( [request] => /1/statuses/update.json [error] => Incorrect signature

    Habt ihr dafür ne Lösung?

  12. Gert

    wenn ich oben auf den Link “oAuth Klasse von Abraham Williams” gehe dan sind dort unter twitteroauth/ twitteroauth/ jedoch zwei Klassen: OAuth.php und twitteroauth.php. Welche der beiden Klassen muß ich denn bei mir installieren, weil schreien tust du über OAuth.php, aber eingebunden im obigen Script ist jedoch twitteroauth.php. Somit bin ich etwas verwirt über deinen Beitrag.

  13. Gert

    gleich noch eine Frage bitte:
    wo bekomme ich diese letzten beiden der folgenden Werte her?

    $consumer_key = ‘insert_key’;
    $consumer_secret = ‘insert_secret’;
    $access_key = ‘insert_key’;
    $access_secret = ‘insert_secret’;

    die ersten beiden finde ich ja in der schnittstelle bei Twitter, aber aber von den beiden letzten Werten steht NIX in meiner Schnittstelle.

    Vielen Dank nochmal
    Gruß Gert

  14. Simon

    Du benötigst beide Dateien. Bei github einfach mit dem Button “Download Source” (oben rechts) alles herunterladen.

    Wie du an “Access Token” und “Access Token Secret” kommst habe ich ein paar Kommentare über diesem und im eigentlichen Beitrag schon beschrieben.

  15. Peter

    Hallo,

    bei mir klappt (nach einigen Problemen mit fehlendem json) jetzt Alles soweit wunderbar.
    Allerdings frage ich mich, wie ich automatisch überprüfen kann, ob der Tweet erfolgreich abgesetzt wurde.
    Kann mir da jemand auf die Sprünge helfen?

    Danke, Peter

  16. Gert

    Hallo Lemmingz Shadow,
    die Anleitung ist super und dein Script funzt auch, wenn ich es als einzelne Seite aufrufe, aber sowie ich es in eine Seite einbaue, stirbt mir die Seite ab auch, wenn ich en Pfad auf require_once(‘twitteroauth/twitteroauth/twitteroauth.php’); ändere.

    Hast du da noch eine Idee?

    Danke und Gruß Gert

  17. Lars

    Hallo,

    ich habe eine App bei Twitter angelegt, aber bei mir gibt es aber kein “My Access Token” auf der Seite “Application Details”. Wo soll das zu finden sein?

    Ich brauche eigentlich nur eine einfach Applikation, die mir automatisiert meinen Status mit Texten aus einer Datenbank aktualisiert, keine Sessions, keine temporären Sachen, bei denen Benutzerinteraktion notwendig ist.

    Ich bin für jeden weiteren Tipp dankbar. 🙂

    Vielen Dank und viele Grüße,
    Lars

  18. typomaniac

    Hallo,

    vielen Dank! Es klappt alles ganz hervorragend (nachdem ich den Server auf PHP 5 umgestellt habe) :-). Ich habe allerdings ein kleines Problem – vielleicht hat jemand ja eine Lösung. Ich nutze das Skript um Temperaturen zu twittern.
    Das Skript wird via cronjob alle 30 Minuten aufgerufen. Jetzt ist es allerdings so, dass scheinbar nur gepostet wird, wenn der Wert vorher noch nicht gepostet wurde. Z.B:

    18:00 Uhr: 13 Grad
    18:30 Uhr: 13,5 Grad
    18:30 Uhr: wenn es jetzt wieder 13 Grad hat, dann wird das nicht gepostet weil dieser Wert ja schon bei Twitter steht. Ist das ein grundsätzliches Twitter”problem” oder gibt es eine Lösung?

    danke sehr!

    tm

  19. Marvin

    Leider funktioniert es bei mir gar nicht 🙁

    Ich habe alle keys und secrets eingegeben um das einfach mal zu testen, aber es tut sich nichts. Kein Fehler, aber auch kein Tweet erscheint 🙁

    Hat Jemand eine Idee??

  20. Alex

    Bei mir das Gleiche wie bei meinem Vorgänger.
    $consumerKey
    $consumerSecret
    $oauthToken
    $oauthTokenSecret
    hab ich eingetragen. $twitter->post(‘statuses/update’, ‘… returned gar nix.
    Was ist mit der Callback-URL – ist die notwendig? Ich habs mal auf die callback.php aus twitteroauth gelegt. Das $twitter->http_info object enthält für alle keys ausser url 0
    Jemand eine Ahnung?

  21. MP

    Hi, ich hab zwar jetzt alles eingerichtet und es kamen auch schon Meldungen aber wenn ich z.B.

    Neue Bewertung für xy eintrage dann nimmt er die nicht. Ausserdem wenn mal etwas angezeigt wird dann erst nach 5 min ist das korrekt?

  22. Jannis

    Ist es möglich, auch von einem anderen Account als von dem bei Twitter Developer für die App registrierten zum twittern zu verwenden? Wäre sehr praktisch für mich 😉

  23. Simon

    Soweit mit bekannt ist geht das nicht. Sprich du musst die App immer mit dem Account erstellen den du später auch nutzen möchtest.

  24. Claus

    Bin ich zu doof dafür oder übersehe ich irgend was Grundlegendes? Ich will per PHP jeweils einen Tweet losschicken, sobald eine Webseite aufgerufen wird. Liegt es daran, dass ich bei http://dev.twitter.com/ nur readonly-Rechte bekomme oder was läuft da verkehrt?

  25. Ralf

    Hallo,

    ich bekomme das nicht zum Laufen. Möchte mir die Liste meiner Follower anzeigen lassen:

    get(‘user/followers’,array(‘screen_name’=>’ChiefDeveloper’));
    $twitter->get(‘followers/ids’,array(‘screen_name’=>’ChiefDeveloper’));
    ?>

    var_dump() zeigt Folgendes (die Keys und Secrets hab ich hier in der Anzeige geiXt, liegen aber im Object richtig vor):

    object(TwitterOAuth)#1 (13)
    {
    [“http_code”]=>NULL
    [“url”]=>NULL
    [“host”]=>string(26) “https://api.twitter.com/1/”
    [“timeout”]=>int(30)
    [“connecttimeout”]=>int(30)
    [“ssl_verifypeer”]=>bool(false)
    [“format”]=>string(4) “json”
    [“decode_json”]=>bool(true)
    [“http_info”]=>NULL
    [“useragent”]=>string(25) “TwitterOAuth v0.2.0-beta2”
    [“sha1_method”]=>object(OAuthSignatureMethod_HMAC_SHA1)#2 (0) { }
    [“consumer”]=>
    object(OAuthConsumer)#3 (3)
    {
    [“key”]=>string(21) “xxx”
    [“secret”]=>string(42) “xxx”
    [“callback_url”]=>NULL
    }
    [“token”]=>
    object(OAuthConsumer)#4 (3)
    {
    [“key”]=>string(50) “xxx”
    [“secret”]=>string(43) “xxx”
    [“callback_url”]=>NULL
    }
    }

    Die Werte sind (soweit vorhanden) scheinbar alle richtig. Nur viele Werte sind NULL. Ist das Okay so, weil diese Werte nicht gebraucht werden? Oder müssen sie auch mit Werten gefüllt werden?

    Ich will nur selber auf die Twitter-API zugreifen, verwende daher meinen von Twitter bereit gestellten Access-Token und -Secret. Sobald ich jedoch eine der beiden “get”-Funtionen aufrufe, zeigt die Website zuerst kurz den var_dump an und wechselt dann nach ca. 10 Sekunden zur Windows-IE-Fehlerseite: “Die Webseite kann nicht angezeigt werden.” Ein richtig dämliche Fehlermeldung, weil man nicht ersehen kann, WARUM die Website nicht angezeigt wird (Windows versucht anscheinend immer noch, seine User dumm zu halten). Es ist jedenfalls nicht der 404-HTTP-Error.

    Ich habe bei meiner auf Twitter angemeldeten App eine CallBack-URL callback.php angegeben. Auf diese wechselt Twitter aber nicht, sondern bleibt beim aufrufenden Script. Und ich glaube auch, dass diese CallBack-URL in diesem Fall nicht gebraucht wird.

    Könnt Ihr einen Fehler erkennen? Ich probiere schon seit Tagen und bekomme das nicht hin.

    Freue mich über jeden Hinweis.
    Ralf

  26. Anja

    Hallo zusammen,
    veilen Dank für den Beitrag. Ich bin ehrlich geasagt ziemlich neu auf dem Gebiet. Schon bei der Anmeldung scheitere ich, da ich mir einfach nicht erklären kann, was eine Callback URL ist? Muss ich dort eine E-Mail-Adresse angeben? Oder eine Webadresse? Warum? Selbsterklärend ist das für mich nicht oder ich stehe auf dem Schlauch! Ich würde mich über jegliche Info freuen. Besten Dank.
    Viele Grüße, die Anja

Leave a Reply

Your email address will not be published. Required fields are marked *

π