难以操纵iTunes API的JSON返回数据

时间:2013-04-18 17:22:30

标签: php json itunes

我正在创建一个基于音乐的应用程序,我正在尝试访问iTunes api以返回购买相册的链接,该相册是根据点击的相册动态生成的(工作正常,并生成链接到正确的JSON数据)。 An Example link

我无法理解的是访问JSON中的'collectionViewUrl'键,我只想将其设置为选择专辑封面后出现的链接的href,这将被评分在; $topalbums[$i]['iTunes'] = ....

我尝试使用json_decode来访问数据,但每当我尝试访问密钥时,我都需要得到回报。我错过了一些简单的东西吗?

==================================

(我这部分的当前代码)

$iTunes_link_prefix = "https://itunes.apple.com/search?country=GB&media=music&entity=album&limit=1&artist=";

    for ($i = 0; $i < 6; $i++) {
        $topalbum[$i]['title'] = $xml['top_albums']->topalbums->album[$i]->name;
        $topalbum[$i]['image'] = $xml['top_albums']->topalbums->album[$i]->image[3];

        $json_link = $iTunes_link_prefix . $artist . "&term=" . urlencode($topalbum[$i]['title']);

        $topalbum[$i]['itunes'] = (Contents of the collectionViewUrl Key)

    }

3 个答案:

答案 0 :(得分:0)

为此,请记住,您获得的json必须在“之前”转换为您可以实际操作它。 正如我在示例中看到的那样,你表明你必须做一些像获取json内容(有卷曲或不知道你怎么做)的内容,当你得到你做的内容时:

$itunesDisc = json_decode($jsonFromItunes);

然后,你有json的内容。如果iTunes返回的所有json都以响应的形式出现:[...]为简单起见,您可以这样做

$itunesDisc = $itunesDisc["response"];

然后你可以浏览数组。 也许这个页面可以帮助您向您展示json响应的内容http://jsonviewer.stack.hu/

答案 1 :(得分:0)

一个简单的解决方案,只需将 foreach 代码更改为:

for ($i = 0; $i < 6; $i++) {
    $topalbum[$i]['title'] = $xml['top_albums']->topalbums->album[$i]->name;
    $topalbum[$i]['image'] = $xml['top_albums']->topalbums->album[$i]->image[3];

    $json_link = "{$iTunes_link_prefix}{$artist}&term=" . urlencode($topalbum[$i]['title']);

    // Fetch the JSON data from iTunes - you can add some more verifications here
    // to make sure your app runs smooth if the request fails for some reason
    $itunes_json       = file_get_contents($json_link);
    $itunes_album_data = json_decode($itunes_json, true);

    // Access the URL from the 1st result if any
    if (!empty($itunes_album_data['results'][0]['collectionViewUrl'])) {
        $topalbum[$i]['itunes'] = $itunes_album_data['results'][0]['collectionViewUrl'];
    }
}

答案 2 :(得分:0)

我发现错误实际上是在我尝试输入静态链接代替动态生成的链接后生成JSON链接。 $artist变量需要通过urlencode()运行。以下是该部分的最终代码,感谢您的帮助!

for ($i = 0; $i < 6; $i++) {
        $topalbum[$i]['title'] = $xml['top_albums']->topalbums->album[$i]->name;
        $topalbum[$i]['image'] = $xml['top_albums']->topalbums->album[$i]->image[3];

        $json_link = $iTunes_link_prefix . urlencode($artist) . "&term=" . urlencode($topalbum[$i]['title']);
        $itunes_json       = file_get_contents($json_link);
        $itunes_album_data = json_decode($itunes_json);

        if (!empty($itunes_album_data->results[0]->collectionViewUrl)) {
            $topalbum[$i]['itunes'] = $itunes_album_data->results[0]->collectionViewUrl;
        }
    }