2012-12-11 112 views
2

我目前使用OAuthBase.cs助手類可用oauth.net實現OAuth與雅虎通話!幻想API。我目前停留在第5步(使用訪問令牌/訪問密鑰來調用API服務)。雅虎Oauth API與OAuthBase.cs

我成功完成Step 4但似乎無法創建實際的服務呼叫。 The documentation是有限的;我應該使用什麼參數?我得到401或400 http錯誤。

url = new Uri("http://query.yahooapis.com/v1/public/yql?q=select * from fantasysports.teams.roster.stats where team_key='nba.l.52669.t.5' and week='5' and stats_type='week' and stats_week='5'&format=json"); 

signature = oauth.GenerateSignature(url, string.Empty, consumerKey, consumerSecret, accessToken, accessTokenSecret, "GET", time, string.Empty, nonce, OAuth.OAuthBase.SignatureTypes.HMACSHA1, out normalizedUrl, out normalizedRequestParameters); 

using (var y = WebRequest.Create(string.Format("{0}?{1}&oauth_signature={2}", normalizedUrl, normalizedRequestParameters, signature)).GetResponse()) 
{ 
    .... 
} 

其中url是API調用我試圖讓,consumerKey/consumerSecret是給我,當我簽署了雅虎的鑰匙!和accessToken/accessTokenSecret是:我通過生成我的簽名在步驟4中從request_auth返回響應。我做錯了什麼?

在此先感謝

編輯:12/14 - 對於那些不熟悉OAuthBase,它本質上是生成由 1.整合所有的URL /參數(consumerkey,令牌,tokenSecret簽名庫, httpMethod,nonce,時間等),對它進行排序,並規範URL /參數; 2.將consumerSecret'&'tokenSecret編碼爲HMACSHA1密鑰; 3.計算HMACSHA1鍵

回答

5

這裏的散列是用於訪問使用OAuth雅虎API(在這種情況下,BOSS地理位置API)一些工作代碼

[Test] 
    public void MakeCallToBossGeoApi() 
    { 
     string result; 
     var uri = new Uri(@"http://yboss.yahooapis.com/geo/placefinder?country=SE&flags=J&locale=sv_SE&postal=41311"); 
     var o = new OAuthBase(); 
     string nonce = o.GenerateNonce(); 
     var timestamp = o.GenerateTimeStamp(); 

     string normalizedUrl; 
     string normalizedParameters; 
     string signature = HttpUtility.UrlEncode(
      o.GenerateSignature(uri, 
           "yourconsumerkeyhere", 
           "yourconsumersecrethere", null, null, "GET", 
           timestamp, nonce, out normalizedUrl, 
           out normalizedParameters)); 

     uri = new Uri(normalizedUrl +"?"+ normalizedParameters + "&oauth_signature=" + signature); 

     using (var httpClient = new WebClient()) 
     { 
      result = httpClient.DownloadString(uri.AbsoluteUri); 
     } 

     Console.WriteLine(result); 
    }