通过 Spotify Web API 和 JavaScript 播放歌曲时出现问题

2023-12-27

我正在致力于构建一个与 Spotify 交互的基于 Web 的应用程序。我从 C# 开始,访问 API、拉出我的播放列表并从中拉出曲目都没有问题,但似乎您无法使用位于此处的 Spotify Web API 来播放歌曲:

https://developer.spotify.com/documentation/web-api/ https://developer.spotify.com/documentation/web-api/

然后我开始查看位于此处的 Web Playback API:

https://developer.spotify.com/documentation/web-playback-sdk/ https://developer.spotify.com/documentation/web-playback-sdk/

我打算用 c# 编写大部分内容,因为我的 c# 比我的 javascript 强大得多。 C# 部分正在工作。我可以获得授权令牌,提取我的播放列表和曲目。我打算将此信息传递给 javascript。

我从 Spotify 开发者页面提取了以下 JavaScript。我只是有点理解它,所以我不知道为什么它不起作用。非常感谢您提供的任何帮助。

<script src="https://sdk.scdn.co/spotify-player.js"></script>

<script>

window.onSpotifyWebPlaybackSDKReady = () => {
  // You can now initialize Spotify.Player and use the SDK
};

const play = ({
  spotify_uri,
  playerInstance: {
    _options: {
      getOAuthToken,
      id
    }
  }
}) => {
  getOAuthToken(access_token => {
    fetch('https://api.spotify.com/v1/me/player/play', {
      method: 'PUT',
      body: JSON.stringify({ uris: [spotify_uri] }),
      headers: {
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ${myaccesstoken}'
      },
    });
  });
};

play({
  playerInstance: new Spotify.Player({ name: "..." }),
  spotify_uri: 'spotify:track:7xGfFoTpQ2E7fRF5lN10tr',
});

</script>

tl;dr:工作片段在这个答案的底部!


你做这个

play({
  playerInstance: new Spotify.Player({ name: "..." }),
  spotify_uri: 'spotify:track:7xGfFoTpQ2E7fRF5lN10tr',
});

以下之外。

window.onSpotifyWebPlaybackSDKReady = () => {
  // You can now initialize Spotify.Player and use the SDK
};

意思是play立即被调用,无需等待 Spotify Web Playback SDK 加载。正如评论所说Spotify.Player可以尽快使用onSpotifyWebPlaybackSDKReady被称为。


另一个问题是您实际上从未创建过 Spotify Connect 设备。这是使用 Spotify Web API 控制该设备所必需的。这可以通过调用来实现connect on the Spotify.Player实例。为了知道什么时候connect完成后,播放器已准备好播放歌曲,您需要首先定义侦听器,如下所示。

player.addListener('ready', ({ device_id }) => {
  console.log('Ready with Device ID', device_id);
});

因此,您实际上需要两个不同的 Spotify API 才能实现您的目标。首先,您需要 Spotify Web Playback SDK 才能创建 Spotify Connect 设备(Spotify 文档将其称为播放器)。之后,您可以使用 Spotify 的 Web API 控制这个确切的 Spotify Connect 设备。


以下片段将播放该歌曲。

警告:这将在您的浏览器中播放音乐,无需任何控制元素!

此代码片段需要一个可以获取的访问令牌here https://developer.spotify.com/documentation/web-playback-sdk/quick-start/点击绿色按钮说Get Your Web Playback SDK Access Token。然后需要将令牌复制粘贴到代码片段的第 11 行中,替换<YOUR_ACCESS_TOKEN_HERE>.

索引.html

<!-- Load the Spotify Web Playback SDK -->
<script src="https://sdk.scdn.co/spotify-player.js"></script>

