oauth2.0 雅虎梦幻体育API

d7v8vwbk  于 2024-01-06  发布在  其他
关注(0)|答案(1)|浏览(111)

有人还在使用雅虎梦幻体育API吗?我有一个应用程序,去年工作,没有改变我的代码在所有,现在它是返回一个500内部错误,当我试图运行它。
我过去常常通过YQL控制台测试,但现在已经没有了。
https://developer.yahoo.com/yql/
有人知道如何在上面的网站上进行身份验证请求吗?
我的感觉是,雅虎刚刚停止支持他们的幻想体育API,我将不得不寻找其他的解决方案,我认为。
想知道是否有人在那里使用这个API以前,是或不是仍然有成功与它。

9rnv2umw

9rnv2umw1#

我弄明白了如何使用C#核心和雅虎的API。非常感谢this guy
1.从雅虎获取你的API密钥等。
创建一个重定向到请求URL的控制器操作,如下所示:

  1. public IActionResult Test()
  2. {
  3. yo.yKey = {your Yahoo API key};
  4. yo.ySecret = {your Yahoo API secret};
  5. yo.returnUrl = {your return URL as set in the API setup, example "https://website.com/home/apisuccess"};
  6. var redirectUrl = "https://api.login.yahoo.com/oauth2/request_auth?client_id=" + yo.yKey + "&redirect_uri=" + yo.returnUrl + "&response_type=code&language=en-us";
  7. return Redirect(redirectUrl);
  8. }

字符串
这将把你发送到一个通过Yahoo认证的站点。在成功认证后,它将把你发送到一个名为code的字符串参数的重定向站点,在示例中它将是home/apissuccess,因此控制器操作应该如下所示:

  1. public async Task<IActionResult> ApiSuccess(string code)
  2. {
  3. List<string> msgs = new List<string>(); //This list just for testing
  4. /*Exchange authorization code for Access Token by sending Post Request*/
  5. Uri address = new Uri("https://api.login.yahoo.com/oauth2/get_token");
  6. HttpWebRequest request = WebRequest.Create(address) as HttpWebRequest;
  7. request.Method = "POST";
  8. request.ContentType = "application/x-www-form-urlencoded";
  9. byte[] headerByte = System.Text.Encoding.UTF8.GetBytes(_yKey + ":" + _ySecret);
  10. string headerString = System.Convert.ToBase64String(headerByte);
  11. request.Headers["Authorization"] = "Basic " + headerString;
  12. /*Create the data we want to send*/
  13. StringBuilder data = new StringBuilder();
  14. data.Append("client_id=" + _yKey);
  15. data.Append("&client_secret=" + _ySecret);
  16. data.Append("&redirect_uri=" + _returnUrl);
  17. data.Append("&code=" + code);
  18. data.Append("&grant_type=authorization_code");
  19. //Create a byte array of the data we want to send
  20. byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());
  21. // Set the content length in the request headers
  22. request.ContentLength = byteData.Length;
  23. // Write data
  24. using (Stream postStream = await request.GetRequestStreamAsync())
  25. {
  26. postStream.Write(byteData, 0, byteData.Length);
  27. }
  28. // Get response
  29. var vM = new yOauthResponse();
  30. string responseFromServer = "";
  31. try
  32. {
  33. using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
  34. {
  35. msgs.Add("Into response");
  36. // Get the response stream
  37. StreamReader reader = new StreamReader(response.GetResponseStream());
  38. responseFromServer = reader.ReadToEnd();
  39. msgs.Add(responseFromServer.ToString());
  40. vM = JsonConvert.DeserializeObject<yOauthResponse>(responseFromServer.ToString());
  41. }
  42. }
  43. catch (Exception ex)
  44. {
  45. msgs.Add("Error Occured");
  46. }
  47. ViewData["Message"] = msgs;
  48. return View(vM);
  49. }


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

  1. public class yOauthResponse
  2. {
  3. [JsonProperty(PropertyName = "access_token")]
  4. public string accessToken { get; set; }
  5. [JsonProperty(PropertyName = "xoauth_yahoo_guid")]
  6. public string xoauthYahooGuid { get; set; }
  7. [JsonProperty(PropertyName = "refresh_token")]
  8. public string refreshToken { get; set; }
  9. [JsonProperty(PropertyName = "token_type")]
  10. public string tokenType { get; set; }
  11. [JsonProperty(PropertyName = "expires_in")]
  12. public string expiresIn { get; set; }
  13. }


一旦你有了这些数据,你需要的主要是access_token,并在控制器操作中使用它:

  1. //simple code above removed
  2. var client = new HttpClient()
  3. {
  4. BaseAddress = new Uri({your request string to make API calls})
  5. };
  6. client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
  7. HttpResponseMessage response = await client.GetAsync(requestUri);
  8. if (response.IsSuccessStatusCode)
  9. {
  10. //do what you will with the response....
  11. }
  12. //rest of simple code


希望这对某个地方的人有帮助。编码快乐!

展开查看全部

相关问题