iTunes通过匹配保留驻留在iCloud上的文件的“trackid”

时间:2013-01-03 16:43:10

标签: ruby-on-rails macos audio metadata itunes

目标是使用iTunes商店为仅存在于iCloud上的文件更新音频元数据。 我发现了一个方便的Ruby脚本,如果文件在本地重新下载http://cl.ly/C3kK

,它将执行任务

这个脚本让我对itunes store api有所启发,但是,我仍然需要itunes store trackId,它不会与本地/内部trackId或persistentId混淆。上面的脚本读取物理音频文件的第一个MB,查找幻数并存储后续整数。我偷看了iTunes音乐库,没有运气。 Itunes将这些信息存储在我想到的地方。或者至少可以使用另一个ID从iCloud中检索元数据。 最后,我只需使用itunes store api的结果更新itunes music library.xml。

我意识到有iCloud iTunes api电话,但在我深入研究该主题之前,我宁愿向专家发帖提问。

关于这个问题的任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

我知道你发布这个问题已经有一段时间了,但我遇到了同样的问题,并且能够弄明白。 iTunes商店trackId存储在iTunes匹配文件的下载版本中。如果你从文件中获取前1024个字节的数据,则track id是字符串' song'之后的前4个字节的数据。您需要将其从带符号的32位整数转换为十进制。

示例:No Cars Go(Arcade Fire)

file_string = File.open(path, 'r').read(1024)
index = file_string.index('song')
@iTunes_id = file_string[index+4,4].unpack('N')[0]
print "Song ID: #{@iTunes_id}"

结果:

Song ID: 81607936

现在,您可以获取该ID并从iTunes中查找曲目数据:

https://itunes.apple.com/lookup?id=81607936&country=US

结果:

{
 "resultCount":1,
 "results": [
{"wrapperType":"track", "kind":"song", "artistId":23203991, "collectionId":81607965, "trackId":81607936, "artistName":"Arcade Fire", "collectionName":"Arcade Fire EP", "trackName":"No Cars Go", "collectionCensoredName":"Arcade Fire EP", "trackCensoredName":"No Cars Go", "artistViewUrl":"https://itunes.apple.com/us/artist/arcade-fire/id23203991?uo=4", "collectionViewUrl":"https://itunes.apple.com/us/album/no-cars-go/id81607965?i=81607936&uo=4", "trackViewUrl":"https://itunes.apple.com/us/album/no-cars-go/id81607965?i=81607936&uo=4", "previewUrl":"http://a644.phobos.apple.com/us/r1000/060/Music2/v4/ba/95/be/ba95be41-4a03-4dea-2965-57dd5f0b66c0/mzaf_6092501386391248238.m4a", "artworkUrl30":"http://a5.mzstatic.com/us/r30/Music/y2005/m10/d01/h10/mzi.yfrupnuj.30x30-50.jpg", "artworkUrl60":"http://a2.mzstatic.com/us/r30/Music/y2005/m10/d01/h10/mzi.yfrupnuj.60x60-50.jpg", "artworkUrl100":"http://a5.mzstatic.com/us/r30/Music/y2005/m10/d01/h10/mzi.yfrupnuj.100x100-75.jpg", "collectionPrice":6.93, "trackPrice":0.99, "releaseDate":"2005-01-10T08:00:00Z", "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "discCount":1, "discNumber":1, "trackCount":7, "trackNumber":3, "trackTimeMillis":364071, "country":"USA", "currency":"USD", "primaryGenreName":"Alternative", "radioStationUrl":"https://itunes.apple.com/station/idra.81607936"}]
}

我希望这有助于OP或其他任何人,我无法在其他任何地方找到这些信息。

答案 1 :(得分:0)

我知道你发布这个问题已经有一段时间了,但我遇到了同样的问题,并且能够弄明白。 iTunes商店trackId存储在iTunes匹配文件的下载版本中。如果从文件中获取前1024个字节的数据,则track id是字符串'song'之后的前4个字节数据。您需要将其从带符号的32位整数转换为十进制。