将 Spotify URI 编码为 Spotify 代码

2024-03-11

Spotify 代码 https://www.spotifycodes.com/index.html#是一些小条形码,可让您共享歌曲、艺术家、用户、播放列表等。

它们在“条”的不同高度中编码信息。 23 个条可以有 8 个离散高度,这意味着 8^23 种可能的不同条形码。

Spotify 根据其 URI 模式生成条形码。这个URIspotify:playlist:37i9dQZF1DXcBWIGoYBM5M被映射到这个条形码:

URI 中包含比代码更多的信息 (62^22)。如何将 URI 映射到条形码?看来您不能直接对 URI 进行编码。有关更多背景信息,请参阅我对此问题的“答案”:https://stackoverflow.com/a/62120952/10703868 https://stackoverflow.com/a/62120952/10703868


专利解释了一般过程,这是我发现的。

这是一项较新的专利 http://www.freepatentsonline.com/20180181849.pdf

使用 Spotify 代码生成器时,网站会发出请求https://scannables.scdn.co/uri/plain/[格式]/[十六进制背景颜色]/[文本中代码颜色]/[大小]/[spotify-URI] https://scannables.scdn.co/uri/plain/%5Bformat%5D/%5Bbackground-color-in-hex%5D/%5Bcode-color-in-text%5D/%5Bsize%5D/%5Bspotify-URI%5D.

使用 Burp Suite,当通过 Spotify 扫描代码时,应用程序会向 Spotify 的 API 发送请求:https://spclient.wg.spotify.com/scannable-id/id/[代码]?format=json https://spclient.wg.spotify.com/scannable-id/id/%5BCODE%5D?format=json其中 [CODE] 是您要查找的媒体参考。此请求可以通过 python 发出,但只能使用通过应用程序生成的 [TOKEN],因为这是获取正确范围的唯一方法。应用令牌将在大约半小时后过期。

import requests

head={
"X-Client-Id": "58bd3c95768941ea9eb4350aaa033eb3",
"Accept-Encoding": "gzip, deflate",
"Connection": "close",
"App-Platform": "iOS",
"Accept": "*/*",
"User-Agent": "Spotify/8.5.68 iOS/13.4 (iPhone9,3)",
"Accept-Language": "en",
"Authorization": "Bearer [TOKEN]", 
"Spotify-App-Version": "8.5.68"}

response = requests.get('https://spclient.wg.spotify.com:443/scannable-id/id/26560102031?format=json', headers=head)

print(response)
print(response.json())

返回:

<Response [200]>
{'target': 'spotify:playlist:37i9dQZF1DXcBWIGoYBM5M'}

因此 26560102031 是您的播放列表的媒体参考。

该专利指出,该代码首先被检测,然后可能使用格雷表转换为 63 位。例如,361354354471425226605 被编码为 010 101 001 010 111 110 010 111 110 110 100 001 110 011 111 011 011 101 101 000 111。

然而,发送到 API 的代码是 6875667268,我不确定媒体引用是如何生成的,但这是查找表中使用的数字。

该参考包含整数 0-9 与 0-7 的灰色表相比,这意味着已经使用了使用普通二进制的算法。该专利谈到使用卷积码,然后使用维特比算法进行纠错,因此这可能是其输出。如果没有我相信的状态,就不可能重现某些东西。不过,如果您能更好地解释该专利,我会很感兴趣。

该媒体编号为 10 位数字,但其他媒体编号为 11 或 12 位。

以下是原始距离的另外两个示例,即灰表二进制和媒体参考:

1.

022673352171662032460

000 011 011 101 100 010 010 111 011 001 100 001 101 101 011 000 010 011 110 101 000

67775490487

2. 574146602473467556050

111 100 110 001 110 101 101 000 011 110 100 010 110 101 100 111 111 101 000 111 000

57639171874

edit:

一些额外的信息: 网上有一些帖子描述了如何将任何文本(例如,spotify:playlist:HelloWorld)编码为代码,但这不再有效。

我还通过代理发现,您可以使用域来获取代码上方曲目的专辑封面。这表明 Spotify 的 API 和此可扫描 URL 的集成比以前想象的更紧密。因为它不仅存储 URI 及其代码,还可以验证 URI 并返回更新的专辑封面。

