PHP: Twitter-Nachrichten verschicken ohne OAuth

Bots auf Twitter müssen nicht unbedingt immer negativ sein. Klar, viele von ihnen sammeln Follower, um dann durch das Posten von Werbe-Tweets Geld zu verdienen. Doch einige Bots sind durchaus auch sinnvoll - z.B., wenn sie einfach nur Statusmeldungen abgeben, die interessant für andere Leute sein könnten.

Ein Beispiel dafür ist z.B. der Bot @hetznerfail, der automatisiert die Störungsmeldungen von Hetzner-Status.de bei Twitter und Identi.ca postet. Dadurch wird man automatisch informiert, wenn man seine Timeline liest und spart sich das manuelle Abrufen der Webseite.
Update: Der @hetznerfail-Bot wurde deaktiviert.

Um diesen Dienst zu realisieren musste ich die Nachrichten natürlich irgendwie bei Twitter posten können. Allerdings hatte ich ehrlich gesagt keine Lust, mich in das Thema OAuth einzuarbeiten. Aus diesem Grund bin ich einen anderen Weg gegangen...

...es ist nämlich möglich, seinen Account bei Identi.ca mit einem Twitter-Account zu verbinden. Identi.ca kann sich dann auch darum kümmern, die Statusmeldungen auf Identi.ca zu Twitter zu üertragen. Perfekt! Man bedient zwei Plattformen und spart sich obendrein das OAuth-Gebastel! 😀

Identi.ca Account mit Twitter verknüpfen

Wie man Statusnachrichten bei Identica veröffentlichen kann, hatte ich schon vor einer Weile mal gezeigt - damals ging es um das Übertragen von Twitter-Tweets zu Identica. Der eigentliche Status-Senden-Code sieht so aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php

$IDENTICA_API    = "https://identi.ca/api/statuses/update.xml";
$IDENTICA_STATUS = "status=";
$IDENTICA_SOURCE = "&source=";

$USER_AGENT = "Identica-Client 0.0a";

function sendStatus($username, $password, $status, $source) {
  global $IDENTICA_API;
  global $IDENTICA_STATUS;
  global $IDENTICA_SOURCE;
  global $USER_AGENT;
 
  $apiHeader = $IDENTICA_STATUS . urlencode($status) .
               $IDENTICA_SOURCE . urlencode($source);

  $options = array(
    CURLOPT_HTTPAUTH       => CURLAUTH_BASIC,
    CURLOPT_POST           => true,
    CURLOPT_POSTFIELDS     => $apiHeader,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_USERAGENT      => $USER_AGENT,
    CURLOPT_USERPWD        => $username . ":" . $password,
    CURLOPT_VERBOSE        => 1
  );
  $curl = curl_init($IDENTICA_API);
  curl_setopt_array($curl, $options);
  $output = curl_exec($curl);
  $header = curl_getinfo($curl);
  curl_close($curl);

  $result = $output;
  if ($header["http_code"] == 200) {
    $result = true;
  }
  return $result;
}

?>

Was benötigt wird, ist der Nutzername und das Passwort eines Identi.ca-Accounts, dazu die eigentliche Statusnachricht und der Name eines User-Agenten (bei Identi.ca "source" genannt). Wenn das Versenden funktioniert, gibt die Funktion sendStatus() den Wert TRUE zurück, im Fehlerfall erhält man eine Fehlermeldung von Identi.ca als Rückgabewert.

Ich hoffe, ihr könnt mit dem Code etwas anfangen - ich selbst habe ihn inzwischen schon zwei Mal benötigt. 😉

Zum Schluss noch etwas Rechtliches:
Der Autor dieses Programms haftet nicht für Schäden an Soft- oder Hardware oder Vermögensschäden, die durch das Benutzen des Programms entstehen, es sei denn, diese beruhen auf einem grob fahrlässigen oder vorsätzlichen Handeln des Autors, seiner Erfüllungsgehilfen oder seiner gesetzlichen Vertreter.
Status-Grüße, Kenny

5 Kommentare » Schreibe einen Kommentar

  1. @Bernd: Ich habe den Quellcode jetzt mal rausgenommen, da das ganze in der Form einfach nicht zielführend ist. Wenn das wirklich der gesamte Quelltext war, dann hast du offensichtlich wahllos rumkopiert.

    Eigentlich sollte es reichen, den Code - wie oben gesehen - zu nehmen und anschließend einfach einen Aufruf in der Art sendStatus("bernd", "d4sBr0t", "Ich bin Bernd. Das Brot.", "Mein Client"); zu machen.

  2. Ich habe es abgeändert, allerdings gibt er jetzt gar keinen error mehr aus :/ Funktionieren tut es trotzdem nicht und ein sendStatus() true sehe ich auch nicht :S

    [schnipp]

  3. Ich habe mir das jetzt mal komplett ohne PHP Kenntnisse zusammen kopiert und dann halt noch was ergänzt allerdings bekomme ich immer einen Error

    "Parse error: syntax error, unexpected T_VARIABLE in /is/htdocs/wp10717552_78C6XFGP2N/www/daten/test.php on line 10"

    Wäre nett wenn du mir mal helfen könntest 😉
    Hier ist der Code

    [schnipp]

  4. Jetzt ist OAuth ja kein Teufelszeug, sondern soll ja gewisse Sicherheit mitbringen. 🙂

    Und sicher gibt es auch OAuth-Bibliotheken für PHP.
    Aber ich hab ja gerade am Wochenende festgestellt, wie schlimm ich PHP mittlerweile finde (man muss einfach mal eine andere Sprache liebgewonnen haben, die sich wesentlich einfacher und natürlicher anfühlt).

    • Ja, klar soll OAuth Sicherheit bringen und natürlich gibt es auch OAuth-Bibliotheken für PHP. Aber wenn man "schnell mal" einen Bot o.Ä. auf die Beine stellen will, ist es mit dem Umweg über Identi.ca doch ein Stückchen einfacher. Abgesehen davon habe ich eine gewisse Abneigung gegenüber den verfügbaren OAuth-Bibliotheken - bei den Quelltexten fange ich stellenweise an zu schreien.

      Zum Thema PHP: Ich selber finde derzeit, dass es eine der besten Sprachen im Scripting-Umfeld ist. Kollegen, die z.B. Perl für das Lösen kleinerer Aufgaben nutzen, brauchen in der Regel wesentlich länger für die Implementierung - argumentieren meist damit, dass Perl wenigstens von vorneherein auf allen System verfügbar ist.

Schreibe einen Kommentar

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.