首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >雅虎幻想体育API

雅虎幻想体育API
EN

Stack Overflow用户
提问于 2018-07-20 18:24:28
回答 1查看 1.1K关注 0票数 2

还有人还在使用雅虎幻想体育API吗?我有一个应用程序去年工作,没有改变我的代码,现在它返回500个内部错误,当我试图运行它。

我过去经常通过YQL控制台测试一些东西,但现在不再可用了。

https://developer.yahoo.com/yql/

有人知道如何在上面的网站上进行认证请求吗?

我的感觉是,雅虎刚刚停止了对他们的FantasySports API的支持,我将不得不寻找其他解决方案,我认为。

想知道以前是否还有其他人使用过这个API,它现在还是没有成功。

EN

回答 1

Stack Overflow用户

发布于 2019-07-25 21:54:15

我想出了如何使用C#核心和雅虎的API。感谢这家伙

  1. 从yahoo获取api密钥等。

创建一个控制器操作,重定向到请求URL,如下所示:

代码语言:javascript
运行
复制
public IActionResult Test()
        {
            yo.yKey = {your Yahoo API key};
            yo.ySecret = {your Yahoo API secret};
            yo.returnUrl = {your return URL as set in the API setup, example "https://website.com/home/apisuccess"};

            var redirectUrl = "https://api.login.yahoo.com/oauth2/request_auth?client_id=" + yo.yKey + "&redirect_uri=" + yo.returnUrl + "&response_type=code&language=en-us";
            return Redirect(redirectUrl);
        }

这将把你送到一个与雅虎认证的网站。在成功的身份验证之后,它将使用名为code的字符串参数将您发送到重定向站点,在示例中它将是home/apisuccess,因此控制器操作应该如下所示:

代码语言:javascript
运行
复制
public async Task<IActionResult> ApiSuccess(string code)
        {        
            List<string> msgs = new List<string>();     //This list just for testing
            /*Exchange authorization code for Access Token by sending Post Request*/
            Uri address = new Uri("https://api.login.yahoo.com/oauth2/get_token");                

            HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            byte[] headerByte = System.Text.Encoding.UTF8.GetBytes(_yKey + ":" + _ySecret);
            string headerString = System.Convert.ToBase64String(headerByte);
            request.Headers["Authorization"] = "Basic " + headerString;

            /*Create the data we want to send*/
            StringBuilder data = new StringBuilder();
            data.Append("client_id=" + _yKey);
            data.Append("&client_secret=" + _ySecret);
            data.Append("&redirect_uri=" + _returnUrl);
            data.Append("&code=" + code);
            data.Append("&grant_type=authorization_code");

            //Create a byte array of the data we want to send
            byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());

            // Set the content length in the request headers  
            request.ContentLength = byteData.Length;

            // Write data  
            using (Stream postStream = await request.GetRequestStreamAsync())
            {
                postStream.Write(byteData, 0, byteData.Length);
            }
            // Get response
            var vM = new yOauthResponse();
            string responseFromServer = "";
            try
            {
                using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                {
                    msgs.Add("Into response");
                    // Get the response stream  
                    StreamReader reader = new StreamReader(response.GetResponseStream());
                    responseFromServer = reader.ReadToEnd();
                    msgs.Add(responseFromServer.ToString());
                    vM = JsonConvert.DeserializeObject<yOauthResponse>(responseFromServer.ToString());
                }
            }
            catch (Exception ex)
            {
                msgs.Add("Error Occured");
            }
            ViewData["Message"] = msgs;
            return View(vM);
        }

请注意,我使用了这个模型的json反序列化器,但是您可以对响应做任何您想做的事情来获取您需要的数据。这是我的json模型:

代码语言:javascript
运行
复制
public class yOauthResponse
    {
        [JsonProperty(PropertyName = "access_token")]
        public string accessToken { get; set; }

        [JsonProperty(PropertyName = "xoauth_yahoo_guid")]
        public string xoauthYahooGuid { get; set; }

        [JsonProperty(PropertyName = "refresh_token")]
        public string refreshToken { get; set; }

        [JsonProperty(PropertyName = "token_type")]
        public string tokenType { get; set; }

        [JsonProperty(PropertyName = "expires_in")]
        public string expiresIn { get; set; }
    }

一旦您获得了这些数据,您需要的主要内容是access_token,并在控制器操作中使用它如下所示:

代码语言:javascript
运行
复制
//simple code above removed
    var client = new HttpClient()
                {
                    BaseAddress = new Uri({your request string to make API calls})
                };
                client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);

                HttpResponseMessage response = await client.GetAsync(requestUri);
                if (response.IsSuccessStatusCode)
                {
                   //do what you will with the response....
                }
                //rest of simple code

希望这能帮到某个人。编码愉快!

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

https://stackoverflow.com/questions/51448396

复制
相关文章

相似问题

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