2014-09-05 113 views
0

如何查看twitter上提及的提及,Twitter的帖子提及我們在他們的帖子中使用c#並與twitter API集成。已經可以使用API​​查看我的所有自我職位了。然後用相同的方式顯示對我的提及。但這個錯誤:推特API與c#

The remote server returned an error: (401) Unauthorized. 

這是我的代碼是它是視圖所有的工作我們自己的崗位:

protected void getMentionV3(string resource_url, string q) 
    { 
     resource_url = "https://api.twitter.com/1.1/statuses/mentions_timeline.json?" 
     q = twitterUserName 

     var oauth_token = _accessToken; 
     var oauth_token_secret = _accessTokenSecret; 
     var oauth_consumer_key = _consumerKey; 
     var oauth_consumer_secret = _consumerSecret; 

     var oauth_version = "1.0"; 
     var oauth_signature_method = "HMAC-SHA1"; 

     var oauth_nonce = Convert.ToBase64String(new ASCIIEncoding().GetBytes(DateTime.Now.Ticks.ToString())); 
     var timeSpan = DateTime.UtcNow 
      - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); 
     var oauth_timestamp = Convert.ToInt64(timeSpan.TotalSeconds).ToString(); 

     var baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" + 
         "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&q={6}"; 

     var baseString = string.Format(baseFormat, 
            oauth_consumer_key, 
            oauth_nonce, 
            oauth_signature_method, 
            oauth_timestamp, 
            oauth_token, 
            oauth_version, 
            Uri.EscapeDataString(q) 
            ); 

     baseString = string.Concat("GET&", Uri.EscapeDataString(resource_url), "&", Uri.EscapeDataString(baseString)); 

     var compositeKey = string.Concat(Uri.EscapeDataString(oauth_consumer_secret), 
           "&", Uri.EscapeDataString(oauth_token_secret)); 

     string oauth_signature; 
     using (HMACSHA1 hasher = new HMACSHA1(ASCIIEncoding.ASCII.GetBytes(compositeKey))) 
     { 
      oauth_signature = Convert.ToBase64String(
       hasher.ComputeHash(ASCIIEncoding.ASCII.GetBytes(baseString))); 
     } 

     // create the request header 
     var headerFormat = "OAuth oauth_nonce=\"{0}\", oauth_signature_method=\"{1}\", " + 
          "oauth_timestamp=\"{2}\", oauth_consumer_key=\"{3}\", " + 
          "oauth_token=\"{4}\", oauth_signature=\"{5}\", " + 
          "oauth_version=\"{6}\""; 

     var authHeader = string.Format(headerFormat, 
           Uri.EscapeDataString(oauth_nonce), 
           Uri.EscapeDataString(oauth_signature_method), 
           Uri.EscapeDataString(oauth_timestamp), 
           Uri.EscapeDataString(oauth_consumer_key), 
           Uri.EscapeDataString(oauth_token), 
           Uri.EscapeDataString(oauth_signature), 
           Uri.EscapeDataString(oauth_version) 
         ); 



     ServicePointManager.Expect100Continue = false; 

     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resource_url); 
     request.Headers.Add("Authorization", authHeader); 
     request.Method = "GET"; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     var response = (HttpWebResponse)request.GetResponse(); 
     var reader = new StreamReader(response.GetResponseStream()); 
     var objText = reader.ReadToEnd(); 
     string html = ""; 
     try 
     { 
      JArray jsonDat = JArray.Parse(objText); 
      for (int x = 0; x < jsonDat.Count(); x++) 
      { 

       html += jsonDat[x]["id"].ToString() + "<br/>"; 
       html += jsonDat[x]["text"].ToString() + "<br/>"; 
       html += jsonDat[x]["created_at"].ToString() + "<br/><hr/>"; 


      } 
      mydiv.InnerHtml = html; 
     } 
     catch (Exception twit_error) 
     { 
      mydiv.InnerHtml = html + twit_error.ToString(); 
     } 
    } 

回答

0

它看起來像你不是引用正確的URL 。

你有

https://api.twitter.com/1.1/statuses/mentions_timeline.json? 

...和Twitter API Docs說,你應該使用...

https://api.twitter.com/1.1/statuses/mentions.json? 
+0

感謝您的respons.i已經試用過的網址,但仍然有同樣的問題 – 2014-09-09 04:15:58

+0

你確定鑰匙仍然有效嗎?您可以使用相同的密鑰檢索用戶時間表?如果是這樣的話,那麼我會將這種方法與這一行逐行比較,以查看這段代碼是否在OAUth部分中包含錯誤。 – DWRoelands 2014-09-09 13:02:18