Vor einiger Zeit hatte ich hier ein kurzes Tutorial gepostet, in dem erklärt wurde, wie man via C# und OAuth auf die Twitter-API zugreift um beispielsweise status updates oder direct messages zu versanden. Leider hatte ich zu diesem Zeitpunkt keine Lösung für Umlaute und Sonderzeichen. Christian hatte mich freundlicherweise auf eine Blogpost von Andrew Arnott hingewiesen, der eine Lösung für dieses Problem gefunden hat (in dem Beitrag finden Sie auch eine genaue Erklärung der Problematik).
Auf dessen Grundlage habe ich nun mein Script aktualisiert (der Übersicht zu Liebe habe ich hier auf eine eigene Methode verzichtet):
// für WebClient WebClient myWebClient = new WebClient(); Byte[] req, Antwort; // oAuth OAuthBase oAuth = new OAuthBase(); // Except100 ausschalten, sonst gibt es u. U. Fehlermeldungen System.Net.ServicePointManager.Expect100Continue = false; // Für direct message werden die Parameter user (Empfänger) // und text (Nachricht) benötigt String TwitterReqParameters = "user=Simon_A_Frank"; // Die Umlaute und Sonderzeichen dieser Nachricht werden mit folgenden Zeilen // vorbereitet - vielen Dank an Andrew Arnott für die Idee und Erkärung, siehe: // http://blog.nerdbank.net/2009/05/uriescapedatapath-and.html string[] UriRfc3986CharsToEscape = new[] { "!", "*", "'", "(", ")" }; StringBuilder escaped = new StringBuilder(Uri.EscapeDataString(txtTweet.Text.ToString())); for (int i = 0; i < UriRfc3986CharsToEscape.Length; i++) { escaped.Replace(UriRfc3986CharsToEscape[i], Uri.HexEscape(UriRfc3986CharsToEscape[i][0])); } TwitterReqParameters += "&text=" + escaped.ToString(); // die OAuth ReqParameters – sind noch leer, werden unten generiert String OAuthReqParameters = ""; // Sonstige Einstellungen String RequestMethod = "POST"; //die Tokens und Keys String AccessToken = "???"; String AccessSecret = "???"; String ConsumerKey = "???"; String ConsumerSecret = "???"; // Zeit und Nonce lassen sich mit Hilfe von OAuthBase einfach generieren String Nonce = oAuth.GenerateNonce(); String Zeitstempel = oAuth.GenerateTimeStamp(); // Die URL muss mit Parametern (auch bei POST!) als String und // URI vorligen – etwas verwirrend, aber so will es OAuthBase String APIUrl = "https://twitter.com/direct_messages/new.xml" + "?" + TwitterReqParameters; Uri APIUri = new Uri(APIUrl); // Zum Test können Sie vorher und nacher die Parameters ausgeben: Console.WriteLine("OAuthReqParameters – noch leer: " + OAuthReqParameters); // Jetzt die Signature generieren // außerdem wird hier die APIUrl normalisiert // und OAuthReqParameters generiert String signature = oAuth.GenerateSignature(APIUri, ConsumerKey, ConsumerSecret, AccessToken, AccessSecret, RequestMethod, Zeitstempel, Nonce, out APIUrl, out 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(System.Text.Encoding.ASCII.GetString(Antwort)); } catch (Exception ex) { //Wenn es nicht klappt Fehler ausgeben MessageBox.Show(ex.Message); }
Weitere Tipps und Hinweise sowie eine ausführliche Anleitung finden Sie in meinem ursprünglichen Tutorial.
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
Achtung: Im Oktober 2012 hat sich die APIUrl geändert – Details siehe http://frank-it-beratung.com/blog/2012/10/11/twitter-api-ressource-urls-ohne-versionsnummer-seit-heute-ungultig/
Pingback: Twitter mit OAuth statt Basic Auth mit C# und .net – Ein kurzes Tutorial « Frank IT Consulting&Training