Twittern mit Excel
15.04.2009
Twitter.com ist ein Mikroblogging Dienst, bei welchem die Beiträge 140 Zeichen nicht übersteigen dürfen. Das Senden von Nachrichten geschieht in der Regel über den Browser. Zwar gibt es auch Programme, die sich auf Twitter spezialisiert haben, unser Hauptwerkzeug ist jedoch Excel. So entstand die Idee zur Programmierung eines Excel-Add-Ins zum Senden von Nachrichten an Twitter.In diesem Blogbeitrag möchten wir die grundlegenden Techniken zum Senden von Nachrichten an Twitter erläutern. Das spezielles Beispielprojekt zu diesem Beitrag enthält einen Auszug des Codes vom Addin. Abschließend stellen wir kurz das Add-In vor.
Schnittstelle von Twitter
Um das Vorhaben zu realisieren, war zunächst zu klären, ob es eine Schnittstelle (API bzw. Application Programming Interface) zum Server von Twitter gibt. Im Internet wird man schnell bei Twitter selbst fündig. Die Seiten sind zwar in Englisch, jedoch mit einem Grundwortschatz gut verständlich.
Twitter folgt laut API dem REST-Architekturstil (Representational State Transfer). Dieser ermöglicht es Ressource mit einer eigenen URI anzusprechen. Als Transportprotokoll wird bei Twitter HTTP verwendet. Um Daten an den Server von Twitter senden zu können, muss die Methode POST verwendet werden; ähnlich wie bei einem Kontakformular auf einer Webseite.
Laut der Dokumentation bei Twitter ist, um eine Nachricht zu senden, an den Aufruf der Website twitter.com die Funktion statuses/update und der Parameter status mit dem Inhalt der Nachricht anzuhängen sowie ein Datenformat auszuwählen. Wir erhalten somit:
http://twitter.com/statuses/update.xml?status=Nachricht
Es stellt sich jedoch noch das Problem, dass damit der Benutzer bei Twitter noch nicht authentifiziert ist. Dies erreichen wir, indem wir an den Aufruf den Benutzernamen und das Kennwort bei Twitter übergeben, also:
http://Benutzername:Kennwort@twitter.com/statuses/update.xml?status=Nachricht
Damit Twitter aber auch mit den übertragenen Daten etwas anfangen kann, müssen wir noch die Zeichenkodierung übergeben und zuvor gegebenenfalls die Nachricht entsprechend kodieren. So ist das direkte Senden eines < oder eines > nicht erlaubt. Diese müssen umcodiert werden.
Senden von Nachrichten an Twitter mit Excel
Wie senden wir aber nun die Nachricht aus Excel heraus? Microsoft Windows enthält eine ActiveX Bibliothek, die seit dem Internet Explorer 5.0 verfügbar ist und zum Senden von XMLHttpRequests geeignet ist. Diese Bibliothek wird auch gerne von Ajax-Anwendungen, Stichwort Web 2.0, verwendet. In Excel können wir eine Objektinstanz dieser Bibliothek durch den Aufruf von CreateObject() erzeugen. Unser Code zum Senden einer Nachricht an Twitter sähe dann wie folgt aus:
Public Sub mlfpTwitter()
Dim n As String
Dim p As String
Dim m As String
Dim r As String
Dim x As Object
' Bypass...
On Error Resume Next
' Read...
n = ThisWorkbook.ActiveSheet.Cells(3, 4).Value
p = ThisWorkbook.ActiveSheet.Cells(5, 4).Value
m = ThisWorkbook.ActiveSheet.Cells(7, 4).Value
' Reset...
ThisWorkbook.ActiveSheet.Cells(11, 4).Value = ""
' Check...
If Len(n) < 1 Then
' Message...
ThisWorkbook.ActiveSheet.Cells(11, 4).Value = _
"Kein Benutzername angegeben."
' Exit...
Exit Sub
End If
' Check...
If Len(p) < 1 Then
' Message...
ThisWorkbook.ActiveSheet.Cells(11, 4).Value = _
"Kein Kennwort angegeben."
' Exit...
Exit Sub
End If
' Check...
If Len(m) < 1 Then
' Message...
ThisWorkbook.ActiveSheet.Cells(11, 4).Value = _
"Keine Nachricht angegeben."
' Exit...
Exit Sub
Else
If Len(m) > 140 Then
' Message...
ThisWorkbook.ActiveSheet.Cells(11, 4).Value = _
"Nachricht zu lang."
' Exit...
Exit Sub
End If
End If
' Encode...
m = mlfpEncode(m)
' Cursor...
Application.Cursor = xlWait
' Create...
Set x = CreateObject("Msxml2.XMLHTTP")
' Check...
If Not x Is Nothing Then
' Open...
x.Open "POST", "http://" & n & ":" & p & _
"@twitter.com/statuses/update.xml?" & _
"status=" & m, False
' Header...
x.setRequestHeader "Content-Type", _
"content=text/html; charset=UTF-8"
' Send...
x.send
' Result...
If InStr(Trim(LCase(x.responseText)), "error") > 0 Then
' Message...
ThisWorkbook.ActiveSheet.Cells(11, 4).Value = _
"Übertragung fehlgeschlagen."
Else
' Message...
ThisWorkbook.ActiveSheet.Cells(11, 4).Value = _
"Übertragung erfolgreich."
End If
End If
' Clear...
Set x = Nothing
' Cursor...
Application.Cursor = xlDefault
End Sub
Die Variablen n, p und m nehmen jeweils den Inhalt von Zellen der aktiven Excel Tabelle auf. Anschließend werden diese geprüft, zum Beispiel ob deren Länge größer Null ist. Ist die Prüfung erfolgreich, wird die Nachricht zunächst in UTF8 kodiert, d.h. alle Zeichen in der Nachricht, die in einer zuvor geladenen Mapping-Tabelle gefunden werden, werden durch deren UTF8-Code ersetzt. Später mehr zu dieser Funktion.Set x = CreateObject("Msxml2.XMLHTTP") erzeugt nun eine Objektinstanz der ActiveX Bibliothek. Ist dies erfolgreich, können wir nun unsere Verbindung über x.Open() öffnen und ein POST an die oben beschriebene Twitter Website absetzen. Über x.setRequestHeader() teilen wir dem Server noch mit, dass es sich um eine UTF8 Kodierung handelt. Und zuletzt senden wir die Nachricht über x.send(). Wir erhalten ein Antwort vom Server und können diese über den Inhalt von x.responseText auswerten.
Abschließend noch ein paar Worte zu unserer Kodierfunktion. Die Funktion mlfpMap() liest aus einer Excel-Tabelle (die Tabelle „Map“ in der Beispieldatei) eine Liste von Zeichen in ein Collection-Object ein.
Public Function mlfpMap() As Long
Dim c As Long
Dim n As Long
Dim f As String
Dim q As String
' Bypass...
On Error Resume Next
' Create...
Set mlvpMap = New Collection
' With...
With ThisWorkbook.Worksheets(3)
' Loop...
For n = 1 To 98
mlvpMap.Add "%" & _
Replace(CStr(.Cells(n + 1, 4).Value), ",", "%"), "K" & _
Asc(CStr(.Cells(n + 1, 3).Value))
Next n
End With
' Return...
mlfpMap = mlvpMap.Count
End Function
Die Funktion mlfpEncode() prüft zunächst, ob das zuvor genannte Collection-Objekt existiert oder nicht. Wenn nein, dann wird mlfpMap() zum Erzeugen aufgerufen. Wir sparen uns somit dauernde Aufrufe der Funktion. In mlfpEncode() wird dann die aktuelle Nachricht Zeichen für Zeichen durchlaufen und gegebenefalls ein Zeichen durch dessen UTF8 Kodierung ersetzt.
Public Function mlfpEncode(Message As String) As String
Dim n As Long
Dim s As String
Dim t As String
' Bypass...
On Error Resume Next
' Check...
If mlvpMap Is Nothing Then
mlfpMap
End If
' Loop...
For n = 1 To Len(Message)
' Try...
t = ""
t = mlvpMap("K" & Asc(Mid(Message, n, 1)))
' Check...
If Len(t) > 0 Then
s = s & t
Else
s = s & Mid(Message, n, 1)
End If
Next n
' Return...
mlfpEncode = s
End Function
Wir stellen Ihnen gerne für den zuvor beschriebenen Code unser Beispielprojekt zur Verfügung. Dieses können Sie in unserem Unser Downloadbereich herunterladen.Twitter4Excel
Das Excel Add-In ermöglicht aus Excel heraus über Ihr Benutzerkonto bei Twitter.com Nachrichten zu versenden. Gesendete Nachrichten werden in einer Microsoft Access Datenbank gespeichert. Die Software ist multilinguage und wird in der Grundkonfiguration in Deutsch, Englisch und Französisch ausgeliefert. Beachten Sie bitte, dass die Software primär für Microsoft Excel 2003 entwickelt und getestet wurde. Folgend ein Screenshot des Hauptfensters der Anwendung.

Links
» Unser Downloadbereich
» Maninweb.de bei Twitter
» API Dokumentation von Twitter, Englisch
» Erläuterungen zu REST bei Wikipedia, Deutsch
Blog
Neuigkeiten






