首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法查询雅虎!奇幻体育API

无法查询雅虎!奇幻体育API
EN

Stack Overflow用户
提问于 2015-09-28 04:10:49
回答 2查看 1.6K关注 0票数 3

我正在试图从雅虎的细节!使用OAuth2.0的幻想运动API。我使用YQL查询access_token。我的代码

代码语言:javascript
复制
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);
}

我的回应

代码语言:javascript
复制
{
    "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
    }
}

我正在获得授权所需的状态消息。

我认为它必须对我的请求头做些什么。有人能帮助我理解为什么我的请求在这里被拒绝吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-28 21:39:32

雅虎!有两个OAuth授权流

  1. 双足流
  2. 三足流

雅虎指出,

大多数幻想API数据依赖于3条腿的OAuth,因为大部分数据是特定于某个雅虎的!用户。但是,您可以使用2条腿的OAuth来请求纯粹的公共数据。2条腿的OAuth实际上可以归结为在不通过默认的OAuth库设置访问令牌的情况下发出请求,或者有效地使用使用者密钥/秘密作为令牌。

因此,我们应该选择OAuth授权的三条腿流程,正如雅虎所描述的那样!文档。在授权流的末尾,您将得到一个oauth_tokenoauth_token_secret

雅虎在C# (链接在这里)中提供了这个代码。

代码语言:javascript
复制
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));

编码愉快!

票数 3
EN

Stack Overflow用户

发布于 2015-09-28 04:25:26

我建议您没有正确地收到access_token。这就是在调用服务器时获得Authorization Required的原因。

您需要检查获取access_token的代码。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32815568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档