使用C#通过身份验证在Spotify上搜索音乐曲目

时间:2017-06-12 21:13:56

标签: c# authentication search asp.net-web-api spotify

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对象。

提前致谢。

2 个答案:

答案 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;
    }

非常感谢http://codegist.net

参考:http://codegist.net/code/spotify-c%23-example/