https://scannables.scdn.co/uri/800/spotify%3Atrack%3A0J8oh5MAMyUPRIgflnjwmB https://scannables.scdn.co/uri/800/spotify%3Atrack%3A0J8oh5MAMyUPRIgflnjwmB

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Spotify URI 编码为 Spotify 代码 的相关文章

  • 如何在 Google Storage Transfer 上创建 tsv 文件

    谷歌为其云服务提供了很棒的文档 但不幸的是没有人能理解其中的内容 他们的解释总是跳跃性的 让人们没有任何线索来完成哪怕是一个简单的任务 创建 tsv 文件应该是一个简单的任务 我尝试关注此页面中的所有内容创建 URL 列表 https cl
  • 如何生成可可靠扫描的小型、高密度线性条形码?

    我正在努力将 POS 系统集成到我的网站 所以我想生成条形码 我使用 SKU 作为数据字段来编码甲酸盐是XXXXX XXX XXX XXX X 是从 0 到 9 的数字 所以经过研究 我发现代码 128 是最好的纠正我的方法 如果我错了 尺
  • fortran中双引号和单引号的区别?

    我刚刚开始使用 Fortran 对双引号和单引号的使用感到困惑 它们是等价的 它们的用法没有区别 您可以使用它来打印引号字符之一 print print 首先打印 进而 注意 您还可以在一行中使用两个引号字符来打印一个 print prin
  • Perl 使用什么哈希函数/算法?

    有人能解释一下 Perl 用于将字符串映射到索引的哈希函数 算法吗 有相关读物吗 这个答案早于 5 28 中进行的哈希函数更改 请参阅 默认哈希函数更改 perldelta 为 5 28 http perldoc perl org perl
  • 对于范围从 0 到最大值的 uint64_t 键,最佳哈希函数是什么?

    假设我们有一组元素并希望将它们存储在哈希映射中 例如std unordered set 并且每个元素都有一个 type 的键uint64 t其值可以从 0 到最大可能值变化 使用简单哈希函数 其中键的哈希值就是键本身 是最佳选择吗 它是否取
  • 将文件编码为 Base 64 Nodejs

    我使用下面的代码将文件编码为 Base64 var bitmap fs readFileSync file return new Buffer bitmap toString base64 我认为在文件中我们有问题 and 字符 但它很好
  • 在 Applescript 中监控 Spotify 曲目变化?

    我正在尝试找出通过 Spotify 的 Applescript 库检测曲目更改的最佳方法 到目前为止 我已经尝试检查玩家位置 如果它等于 0 则它是一个新曲目 并且咆哮通知会再次出现 如果有人重新开始一首歌等 这通常不起作用 我想知道是否更
  • Oh-my-zsh 哈希(井号)符号错误模式或未找到匹配项

    我很确定是与我的 Oh my zsh 配置相关的东西 但我不知道它是什么 当我在 git 命令中使用 符号时 但也适用于其他所有命令 例如 ls 2 我收到 错误模式 错误或 找不到匹配项 我猜是要计算一些东西 但我找不到在哪里配置它 I
  • ZXing 无法正确读取巴西条形码钞票(交错的 2 个,共 5 个)。我该如何修复它?

    我使用 XZing 2 3 0 读取 ITF 条形码 但 ZXing 无法正确读取 47 位巴西钞票 以下示例条形码图像 可以在这里找到 http www shimatai com br images boleto png 被读作03391
  • MySQL 不将 ı 视为 i?

    我在 MySQL 5 7 27 中有一个用户表utf8mb4 unicode ci整理 不幸的是 没有像 i 那样进行线程化 以下查询将找不到Y lmaz select id from users where name Yilmaz 我对其
  • Python UTF-8转换问题

    在我的数据库中 我存储了一些 UTF 8 字符 例如 名称 字段中的 通过 Django ORM 当我读到这个时 我得到了类似的东西 gt gt gt p name u xce xb1 gt gt gt print p name 我本来希望
  • 与 Ruby 1.9.X 中的 Iconv.conv("UTF-8//IGNORE",...) 等效吗?

    我正在从远程源读取数据 偶尔会得到另一种编码的一些字符 它们并不重要 我想得到一个 最佳猜测 utf 8 字符串 并忽略无效数据 主要目标是获得一个我可以使用的字符串 并且不会遇到以下错误 编码 UndefinedConversionErr
  • 如何对定义的字符集python中的所有可能的字符串进行加密?

    我试图加密定义的字符集中所有可能的字符串 然后将它们与用户输入给出的哈希进行比较 这就是我目前拥有的 import string from itertools import product import crypt def decrypt
  • 在 C# .NET 中对非 ASCII 字符进行编码

    我想向我的应用程序发送的电子邮件添加自定义标头 标头名称只能包含 ASCII 字符 但对于值和用户可能会输入 UTF 8 字符 我必须对它们进行 Base64 编码 此外 我还必须将它们解码回 UTF 8 以便在 UI 中向用户显示它们 最
  • 将 Python 中的 SHA 哈希计算转换为 C#

    有人可以帮我将以下两行 python 代码转换为 C 代码吗 hash hmac new secret data digestmod hashlib sha1 key hash hexdigest 8 如果您有兴趣 其余的看起来像这样 us
  • NodeJS 在目录中递归地哈希文件

    我能够实现目录中的递归文件遍历 即探索目录中的所有子目录和文件 为此我使用了answer https stackoverflow com questions 5827612 node js fs readdir recursive dire
  • MySQL 将 ÅäÖ 视为 AAO?

    这两个查询给了我完全相同的结果 select from topics where name Harligt select from topics where name H rligt 这怎么可能 看起来mysql在搜索时会将 翻译成aao
  • 防止 .exe 时间戳发生变化

    有谁知道如何防止可执行文件的时间戳更改 我正在尝试为 exe 生成一致的哈希代码 但我认为时间戳可能会阻止这种情况发生 每次我重新编译代码 VS C 时 FastSum 都会生成不同的校验和 Thanks PE 文件格式 如 EXE 中 具
  • 在我的 ramaz 应用程序上显示 £ 符号时,我收到“不兼容的字符编码:CP850 和 UTF-8”

    显示时收到 不兼容的字符编码 CP850 和 UTF 8 我的 ramaz 应用程序上的符号 我怎样才能摆脱这个错误 我的 head 标签中有 UTF 8 元标签 当我输入 用键盘输入符号 看 我已将以下代码放入我的 ruby 文件中 但它
  • 哈希表的空间复杂度是多少?

    具有 32 位键和指向单独存储的值的 32 位指针的哈希表的大小是多少 是 2 32 个槽 4 字节 键 4 字节 指向值的指针 4 10 9 4 4 32GB 我想了解哈希表的空间复杂度 我认为你问错了问题 数据结构的空间复杂度表示它占用

随机推荐