2013-07-08 45 views
0

我想從twitter api v1.1與ASP.NET的用戶時間軸,它工作正常,除非我添加計數參數。我的代碼在下面;Twitter的api V1.1 - 獲取「(401)未經授權」當試圖獲得user_timeline

string oauth_token = "xxx"; 
    string oauth_token_secret = "xxx"; 
    string oauth_consumer_key = "xxx"; 
    string oauth_consumer_secret = "xxx"; 

    public string GetUserTimeline(string userName, int tweetCount) 
    { 
     // oauth implementation details 
     var oauth_version = "1.0"; 
     var oauth_signature_method = "HMAC-SHA1"; 

     // unique request details 
     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(); 

     // message api details 
     var status = "Updating status via REST API if this works"; 
     var resource_url = "https://api.twitter.com/1.1/statuses/user_timeline.json"; 
     // create oauth signature 
     var baseFormat = "oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" + 
         "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&screen_name={6}"; 

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

     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) 
         ); 


     // make the request 

     ServicePointManager.Expect100Continue = false; 

     var postBody = "screen_name=" + Uri.EscapeDataString(userName);// 
     resource_url += "?" + postBody; 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(resource_url); 
     request.Headers.Add("Authorization", authHeader); 
     request.Method = "GET"; 
     request.ContentType = "application/x-www-form-urlencoded"; 


     WebResponse response = request.GetResponse(); 
     string responseData = new StreamReader(response.GetResponseStream()).ReadToEnd(); 

     return responseData.ToString(); 
    } 

問題是,當我加計參數限制的鳴叫,我得到「(401)未經授權」的錯誤數目。以下是帶參數的版本;

var baseFormat = "count=25&oauth_consumer_key={0}&oauth_nonce={1}&oauth_signature_method={2}" + 
         "&oauth_timestamp={3}&oauth_token={4}&oauth_version={5}&screen_name={6}"; 
var postBody = "count=25&screen_name=" + Uri.EscapeDataString(userName); 

我在做什麼錯?

+0

你見過這個嗎?它有一個鏈接到我創建的GitHub項目,它已經在c#asp.net和MVC中實現了,可能對你有用。 http://stackoverflow.com/questions/17067996/authenticate-and-request-a-users-timeline-with-twitter-api-1-1-oauth/17071447#17071447 – hutchonoid

回答

0

也許這是發佈的問題的拼寫錯誤,但在count = 25之後需要&。而不是count = 25oauth_consumer_key,您應該有count = 25 & oauth_consumer_key。

+0

對不起,這是我的不好,但不幸的是,這不是問題。 – volkankasar

相關問題