<script>
  // Called when the Spotify Web Playback SDK is ready to use
  window.onSpotifyWebPlaybackSDKReady = () => {

    // Define the Spotify Connect device, getOAuthToken has an actual token 
    // hardcoded for the sake of simplicity
    var player = new Spotify.Player({
      name: 'A Spotify Web SDK Player',
      getOAuthToken: callback => {
        callback('<YOUR_ACCESS_TOKEN_HERE>');
      },
      volume: 0.1
    });

    // Called when connected to the player created beforehand successfully
    player.addListener('ready', ({ device_id }) => {
      console.log('Ready with Device ID', device_id);

      const play = ({
        spotify_uri,
        playerInstance: {
          _options: {
            getOAuthToken,
            id
          }
        }
      }) => {
        getOAuthToken(access_token => {
          fetch(`https://api.spotify.com/v1/me/player/play?device_id=${id}`, {
            method: 'PUT',
            body: JSON.stringify({ uris: [spotify_uri] }),
            headers: {
              'Content-Type': 'application/json',
              'Authorization': `Bearer ${access_token}`
            },
          });
        });
      };

      play({
        playerInstance: player,
        spotify_uri: 'spotify:track:7xGfFoTpQ2E7fRF5lN10tr',
      });
    });

    // Connect to the player created beforehand, this is equivalent to 
    // creating a new device which will be visible for Spotify Connect
    player.connect();
  };
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Spotify Web API 和 JavaScript 播放歌曲时出现问题 的相关文章

  • 如何检测被覆盖的 CSS 属性?

    I can get all css properties for an element with document stylesheets but some of those are not active because those pro
  • 提升变量有目的吗?

    我最近学习了很多 JavaScript 并且一直在尝试理解提升变量的值 如果有的话 我 现在 明白JS是一个两遍系统 它编译然后执行 另外 我知道 var 关键字 存在 在它声明的词法范围中 因此如果在引擎为其赋值之前调用它 那么它是 未定
  • appendChild 错误:无法在层次结构中的指定点插入节点

    There is an error with the function appendChild Node cannot be inserted at the specified point in the hierarchy JS var a
  • Visual Studio 改变 Ctrl-K-D 的工作方式

    In Visual Studio I m using 2012 is there any way of editing the way that Ctrl K D combinations handles its Auto Formatti
  • 如何在 jQuery 中将标题转换为 URL slug?

    我正在 CodeIgniter 中开发一个应用程序 我试图在表单上创建一个字段来动态生成URL slug 我想做的是删除标点符号 将其转换为小写 然后用连字符替换空格 例如 Shane s Rib Shack 将变成 shanes rib
  • 仅在 Chrome 上我收到此错误:Uncaught TypeError: Illegal constructor [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 当我在 Chrome 上加载 jQuery 时 我会收到此错误 Uncaught TypeError Illegal constr
  • Pjax动画

    我终于让 pjax 工作了 但我还有另一个问题 如何添加一些 jquery 动画 如淡出 幻灯片旧内容和淡入 幻灯片新内容 默认情况下 pjax 只是更改内容 没有任何好看的效果 任何帮助将非常感激 此致 基本上 你有一堆事件 https
  • 如何设置必须输入特定数字的字段?

    我想知道如何创建一个需要输入特定数字或文本的字段 例如 激活码 以及在输入的确认答案的情况下移动到 网页 并且在未确认的情况下移动到 另一页面 的按钮 使用必需的属性
  • Node.js Express 4.0 中的 res.render 回调参数的用途是什么?

    目的是什么res render回调参数 在什么情况下 由于模板已被指定为第一个参数 因此人们会想要使用这样的回调参数 这是文档中的代码 send the rendered view to the client res render inde
  • 为什么函数声明在不同浏览器中的处理方式不同?

    虽然我在谷歌中找不到对此的引用 但我熟悉这样一个事实 在 javascript 中 全局函数声明在执行任何代码之前都会被解释 换句话说 这工作得很好 f function f 但是 我注意到 chrome 和 firefox 对全局函数声明
  • Javascript:我应该隐藏我的实现吗?

    作为一名 C 程序员 我有一个习惯 将可以而且应该私有的东西设为私有 当 JS 类型向我公开其所有私有部分时 我总是有一种奇怪的感觉 而且这种感觉并没有被 唤起 假设我有一个类型draw方法 内部调用drawBackground and d
  • 修改 Twitter 帖子上可编辑 Div 的内容

    我正在编写一个 chrome 扩展 它可以帮助用户在 Twitter 上输入内容 当在 twitter 上写推文时 twitter 会打开一个可编辑的 div 容器 当用户输入内容时 twitter 大概正在使用某些网络框架 会生成子 di
  • 冒泡可用于图像加载事件吗?

    我可以用吗 window addEventListner 某种程度上来说 我所有的图像都有一个display none 图像加载后 我想设置display inline 这样我就可以规范下载图像时显示的内容 在这种情况下 我无法预加载图像
  • 如何根据另一个下拉列表中的选择动态填充下拉列表中的选项?

    我有一个表 其中包含类别信息 例如产品 我已将它们列在下拉菜单中 现在 我需要做的是 在下一个下拉菜单中列出所选类别的子类别 我希望 javascript 是必需的 但我对 javascript 还不太熟悉 将非常感谢您的帮助 你应该使用
  • 嵌套 DIV 的类似斑马的 CSS 样式

    我嵌套了 DIV 元素 但我不知道嵌套的级别 我需要每个都有与其父级不同的背景 创建类似斑马的颜色 我只使用两种背景 深色和白色 效果需要类似于在容器中设置奇数和偶数子级的样式 但在我的例子中 子级是嵌套的 我可以使用每个嵌套元素的规则来做
  • 如何使用 GreaseMonkey 让浏览器恢复“/”键?

    Lots of web pages seem to use the key for searching I d like to disable that because 100 of the time I want to use to se
  • Vue-Router 抽象父路由

    我正在尝试将当前网站迁移到 vuejs 站点地图必须是 login signup password reset browse search dozens of other routes 由于其中一些路线共享大量 fx 因此我将它们设为父路线
  • 如何使用 javascript 更改文件扩展名

    有谁知道在 Javascript 中更改文件扩展名的简单方法吗 例如 我有一个带有 first docx 的变量 但我需要将其更改为 first html 这将改变字符串包含文件名 let file first docx file file
  • 如何为 jQuery 插件设置私有变量?

    我想创建一个简单的插件 它使用元素的文本作为默认值 或者您可以在调用插件时设置此值 但是 如果我不设置该值 并为多个元素调用插件 则默认值会成倍增加 function fn reText function options var setti
  • 使圆圈与 d3.js 上的多线匹配相同的颜色过滤?

    我有一个多线图 当按每种水果过滤时会更新 每条线条颜色对应不同的销售年份 在 的帮助下Shashank https stackoverflow com users 5569282 shashank 每个数据点线上的圆圈已添加到组中 而不是直

随机推荐

  • 如何在keras转换层中进行零填充?

    我正在尝试实现科学文章中的模型 该文章说他们正在使用零填充 是否可以在中配置此填充keras Conv2D https keras io layers convolutional conv2d 我看到的唯一可能的填充值是 填充 有效 或 相
  • JPA Buddy 逆向工程工具未显示表格

    当我单击 来自数据库的实体 时 它正确连接到数据库 并且成功执行内省 以便我可以从侧面视图看到表列表 但在弹出窗口中我得到 0 个表 0 个视图和 0 个映射关系 0tables https i stack imgur com Gl0Ua
  • Linux 中使用 pipeline() 的链式管道

    我知道如何使用 C 在 Linux 中创建一个管道 如下所示cat tmp txt grep foo 但是我在实现像这样的多个链式管道时遇到问题cat tmp 1 txt uniq c sort 如何使用 C 来做到这一点pipe 在 Li
  • 为什么 PHP 被认为是面向对象的?

    我一直在阅读 OOP 的定义 但不明白为什么 PHP 被认为是面向对象的 这与 PHP 的 基础级别 不具备而更高级的功能却有什么关系吗 在大部分标准库已经创建并且该语言已经建立之后 OO 特性通过版本 3 5 分阶段添加到 PHP 中 背
  • 计算平均值或将 ArrayList 作为函数的参数

    是否有内置方法来计算整数 ArrayList 的平均值 如果没有 我可以创建一个函数 通过获取 ArrayList 的名称并返回其平均值来实现此目的吗 这真的很简单 Better use a List It is more generic
  • php 获取数组的数据大小

    拥有这个数组 Array block1 gt Array list gt Array sub list gt Array links gt Number total gt Number block2 gt Array attributes
  • 如何指定 Android 模拟器应在我的开发计算机上使用哪个网络接口?

    我的开发机器同时连接到两个不同的网络 一种是通过以太网 eth0 另一种是通过 WiFi en1 在这种情况下 Android 模拟器似乎总是想要连接 eth0 上的网络 从命令行启动模拟器时 是否有一个选项可以告诉它使用开发计算机上的特定
  • java中非静态块有什么用? [复制]

    这个问题在这里已经有答案了 可能的重复 实例初始值设定项与构造函数有何不同 https stackoverflow com questions 1355810 how is an instance initializer different
  • 使用捆绑属性增强图形库

    我是 BGL 的新手 尝试使用 BGL 设置一个简单的最短路径查找程序 其中无向图被定义为具有自定义定义的 EdgeProperty 和 VertexProperty 的邻接列表 我收到编译时错误 我将其归因于我在模板和 Boost 方面的
  • spring data jpa @query 和可分页

    我正在使用 Spring Data JPA 当我使用 Queryto 定义查询WITHOUT Pageable 有用 public interface UrnMappingRepository extends JpaRepository
  • 通过instance-id获取实例

    我需要通过实例 ID 获取实例 是否可以在不请求所有实例的列表的情况下完成此操作 我试过了 ec2 conn boto connect ec2 aws access key id key aws secret access key acce
  • 如何提高winform的加载时间?

    我有一个 WinForms 应用程序 主窗体有很多控件 这也是加载速度非常慢的原因之一 我想做的是使表单加载速度更快 我已经设置了beginupdate和endupdate 该表单不会在后台工作线程中呈现 因为这是主表单 没有初始形式 当用
  • 如何控制android中的视频捕获属性?

    我正在使用以下意图捕获视频 Intent takeVideoIntent new Intent MediaStore ACTION VIDEO CAPTURE if takeVideoIntent resolveActivity getPa
  • 允许匿名访问受保护的 Subversion 存储库的部分内容

    我们目前面临的问题是允许人们访问 subversion 存储库的某些部分 1 5 x 很快是 1 6 x 而其他部分是安全的 让我给你一些细节 我们有一个生产服务器 其中许多项目都有自己的颠覆存储库 对于每个项目 我们的 Apache 配置
  • Docker Compose 与多阶段构建

    有了这个新版本 https blog docker com 2017 06 announcing docker 17 06 community edition ce Docker 引入了多阶段构建 至少我以前从未听说过 我现在的问题是 我应
  • 使用 Spring Data Rest 时如何从组件扫描中排除 @Repository

    在 Spring Boot 项目中 我在从组件扫描中排除某些存储库时遇到问题 我有一个包含一些实体和一些存储库 JpaRepositories 的库 由于某种原因 我实现了一个小型 Spring Boot Data Rest 应用程序 用于
  • 如何在 Rust 中打印 sha256 哈希值? (通用数组)

    我正在测试 sha2 箱子 https docs rs sha2 0 9 3 sha2 https docs rs sha2 0 9 3 sha2 let base2 i32 2 let total size base2 pow 24 le
  • UISearchController 推送时不会隐藏视图

    我正在使用 UISearchController 在 UITableView 中显示搜索栏和结果 我设法正确设置它 但是当我搜索结果 然后选择表视图中的一行 并将新的视图控制器推送到导航堆栈时 我希望搜索栏不再可见 但是 当我尝试此操作时
  • 将数据框列转换为存储在列表中的向量

    我的数据由许多列 变量和三行组成 每个变量都是一个整数 其值随行和列的不同而变化 下面是我的数据的一个最小示例 Minimal example of data frame I have df lt data frame x1 c 1 2 3
  • 通过 Spotify Web API 和 JavaScript 播放歌曲时出现问题

    我正在致力于构建一个与 Spotify 交互的基于 Web 的应用程序 我从 C 开始 访问 API 拉出我的播放列表并从中拉出曲目都没有问题 但似乎您无法使用位于此处的 Spotify Web API 来播放歌曲 https develo