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 Responses to Twitter API mit oAuth nutzen
Monika June 8, 2010
Simon, ich verstehe nur Bahnhof, das ist wie Astrologie für Jungs
.
Ana August 9, 2010
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
Lemmingz Shadow August 9, 2010
Das Problem schein woanders zu liege, so funktioniert es bei mir ohne Probleme:
$this->twitter->post(‘statuses/update’, array(‘status’ => $message));
Ana August 9, 2010
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.
Marcus September 1, 2010
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
MS September 4, 2010
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.
((
Lemmingz Shadow September 5, 2010
@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.
MS September 5, 2010
Hallo Lemmingz Shadow,
danke für den Tipp – aber alles per curl.
Mfg
MS
Matthias Rau September 5, 2010
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
Endolino September 8, 2010
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!!!
Lemmingz Shadow September 8, 2010
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!
Martin September 14, 2010
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?
Gert September 22, 2010
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.
Gert September 22, 2010
sorry, meinte schreiben, nicht schreien.
Vielen Dank
gruß Gert
Gert September 22, 2010
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
Lemmingz Shadow September 23, 2010
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.
Gert September 24, 2010
Vielen Dank Lemmingz Shadow, werds versuchen und erstatte dann hier Bericht.
Gruß Gert
Peter September 30, 2010
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
Gert October 1, 2010
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
Lars October 4, 2010
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
Lemmingz Shadow October 4, 2010
Habe einen Screenshot gemacht. Siehe: http://lemmingzshadow.net/files/2010/10/twitter_api_screen01.jpg
typomaniac October 14, 2010
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
Christian October 25, 2010
Kerlchen,
danke für deinen goldenen Tipp! ich liebe Dich!
Danke!
Marvin December 5, 2010
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??
Alex January 31, 2011
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?
Martin May 24, 2011
Danke ! schnell & einfach was braucht man mehr…;)
MP July 22, 2011
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?
Jannis September 17, 2011
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
Lemmingz Shadow September 17, 2011
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.
Jannis September 19, 2011
Okay, danke
Claus October 25, 2011
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?
Ralf January 20, 2012
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
Anja January 27, 2012
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