不同客户端的 iTunes Lookup API 响应不同

Posted

技术标签:

【中文标题】不同客户端的 iTunes Lookup API 响应不同【英文标题】:iTunes Lookup API response is different for different clients 【发布时间】:2019-05-30 22:38:28 【问题描述】:

现在它看起来像个谜。请帮我解决它。

我使用 iTunes 公共 API 获取专辑:Metallica 的“Metallica”(在浏览器中查看:US region、MV region)。我构建了以下 URL 以通过 API 获取它:

    美国地区https://itunes.apple.com/lookup?id=579372950&country=US&entity=album - 有效 MV 区域https://itunes.apple.com/lookup?id=579372950&country=MV&entity=album - 不起作用

这是我观察到的实际行为:

如果我在 Spring 应用程序中查询 GET https://itunes.apple.com/lookup?id=579372950&country=MV&entity=album(使用 RestTemplate + Jackson HttpMessageConverter),我得到一个空响应:


 "resultCount":0,
 "results": []

如果我在浏览器中导航到https://itunes.apple.com/lookup?id=579372950&country=MV&entity=album,我会收到文件下载提示。该文件包含一个空响应:


 "resultCount":0,
 "results": []

如果我使用 HttpPie http get https://itunes.apple.com/lookup?id=579372950&country=MV&entity=album 查询 API,我会得到一个非空响应!!!


    "resultCount": 1,
    "results": [
        
            "amgArtistId": 4906,
            "artistId": 3996865,
            "artistName": "Metallica",
            "artistViewUrl": "https://music.apple.com/us/artist/metallica/3996865?uo=4",
            "artworkUrl100": "https://is1-ssl.mzstatic.com/image/thumb/Music/v4/0b/9c/d2/0b9cd2e7-6e76-8912-0357-14780cc2616a/source/100x100bb.jpg",
            "artworkUrl60": "https://is1-ssl.mzstatic.com/image/thumb/Music/v4/0b/9c/d2/0b9cd2e7-6e76-8912-0357-14780cc2616a/source/60x60bb.jpg",
            "collectionCensoredName": "Metallica",
            "collectionExplicitness": "notExplicit",
            "collectionId": 579372950,
            "collectionName": "Metallica",
            "collectionPrice": 9.99,
            "collectionType": "Album",
            "collectionViewUrl": "https://music.apple.com/us/album/metallica/579372950?uo=4",
            "copyright": "℗ 1991 Blackened Recordings",
            "country": "USA",
            "currency": "USD",
            "primaryGenreName": "Metal",
            "releaseDate": "1991-08-12T07:00:00Z",
            "trackCount": 13,
            "wrapperType": "collection"
        
    ]

我尝试了多次,结果似乎是一致的。我比较了请求,它们似乎是相同的。

为什么 iTunes 对不同客户端的响应不同?我无法理解。我遗漏了哪些重要的细节?


类似问题:

    Spring RestTemplate getForObject URL not working for Apple iTunes - 还有另一个问题(空格字符的双重编码)。

这个问题发生在以下地区(这是一个完整的列表):

李https://itunes.apple.com/lookup?id=579372950&country=LI&entity=album MV https://itunes.apple.com/lookup?id=579372950&country=MV&entity=album MMhttps://itunes.apple.com/lookup?id=579372950&country=MM&entity=album ET https://itunes.apple.com/lookup?id=579372950&country=ET&entity=album RShttps://itunes.apple.com/lookup?id=579372950&country=RS&entity=album

【问题讨论】:

【参考方案1】:

我发现了不同之处:

http get 'https://itunes.apple.com/lookup?id=579372950&country=MV&entity=album' -> 空响应

curl 'https://itunes.apple.com/lookup?id=579372950&country=MV&entity=album' -> 空响应

http get https://itunes.apple.com/lookup?id=579372950&country=MV&entity=album -> 1 张专辑回应

curl https://itunes.apple.com/lookup?id=579372950&country=MV&entity=album -> 1 张专辑回应

如果我不在 URL 周围使用引号,请求将被解释为 GET https://itunes.apple.com/lookup?id=579372950。默认国家是美国,因此我看到 1 个美国专辑作为回应。

【讨论】:

以上是关于不同客户端的 iTunes Lookup API 响应不同的主要内容,如果未能解决你的问题,请参考以下文章

Appstore 版本 API 给出不同的版本

如何在 javascript 中查询 iTunes 搜索 API?

iTunes 查找 API 在我的 APP 中返回旧数据

无法使用 iTunes api 找到应用程序

iTunes Connect 访问我的客户端的下载状态

在 iOS 应用程序中使用 iTunes 连接查找 api