• Twittern mit PHP und dem Zend Framework

    von am 1. Februar 2010

    Heute wird mal wieder ein wenig gezwitschert. Ihr wisst ja, dass ich seit einiger Zeit jeden Morgen bei Erscheinen eines neuen Artikels einen tweet absetze. Da ich aber meistens im diese Zeit noch nicht mal aufgestanden bin und auch nicht vor habe es in Zukunft zu ändern, musste ein Automatismus her.

    Diesen gibt es schon eine ganze Weile. Ich hatte mich damals für die wirklich charmante und kurz gehaltene Version einer tweet() Methode von Fabien Potencier entschieden. Das Ding lief auch eine ganze Zeit lang gut durch. Nur leider versagt das System seit “kurzem” immer häufiger. Es muss also eine neue Lösung her. Da ich in der letzten Zeit immer mal wieder mit dem Zend Framework rumgespielt habe, war es natürlich klar, dass ich dort erstmal nachschauen werde. Zend_Service_Twitter heißt hier die Zauberklasse. Und was soll ich sagen … mit zwei Zeilen Code hatte ich alles erledigt:

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

    Genau die gleichen Zeilen Code werdet ihr bestimmt auch in der Doku des Frameworks finden. Warum ich es trotzdem schreibe? Ganz einfach! Ich beschäftige mich gerade mit dem Thema und musste es eh umbauen, da habe ich gedacht ich nutze den Augenblick und schreibe das noch mal zusammen. Naja einen anderen Grund gibt es auch noch. Ich finde es schön, wie Zend es geschafft hat eine doch relativ komplexe Geschichte, wie eine tweet absetzen in so ein wunderbar einfaches Konstrukt gepackt hat. Hut ab. Genau so stelle ich mir saubere Programmierung vor.

    Vielleicht habe ich mit dem Artikel auch in jemanden Interesse geweckt ein wenig mit dem Zend Framework zu spielen. Die Angst, dass man das große MVC Monster wecken muss, nur weil man eine Kleinigkeit wünscht, sollte auf jeden Fall genommen sein.

    Nils Langner

    Auch wenn Ihr es mir nicht glauben werdet, aber ich habe nichts gegen PHP. Ich rege mich einfach nur gerne auf. Ok so schlimm ist es auch nicht. Eigentlich wollte ich schon immer einen Blog haben und da ...

    Zum Profil von Nils Langner

    12 Kommentare »


    • antpaw
      am 1. Februar 2010 um 08:45 Uhr

      naja, wenn man das passwort und den usernamen hat braucht man nur 8-10 curl Zeilen um ein tweet zu setzen, da ist die library etwas übertrieben. Die twitter api sollte über oauth bedient werden da es sicherer ist und der curl support (worauf das ding ja basiert) bald von twitter geschlossen wird.


    • Nils Langner
      am 1. Februar 2010 um 08:54 Uhr

      @antpaw: Naja aber die Fabien Lösung hat einiges an Zeichen (da komme ich mit 80 nicht hin) und außerdem bin ich Anwender der Bibliothek. Ist mir also eigentlich egal, wie groß sie ist, solange sie performant ist.


    • Johannes
      am 1. Februar 2010 um 09:33 Uhr

      Bei den zwei Zeilen fehlt die Fehlerprüfung. Und zu Lehrzwecken mal die native PHP-Lösung, auch ohne Fehlerprüfung:

      $opts = array(‘http’ =>
      array(
      ‘method’ => ‘POST’,
      ‘header’ => ‘Content-type: application/x-www-form-urlencoded’,
      ‘content’ => http_build_query(array(‘status’ => $status))
      );
      $result = file_get_contents(“http://$user:$password@twitter.com/statuses/update.json”, false, stream_context_create($opts));

      Und “Performance” halte ich das das falsche Kriterium – die HTTP-Kommunikation dürfte bei allen Wegen das mit Abstand langsamste sein, da dann den Codeaußenrum zu “optimieren” hat keinen Effekt. Wichtiger is Wartbarkeit, Lesbarkeit, Robustheit, …


    • Nils Langner
      am 1. Februar 2010 um 09:39 Uhr

      @Johannes: Danke für das Snippet. das mit der Performance hatte ich auch so in etwa gemeint, deiner Argumentation war nur schöner ;)


    • Robert Kummer
      am 1. Februar 2010 um 09:46 Uhr

      Ich sehe das als Anwender einer Bibliothek genauso. Man sollte nicht unbedingt die Größe im Hintergrund bei der Auswahl zu Rate ziehen, wenn die Grundperformance den eigenen Anforderungen entspricht.


    • Dennis Becker
      am 1. Februar 2010 um 09:50 Uhr

      Ich denke mal, dass das ZF bald auf die neue Twitter API umstellen wird. Aktuell neu ist ja erstmal, dass es überhaupt Zend_Oauth gibt. SOmit steht der Änderung eigentlich nichts mehr im Wege :)


    • Christian
      am 1. Februar 2010 um 10:00 Uhr

      Hmm.. im Grunde stimme ich euch allen zu. Aber ich frag mich dennoch, warum die alte Funktionalitaet seit kurzem immer haeufiger versagt und wie sich das aeussert. Weiss da jemand mehr?


    • Tobi
      am 1. Februar 2010 um 16:15 Uhr

      Das ist es, was ich am Zend Framework so schätze. Alles geht einfach und schafft so auch einen gut lesbaren Code. Nur wegen der Twitter API würde ich das ZF nun aber auch nicht ins Boot holen. Das stört mich überhaupt am ZF sehr: man kann nicht einzelne Komponenten aus dem Gesamtpaket auskoppeln und für sich verwenden, sondern muss wegen der vielen gegenseitigen Abhängigkeiten das gesamte Framework mit herum schleppen.

      Grüße
      Tobi


    • Ulf
      am 2. Februar 2010 um 08:31 Uhr

      Nur weil man sich die kompletten Sourcen des Zend-Frameworks in einem Verzeichnis legen muss, heißt das nicht zwangsläufig dass man irgendwelche Abhängigkeiten davon hat. Insbesondere solche Schnittschnellen sind sehr lose gekapselt. Und ein paar MB PHP-Files irgendwo auf den Server zu legen sollte nun wirklich nicht stören wenn man dabei so viel (Entwicklungs-)Zeit sparen kann.


    • Cem Derin
      am 2. Februar 2010 um 15:45 Uhr

      Abgesehen davon, dass ich das Thema Twitter und ZF schon vor geraumer Zeit angeschnitten habe (http://phphacker.net/2009/05/07/hausgemachte-twitter-services/): Sooo wild sind die Abhängigkeiten im ZF nun auch wieder nicht. Um genau zu sein ist es durchaus Möglich, einzelne Komponenten zu benutzen, ohne (wie Nils beschrieben hat) das komplette MVC anzuwerfen. Und das ist auch (zum Teil) gewollt. Und wenn gewisse Klassen, die auf HTTP-Ebene Daten rausschicken oder holen übergebene URLs mit den entsprechenden Validator-Klassen prüfen, so halte ich das für eine gerechtfertigte Abhängigkeit. Und wem die knappen 25 MB auf der Platte weh tun, der sollte mal seine Prioritäten überdenken …


    • Maik
      am 3. Februar 2010 um 08:49 Uhr

      Jetzt muss ich hier auch mal was schreiben sogar was passendes :) . Ich selbst nutze Zend nicht und hatte daher mal vor Ewigkeiten etwas niedergeschrieben. Ist vllt nicht der sauberste und beste Code aber er funktioniert :) . Hier der Link zum Twitter Plugin.


    • manuw
      am 8. Februar 2010 um 10:37 Uhr

      curl –basic –user username:password –data status=”Mein Status” http://twitter.com/statuses/update.xml

      ^^

    RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

    Hinterlasse einen Kommentar

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.