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://api.twitter.com/1/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

P.S.

Probleme? Fragen? Anregungen? Ich helfe jederzeit und gerne  – einfach einen Kommentar oder Mail schreiben, die Antwort kommt schnellstmöglich. Unternehmen, die Unterstützung, Beratung oder Schulung bei der API- oder Webprogrammierung, der Social-Media-Entwicklung oder dem Social-Media-Management benötigen finden zudem entsprechende Angebote meiner Firma auf der Website www.Frank-IT-Beratung.de

Dieser Beitrag wurde unter Programmierung, Twitter, Visual Basic abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

17 Kommentare zu Twitter API mit OAuth und Visual Basic

  1. FredRam sagt:

    Danke für das Tutorial.
    Leider habe ich ein Problem:
    Ich will per oAuth auf die Restfull API unter Woocommerce 3.0.6 zugreifen:
    http://woocommerce.github.io/woocommerce-rest-api-docs/#index
    Leider bekomme ich immer einen 500er Fehler 🙁

    Was ist da anders?

    Testzugang könnte ich zur Verfügung stellen.

    • Simon A. Frank sagt:

      Hallo FredRam, ich habe mir das kurz angesehen: müsste eigentlich gehen. Was genau der Fehler ist kann wohl leider nur der WooCommerce Support sagen. LG Simon A. Frank

  2. Johny sagt:

    Hallo, diese Seite ist ja schon etwas älter. Ist der Code noch aktuell?

  3. Simon A. Frank sagt:

    Hallo Stefan, vielen Dank für Dein Lob 🙂

    Ja, man kann natürlich auch die eigene Timeline auslesen, also sozusagen Tweets „empfangen“.

    Die Variable APIUrl muss dann in etwas so aussehen:

    http://api.twitter.com/1/statuses/home_timeline.xml

    Zudem muss bei „UploadData“ ein GET und kein POST ausgeführt werden, dann geht dies problemlos. Details sind hier zu finden:

    https://dev.twitter.com/docs/api/1/get/statuses/home_timeline

    Wenn Du eine Suche oder eine Twitterwall bauen möchtest – dazu habe ich hier mal etwas geschrieben, zwar mit PHP aber vielleicht trotzdem eine Hilfe:

    http://frank-it-beratung.com/blog/2011/08/09/suche-in-twitter-mit-php-bordmitteln-ein-kurzes-tutorial/

  4. Stefan sagt:

    Prima Tutorial!

    Weiß jemand wie ich Tweets mit VB empfangen kann?

  5. Simon A. Frank sagt:

    Ja – ich habe ein kleines Tool Namens „Access Token Manager“ geschrieben, das dies demostriert. Der Quellcode dazu ist frei verfügbar und wird in drei Blogbeiträgen beschrieben: http://frank-it-beratung.com/blog/category/access-token-manager/

  6. MrZer0 sagt:

    Schönes Tutorial. Aber gibt es auch eine Möglichkeit wenn man den Accesstoken über die API erzeugen lassen will?

    Wenn ich die APIurl „https://api.twitter.com/oauth/request_token“ verwende, um einen Token zu erhalten, bekomme ich immer einen „401 nicht autorisiert“ Fehler.

  7. Kennt jemand eine entsprechende Klasse für VB6? Will mir möglichst die Arbeit sparen und eine eigene Klasse schreiben 🙁

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

  9. 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

    • Sorry, bei der Beschreibung der Registrierung war ein Fehler, den ich ausgbessert habe: Es muss natürlich „Client“ heißen, sonst kann man gar nicht „Read&Write“ auswählen. Eine Callback URL braucht man nicht.

      Zu dem anderen Problem: Wenn in der XML-Response eine ID des Tweets steht vermute ich fast, das ist ein temporäres Problem bei Twitter ist. Ist das Tweet so aufrufbar?

      http://twitter.com/TwitterUsername/statuses/TweetID

  10. 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?

    • Jetzt habe ich die Darstellung des Codes etwas optimiert, so müsste es gehen.

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

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.