Skip to content

Twitter API mit oAuth

Es gibt ja nur wenige Sachen, die mich aufregen können, aber das was Twitter da mit seiner API macht ist wirklich sehr schlimm.

Wie viele Seiten (oder sollte ich fast alle sagen) die irgendwie einen größeren Benutzerkreis haben besitzen eine zumeist kostenfreie Api. Die Vorteile liegen auch auf der Hand : man bringt Entwickler dazu die Plattform zu vereinfachen und bekommt kostenlos einen beachtlichen Teil an Werbung.
So war es auch bei Twitter. Ohne irgendwelches Zutun von den Betreibern wurden Apps für diverse Mobile Geräte entwickelt, kleine Addons und ein paar lustige Gadgets geschrieben. Die Betreiber konnten sich aktiv um die Seite kümmern und wachsen.
Die Twitterapi gehört in meinen Augen zu den Sinnvollsten überhaupt. Man hat kostenfreien Zugriff auf sehr viele Daten die sich auf unterschiedliche Art und Weise Verknüpfen lassen und aus diesen Daten kann man wieder viele schöne und teilweise schmutzige Sachen machen. Zudem war der Zugriff extrem einfach, man benötigte nur einen Account und konnte über eine Basic Authentifizierung (die z.b. auch meist bei htaccess eingesetzt wird) auf die Api zugreifen. Leider wurde diese schon im Dezember letzten Jahres als deprecated markiert und final zum 31 August aus einigen Api Aufrufen verbannt.
Dadurch kann man nicht mehr auf die komplette Api mittels Basic Authentifizierung zugreifen. Stattdessen wird eine oAuth Authentifizierung vorrausgesetzt.
Bei eine oAuth Authentifizierung muss man die Applikation, die Zugriff erhalten soll erst erlauben zuzugreifen, diese erhält dann ein Schlüsselpaar mit dem auf das entsprechende Konto zugegriffen werden kann. Dieses Schlüsselpaar ist Anwendungsspezifisch und kann vom Nutzer jederzeit deaktiviert werden. Durch diese Technik soll das Passwortstehlen durch Apps verhindert werden. Leider bekommt Twitter dadurch die Möglichkeit komplette Apps mit einem mal aus der Twitterwelt zu verbannen und auch die Handhabung ist alles andere als einfach.
In meinem Beispiel lassen ich ein paar Analysen mit einer App laufen und dies soll über mehrere Account geschehen. Nun reicht es nicht merh aus, dass ein einfach ein entsprechendes Programm programmiere, sondern ich muss zudem auch noch mit jedem Account den Zugriff des Programms autorisieren. Um dies zu ermöglichen gibt es zwei Möglichkeiten, wobei ich als erstes direkt bei Twitter meine App mit einem Account anmelden muss um ein Schlüsselpaar für die Applikation zu erhalten. Bei dieser Erstellung gebe ich zugleich noch mit an, ob es eine Browser oder Desktop App werden soll.
Bei einer Browseranwendung kann man eine Callback URL angeben an die das Anwenderschlüsselpaar nach erfolgter Autorisierung gesendet wird. Dies fällt für mich leider komplett flach, weil der Rechner für die Analysen fest von jeglichen Zugriffen außerhalbs geschützt ist (ein Wrapper auf einen anderen Server wäre natürlich möglich, aber alles andere als sicher und schön).
Bei einer Desktop Anwendung wird der User ein eine bestimmte URL geleitet und nach dem Login erhält dieser einen PIN mit der man die Desktop Anwendung freischalten kann. Den entsprechenden Workflow gibt es auch nochmal im Apiwiki beschrieben.
Der erste Schritt in Richtung oAuth war auf jeden Fall sehr mühselig, auch wenn es entsprechende Libaries gibt helfen diese bei der ersten Implementation nur teilweise.
Für eine Firma ist diese Neuimplementation ein wirklicher Zeitfresser. Man kann vielleicht sogar schon überlegen über eine Drittfirma diese Dienstleistungen erledigen zu lassen.
Ich werde mal noch ein wenig mit der oAuth Autentifizierung rumspielen und bestimmt noch ein oder zwei Artikel mit Beispielcode veröffentlichen.

Jens Altmann

Avatar Jens Altmann

Jens Altmann bloggt auf gefruckelt.de regelmäßig über alle Themen, die ihn interessieren. Neben seiner Tätigkeit als Softwarearchitekt studiert er Wirtschaftsinformatik an der Uni Potsdam.

Weitere Informationen über Jens Altmann

Interessante Artikel

Kommentare

Keine Kommentare

Kommentiere diesen Artikel als erstes!

Kommentiere den Artikel

Required

Required

Optional