2

我正在使用 iTunes COM api 编写一个 JScript 脚本,用于更新ratingsplayed count从 iPod 数据库返回到 iTunes 库。为此,脚本应该能够识别从该 iTunes 资料库传输的歌曲,以便它可以读取 iPod 上曲目的评级数据并更新 iTunes 资料库中的相应曲目

这是我写的代码:

var iTunesApp = WScript.createObject("iTunes.Application");
var mainLibrary = iTunesApp.LibraryPlaylist;
var iPodLibraryPlaylist = playlists.Item(1);    // get the main iPod Library playlist(leaving the unimportant portion)

for(j=0; j <= iPodLibraryPlaylist.Tracks.Count - 1; j++) {
        foo = iPodLibraryPlaylist.Tracks.Item(j+1);    // j+1, coz this index is 1-based (why apple...why?)
        bar = mainLibrary.Tracks.ItemByPersistentID(iTunesApp.ITObjectPersistentIDHigh(foo), iTunesApp.ITObjectPersistentIDLow(foo));
        WScript.StdOut.WriteLine(bar.Name);    // should print the name of the track, but throws runtime error: Object required
}

根据 iTunes COM API

您可以使用相应集合接口的 ItemByPersistentID 属性检索具有指定持久 ID 的源、播放列表或曲目

ItemByPersistentID 返回具有指定持久 ID 的 IITTrack 对象

现在的问题是:

  1. 我是否正确地说,当曲目传输到 iPod 时,iTunes 库中曲目的 64 位永久 ID 保持不变。
  2. 我使用ITObjectPersistentIDHigh()and的方式有什么问题吗ITObjectPersistentIDLow()
  3. 有没有其他方法可以做到这一点?

PS:测试 iPod 有 662 首歌曲,所以没有问题

任何帮助深表感谢!谢谢!

4

2 回答 2

0

如果你有最新的nano,并打开画外音功能,那么ID会改变,否则不会。我试图弄清楚 SW 如何知道同步时更新播放计数和时间,因为 ID 不一样。

于 2009-12-10T20:06:58.683 回答
0

我不认为只有另一种方法可以做到这一点,很长:将 iPod 中的每首曲目的名称、专辑、长度等与你图书馆中的曲目进行比较。但是,我认为这不是一个非常有效的解决方案,只是一个“易于编程”的解决方案。

我像您一样使用了 persistentID(尽管在播放列表中)。它应该可以工作...也许您应该将参数设置为int ...

于 2011-04-14T19:10:28.377 回答