我正在试图从雅虎的细节!使用OAuth2.0的幻想运动API。我使用YQL查询access_token。我的代码
using (var client = new System.Net.WebClient())
{
client.Headers.Add("Authorization", "Bearer " + response.access_token);
var query = "select%20*%20from%20fantasysports.games%20where%20game_key%3D'nfl'";
Response.Write(query);
var url = String.Format("https://query.yahooapis.com/v1/yql?q={0}&format=json&diagnostics=true&callback=", query);
output = client.DownloadString(url);
}我的回应
{
"query": {
"count": 0,
"created": "2015-09-27T17:39:48Z",
"lang": "en-US",
"diagnostics": {
"publiclyCallable": "true",
"url": {
"execution-start-time": "4",
"execution-stop-time": "137",
"execution-time": "133",
"http-status-code": "401",
"http-status-message": "Authorization Required",
"content": "http://fantasysports.yahooapis.com/fantasy/v2/games;game_keys=nfl"
},
"user-time": "138",
"service-time": "133",
"build-version": "0.2.240"
},
"results": null
}
}我正在获得授权所需的状态消息。
我认为它必须对我的请求头做些什么。有人能帮助我理解为什么我的请求在这里被拒绝吗?
发布于 2015-09-28 21:39:32
雅虎!有两个OAuth授权流
雅虎指出,
大多数幻想API数据依赖于3条腿的OAuth,因为大部分数据是特定于某个雅虎的!用户。但是,您可以使用2条腿的OAuth来请求纯粹的公共数据。2条腿的OAuth实际上可以归结为在不通过默认的OAuth库设置访问令牌的情况下发出请求,或者有效地使用使用者密钥/秘密作为令牌。
因此,我们应该选择OAuth授权的三条腿流程,正如雅虎所描述的那样!文档。在授权流的末尾,您将得到一个oauth_token和oauth_token_secret。
雅虎在C# (链接在这里)中提供了这个代码。
public static string GetUserDataFromYahoo(string requestEndPoint, string token, string tokenSecret)
{
var data = String.Empty;
var uri = new Uri(requestEndPoint);
string url, param;
var oAuth = new OAuthBase();
var nonce = oAuth.GenerateNonce();
var timeStamp = oAuth.GenerateTimeStamp();
var signature = oAuth.GenerateSignature(
uri,
consumerKey,
consumerSecret,
token,
tokenSecret,
"GET",
timeStamp,
nonce,
OAuthBase.SignatureTypes.HMACSHA1,
out url,
out param);
data = String.Format("{0}?{1}&oauth_signature={2}", url, param, signature);
var requestParametersUrl = String.Format("{0}?{1}&oauth_signature={2}", url, param, signature);
var request = WebRequest.Create(requestParametersUrl);
using (var response = request.GetResponse())
using (Stream dataStream = response.GetResponseStream())
using (StreamReader reader = new StreamReader(dataStream))
{
data = reader.ReadToEnd();
}
return data;
}此代码使用此OAuthBase.cs类。
当您使用此代码时,您将得到一个
OST_OAUTH_SIGNATURE_INVALID_ERROR
这是因为,OAuthBase.cs有一个这里已经注意到了。来纠正你必须这样做。
第199行(在NormalizeRequestParameters方法中)必须更改如下: sb.AppendFormat("{0}={1}",p.Name,p.Value); 至 sb.AppendFormat("{0}={1}",UrlEncode(p.Name),UrlEncode(p.Value));
编码愉快!
发布于 2015-09-28 04:25:26
我建议您没有正确地收到access_token。这就是在调用服务器时获得Authorization Required的原因。
您需要检查获取access_token的代码。
https://stackoverflow.com/questions/32815568
复制相似问题