2016-04-20 7 views
0

Der folgende Code, den ich in C# geschrieben habe. Kann mir bitte jemand helfen?Ich möchte E-Mail-Adresse von twitter API mit C# bekommen. Ich habe es versucht, aber es wirft einige Ausnahmen

public string Verify_Credentials(string oauthconsumerkey, string oauthconsumersecret, string oauthtoken, string oauthtokensecret) 
{ 
     string oauthsignaturemethod = "HMAC-SHA1"; 
     string oauthversion = "1.0"; 
     string oauthnonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString())); 
     TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); 
     string oauthtimestamp = Convert.ToInt64(ts.TotalSeconds).ToString(); 
     SortedDictionary<string, string> basestringParameters = new SortedDictionary<string, string>(); 
     basestringParameters.Add("oauth_version", "1.0"); 
     basestringParameters.Add("oauth_consumer_key", oauthconsumerkey); 
     basestringParameters.Add("oauth_nonce", oauthnonce); 
     basestringParameters.Add("oauth_signature_method", "HMAC-SHA1"); 
     basestringParameters.Add("oauth_timestamp", oauthtimestamp); 
     basestringParameters.Add("oauth_token", oauthtoken); 
     //GS - Build the signature string 
     StringBuilder baseString = new StringBuilder(); 
     baseString.Append("GET" + "&"); 
     baseString.Append(EncodeCharacters(Uri.EscapeDataString("https://api.twitter.com/1.1/account/verify_credentials.json") + "&")); 
     foreach (KeyValuePair<string, string> entry in basestringParameters) 
     { 
      baseString.Append(EncodeCharacters(Uri.EscapeDataString(entry.Key + "=" + entry.Value + "&"))); 
     } 

     //Since the baseString is urlEncoded we have to remove the last 3 chars - %26 
     string finalBaseString = baseString.ToString().Substring(0, baseString.Length - 3); 

     //Build the signing key 
     string signingKey = EncodeCharacters(Uri.EscapeDataString(oauthconsumersecret)) + "&" + 
     EncodeCharacters(Uri.EscapeDataString(oauthtokensecret)); 

     //Sign the request 
     HMACSHA1 hasher = new HMACSHA1(new ASCIIEncoding().GetBytes(signingKey)); 
     string oauthsignature = Convert.ToBase64String(hasher.ComputeHash(new ASCIIEncoding().GetBytes(finalBaseString))); 
     string responseFromServer = string.Empty; 
     //Tell Twitter we don't do the 100 continue thing 
     ServicePointManager.Expect100Continue = false; 

     //authorization header 
     HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(
      @"https://api.twitter.com/1.1/account/verify_credentials.json?include_email=true"); 
     StringBuilder authorizationHeaderParams = new StringBuilder(); 
     authorizationHeaderParams.Append("OAuth "); 
     authorizationHeaderParams.Append("include_email=" + "\"" + "true" + "\","); 
     authorizationHeaderParams.Append("oauth_nonce=" + "\"" + Uri.EscapeDataString(oauthnonce) + "\","); 
     authorizationHeaderParams.Append("oauth_signature_method=" + "\"" + Uri.EscapeDataString(oauthsignaturemethod) + "\","); 
     authorizationHeaderParams.Append("oauth_timestamp=" + "\"" + Uri.EscapeDataString(oauthtimestamp) + "\","); 
     authorizationHeaderParams.Append("oauth_consumer_key=" + "\"" + Uri.EscapeDataString(oauthconsumerkey) + "\","); 
     if (!string.IsNullOrEmpty(oauthtoken)) 
      authorizationHeaderParams.Append("oauth_token=" + "\"" + Uri.EscapeDataString(oauthtoken) + "\","); 
     authorizationHeaderParams.Append("oauth_signature=" + "\"" + Uri.EscapeDataString(oauthsignature) + "\","); 
     authorizationHeaderParams.Append("oauth_version=" + "\"" + Uri.EscapeDataString(oauthversion) + "\""); 
     hwr.Headers.Add("Authorization", authorizationHeaderParams.ToString()); 
     hwr.Method = "GET"; 
     hwr.ContentType = "application/x-www-form-urlencoded"; 

     //Allow us a reasonable timeout in case Twitter's busy 
     hwr.Timeout = 3 * 60 * 1000; 
     try 
     { 
      // hwr.Proxy = new WebProxy("enter proxy details/address"); 
      HttpWebResponse rsp = hwr.GetResponse() as HttpWebResponse; 
      Stream dataStream = rsp.GetResponseStream(); 
      //Open the stream using a StreamReader for easy access. 
      StreamReader reader = new StreamReader(dataStream); 
      //Read the content. 
      responseFromServer = reader.ReadToEnd(); 
     } 
     catch (Exception ex) 
     { 

     } 
     return responseFromServer; 
} 

private string EncodeCharacters(string data) 
    { 
     //as per OAuth Core 1.0 Characters in the unreserved character set MUST NOT be encoded 
     //unreserved = ALPHA, DIGIT, '-', '.', '_', '~' 
     if (data.Contains("!")) 
      data = data.Replace("!", "%21"); 
     if (data.Contains("'")) 
      data = data.Replace("'", "%27"); 
     if (data.Contains("(")) 
      data = data.Replace("(", "%28"); 
     if (data.Contains(")")) 
      data = data.Replace(")", "%29"); 
     if (data.Contains("*")) 
      data = data.Replace("*", "%2A"); 
     if (data.Contains(",")) 
      data = data.Replace(",", "%2C"); 

     return data; 
    }  
+0

Welche Ausnahme bekommen Sie? –

+0

Es zeigt mich nicht autorisiert. – Koderzzzz

+1

könnten Sie Ihre 'EncodeCharacters' Methode teilen. – Linvi

Antwort

1

Ihre App muss durch Twitter, um die weiße Liste gesetzt werden, um zu erhalten E-Mail von: So

https://api.twitter.com/1.1/account/verify_credentials.json 

wenn Sie ?include_email=true Teil der URL-Anfrage entfernen erhalten Sie eine Antwort mit einigen Feldern bekommen und dann können Sie Holen Sie sich die screen_name des Benutzers zum Beispiel.

Sie fragen können die weiße Liste gesetzt werden, um das untenstehende Formular verwenden (Check> „Ich brauche Zugriff auf spezielle Berechtigungen“):

https://support.twitter.com/forms/platform

In meinem Fall gewährt sie mir den Zugang nach einigen wenigen Stunden ...

Weitere Informationen: https://dev.twitter.com/rest/reference/get/account/verify_credentials

+1

Ich bestätige, dass dies korrekt ist. – Linvi

Verwandte Themen