【问题标题】:Search a music track on Spotify with authentication using C#使用 C# 通过身份验证在 Spotify 上搜索音乐曲目
【发布时间】:2017-06-12 21:13:56
【问题描述】:

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

提前致谢。

【问题讨论】:

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


【解决方案1】:

终于可以解决问题了。我必须在端点中为“查询”字段设置“*”,为“ItemType”设置“艺术家”:

https://developer.spotify.com/web-api/console/get-search-item/

然后生成访问令牌并使用它。我以前的代码和您建议的代码都可以正常工作。事实上,我的 Access Token 有问题。

【讨论】:

    【解决方案2】:

    访问令牌在一小时后过期,应用程序无法运行。这种方法可以帮助我在需要时自动从 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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-12
      • 1970-01-01
      • 2015-06-22
      • 1970-01-01
      • 2021-07-01
      • 2022-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多