Twitter mit OAuth und C# – So geht’s auch mit Umlauten und Sonderzeichen

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

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

2 Kommentare zu Twitter mit OAuth und C# – So geht’s auch mit Umlauten und Sonderzeichen

  1. Pingback: Twitter mit OAuth statt Basic Auth mit C# und .net – Ein kurzes Tutorial « Frank IT Consulting&Training

Kommentar verfassen