2017年5月29日起,所有电话都需要Spotify上的访问令牌。我开发了一个Web C#应用程序,可以成功获取音乐曲目信息。
Uri uri = new Uri(@"https://api.spotify.com/v1/search?q=" + txtartist.Text + "%20" + txttrack.Text + "&type=track");
WebRequest webRequest = WebRequest.Create(uri);
WebResponse response = webRequest.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream());
但是在最近的更改之后,它遇到错误401(未经授权的访问)。 如何在上述代码中添加代码,以便在获取信息之前完成身份验证?
我认为只能从一个URI创建一个webrequest对象,而需要两个URI(一个用于身份验证,另一个用于搜索),我需要一个集成代码。
P.S。:根据参考文献,一个解决方案是:
curl -X GET "https://api.spotify.com/v1/search?q=tania%20bowra&type=artist" -H "Authorization: Bearer {your access token}"
但我不知道如何使用GET之后的第一个文本(引用之间)和-H之后的第二个文本同时用于webrequest对象。
提前致谢。
答案 0 :(得分:0)
最后我可以解决问题。我不得不设置" *"对于该领域"查询"和#34;艺术家" for" ItemType"在端点中:
https://developer.spotify.com/web-api/console/get-search-item/
然后生成访问令牌并使用它。我以前的代码和建议的代码都能正常工作。事实上,我的访问令牌有问题。
答案 1 :(得分:0)
访问令牌在一小时后过期,应用程序无效。这种方法可以帮助我在需要时自动从Spotify收集访问令牌:
public string GetClientCredentialsAuthToken()
{
var webClient = new WebClient();
var postparams = new NameValueCollection();
postparams.Add("grant_type", "client_credentials");
var authHeader = Convert.ToBase64String(Encoding.Default.GetBytes("95da9f399a78...:5a7aaef94...")); //including clientID and Client Secret
webClient.Headers.Add(HttpRequestHeader.Authorization, "Basic " + authHeader);
var tokenResponse = webClient.UploadValues("https://accounts.spotify.com/api/token", postparams);
var TokenRes = Encoding.UTF8.GetString(tokenResponse);
int pFrom = TokenRes.IndexOf("access_token") + "access_token".Length;
int pTo = TokenRes.LastIndexOf("token_type");
string semiToken = TokenRes.Substring(pFrom, pTo - pFrom);
string myAccessToken = semiToken.Substring(3, semiToken.Length - 6);
return myAccessToken;
}