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! :D

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