Twitter API mit OAuth und Visual Basic

Vor einiger Zeit hatte ich ein kleines Tutorial geschrieben, das beschreibt, wie man mit Visual Basic auf die Twitter API zugreift um z. B. Tweets oder direct messages zu posten. Da Mitte des Jahres die Authentifizierung für Twitter von Basic Auth auf OAuth umgestellt wurde ist jedoch das in dem Tutorial beschriebene Vorgehen nicht mehr möglich. Vor Kurzem habe ich bereits gepostet, wie man mit C# und OAuth die Twitter API nutzen kann (und jedem, der C# beherrscht sei auch diese Variante zu empfehlen). Wegen der vielen Anfagen aber heute nun noch die Variante mit Visual Basic (für alle, die keine C# Kenntnisse mitbringen).

Zuerst müssen Sie Ihre Anwendung bei Twitter registrieren. Dies ist identisch mit dem im C#-Tutorial beschriebenen Schritten 1-5, die Sie hier nachlesen können. Starten Sie dann Visual Basic (ich haben die Version Visual Basic 2008 Express Edition verwendet, mit allen anderen müsste dies ähnlich funktionieren)

6.  Für die OAuth Signatur habe ich die von Eran Sandler eigentlich für C# erstellte Klasse OAuthBase in Visual Basic übertragen (zu größten Teil automatisiert). Sie können diese Klasse hier downloaden. Binden Sie diese dann in Ihr Projekt ein. Btw: Ich habe die in Visual Basic übertragene Klasse nicht ausführlich getestet. Wie bereits oben beschrieben empfehle ich deshalb allen, die nicht unbedingt VB verwenden möchten, die C# Version vorzuziehen oder die C# Klassen in das VB-Projekt einzubinden.

7.  Legen Sie nun ein Textfeld (txtTweet) und eine Button (cmdSenden) an:

8. Der Code sieht dann folgendermaßen aus:

Dim req As [Byte](), Antwort As Byte()

'WebClient anlegen
Dim myWebClient As New WebClient()

'oAuth anlegen
Dim oAuth As New OAuthBase()

'Except100 ausschalten, sonst gibt es u. U. Fehlermeldungen
System.Net.ServicePointManager.Expect100Continue = False

'Für direct message werden die Parameter text (Nachricht)
'und user (Empfänger) benötigt
Dim TwitterReqParameters As String = "user=Simon_A_Frank"

' Diese Zeile lösen das Umlaute- und Sonderzeichen-Problem - Details siehe:
' http://wp.me/pAc37-5E
Dim UriRfc3986CharsToEscape As String() = {"!", "*", "'", "(", ")"}
Dim escaped As _
 New StringBuilder(Uri.EscapeDataString(txtTweet.Text.ToString()))

For i As Integer = 0 To UriRfc3986CharsToEscape.Length - 1
  escaped.Replace(UriRfc3986CharsToEscape(i), _
   Uri.HexEscape(UriRfc3986CharsToEscape(i)(0)))
Next

TwitterReqParameters += "&text=" & escaped.ToString()

'die OAuth ReqParameters - sind noch leer, werden unten generiert
Dim OAuthReqParameters As String = ""

'Sonstiges
Dim RequestMethod As String = "POST"

'die Tokens und Keys (vgl. Schritt 1-5)
Dim AccessToken As String = "?"
Dim AccessSecret As String = "?"
Dim ConsumerKey As String = "?"
Dim ConsumerSecret As String = "?"

'Zeit und Nonce lassen sich mit Hilfe von OAuthBase einfach generieren
Dim Nonce As String = oAuth.GenerateNonce()
Dim Zeitstempel As String = oAuth.GenerateTimeStamp()

'Die URL muss mit Parametern (auch bei POST!) als String und
'URI vorligene - etwas verwirrend, aber so will es OAuthBAse
Dim APIUrl As String = "https://twitter.com/direct_messages/new.xml" _
  & "?" & TwitterReqParameters
Dim APIUri As New Uri(APIUrl)

'Zum Test können Sie vorher und nacher die Parameters ausgeben:
Console.WriteLine("OAParameters - noch leer: " & OAuthReqParameters)

'Jetzt die Signature generieren
'außerdem wird hier die APIUrl normalisiert
'und OAuthReqParameters generiert
Dim signature As String = oAuth.GenerateSignature(APIUri, ConsumerKey, _
 ConsumerSecret, AccessToken, AccessSecret, RequestMethod, _
 Zeitstempel, Nonce, APIUrl, OAuthReqParameters)

Console.WriteLine("OAuthReqParameters - mit oauth_ Parameters: " _
 & OAuthReqParameters)

'die Signatur fehlt noch im vorbereiteten Request
OAuthReqParameters = OAuthReqParameters & "&" _
 & "oauth_signature=" & signature
Console.WriteLine("OAuthReqParameters - mit Signatur: " _
 & OAuthReqParameters)

' Jetzt in byte umwandeln:
req = Encoding.UTF8.GetBytes(OAuthReqParameters)

' Senden ...
Try
  Antwort = myWebClient.UploadData(APIUrl, "POST", req)
  'Die Antwort von Twitter ausgeben (XML-Daten):
  MessageBox.Show("Erfolg: " & _
   System.Text.Encoding.ASCII.GetString(Antwort))
Catch ex As Exception
  'Wenn es nicht klappt Fehler ausgeben
  MessageBox.Show("Geht nicht: " & ex.Message)
End Try
Dieser Beitrag wurde unter Programmierung, Twitter, Visual Basic abgelegt und mit , , , verschlagwortet. Setzen Sie ein Lesezeichen auf den Permalink.

9 Antworten auf Twitter API mit OAuth und Visual Basic

  1. Pingback: Tweets mit VB.NET senden (Visual Basic 2008) « Frank IT Consulting&Training

  2. Andre sagt:

    Leider wirft der nen Fehler aus:
    Fehler bei der Überladungsauflösung, da keine zugreifbare ‘GenerateSignature’ diese Anzahl von Argumenten akzeptiert

    Kann mir da jemand nen Tip geben?

    Gruß
    André

    • Leider wird der Code hier unglücklich dargestellt, das muss ich mal optimieren. Der Bereich “Dim signature As String = oAuth.GenerateSignature(APIUri, ConsumerKey, ConsumerSecret, AccessToken, AccessSecret, RequestMethod, _
      Zeitstempel, Nonce, APIUrl, OAuthReqParameters)” sollte in einer Zeile (oder man fügt nach “ConsumerKey,” ein “_” ein). Ich hoffe, so geht’s?

  3. Info_Wirsing sagt:

    Ich habe folgendes Problem:
    Das Programm funktioniert an sich und es teilt mir auch mit, dass der Tweet erfolgreich gesendet wurde, aber in Twitter erscheint kein neuer Tweet.

    Im übrigen steht, dass man bei der Registrierung der Applikation den Typ “Browser” auswählen soll. Sofern man dies tut muss man aber eine Callback URL angeben!

    Würde mich über eine Antwort freuen

  4. Pingback: Tutorial: Die FriendFeed API mit C# (oder Visual Basic) « Frank IT Consulting&Training

  5. Kennt jemand eine entsprechende Klasse für VB6? Will mir möglichst die Arbeit sparen und eine eigene Klasse schreiben :-(

Einen Kommentar hinterlassen

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>