iTunes Lookup API 响应因客户端而异



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

我使用iTunes公共API获取专辑:Metallica的"Metallica"(在浏览器中查看:美国地区,MV地区)。我构造以下 URL 以通过 API 获取它:

  1. 美国地区 https://itunes.apple.com/lookup?id=579372950&country=US&entity=album - 作品
  2. 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+ 杰克逊HttpMessageConverter),我得到一个空的响应:

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

    {
    "resultCount":0,
    "results": []
    }
    
  • 如果我使用 HttpPie 查询 API,http get https://itunes.apple.com/lookup?id=579372950&country=MV&entity=album我得到一个非空的响应!!

    {
    "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 对不同客户端的响应不同?我无法理解。我错过了哪些重要细节?


类似问题:

  1. Spring RestTemplate getForObject URL 不适用于 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
  • 毫米 https://itunes.apple.com/lookup?id=579372950&country=MM&entity=album
  • ET https://itunes.apple.com/lookup?id=579372950&country=ET&entity=album
  • RS https://itunes.apple.com/lookup?id=579372950&country=RS&entity=album

我发现了一个区别:

  • 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 张美国专辑作为响应。

最新更新