Oauth 2.0 雅虎幻想体育API

Oauth 2.0 雅虎幻想体育API,oauth-2.0,yahoo,yahoo-api,Oauth 2.0,Yahoo,Yahoo Api,有人还在使用Yahoo Fantasy Sports API吗?我去年有一个应用程序可以运行,根本没有更改我的代码,现在当我尝试运行它时,它返回500个内部错误 我曾经通过YQL控制台进行测试,但现在已经不可用了 有人知道如何在上面的网站上发出经过身份验证的请求吗 我的感觉是,雅虎刚刚停止了对其FantasySports API的支持,我想我将不得不寻找其他解决方案 我想知道是否有其他人以前使用过这个API,现在还是没有成功。我想出了如何使用C#core和Yahoo的API。非常感谢 从雅虎获

有人还在使用Yahoo Fantasy Sports API吗?我去年有一个应用程序可以运行,根本没有更改我的代码,现在当我尝试运行它时,它返回500个内部错误

我曾经通过YQL控制台进行测试,但现在已经不可用了

有人知道如何在上面的网站上发出经过身份验证的请求吗

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

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

我想出了如何使用C#core和Yahoo的API。非常感谢

  • 从雅虎获取api密钥等
  • 执行控制器操作,重定向到请求URL,如下所示:

    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);
            }
    
    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);
            }
    
    这将把你发送到一个网站,与雅虎认证。成功验证后,它将使用名为code的字符串参数将您发送到重定向站点,在示例中,它将是home/apisuccess,因此控制器操作应如下所示:

    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);
            }
    
    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);
            }
    
    一旦您拥有该数据,您需要的主要内容就是访问令牌,并在控制器操作中使用它,如下所示:

    //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
    
    希望这对某些人有所帮助。快乐编码