通过API在iTunes音乐库中搜索搜索词

时间:2012-01-23 21:30:23

标签: php json curl itunes

全部, 我正试图让用户搜索一首歌。假设用户正在搜索杰克约翰逊,我想在杰克约翰逊的iTunes上显示所有歌曲。我知道我需要构建如下的URL:

http://itunes.apple.com/search?term=jack+johnson&limit=25&media=music&entity=musicArtist,musicTrack,album,mix,song

从编程方面来看,我该如何将其发送给Apple?如果我将该URL复制到浏览器中,我会得到一些结果。根据这些结果,我如何解析这些结果,以便我可以将它们显示给用户?我想使用JSON,cURL,两者的组合吗?最有效的方法是什么?

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:4)

如果我理解你想要的东西,可能是这样的:

<?php
if(isset($_POST['term']))
{
    $term = urlencode($_POST['term']); // user input 'term' in a form
    $json =  file_get_contents('http://itunes.apple.com/search?term='.$term.'&limit=25&media=music&entity=musicArtist,musicTrack,album,mix,song');    
    $array = json_decode($json, true);

    foreach($array['results'] as $value)
    {
        echo '<p>';
        echo $value['artistName'].'<br />';
        echo $value['artistLinkUrl'].'<br />';
        echo $value['primaryGenreName'];
        echo '</p>';
    }
}
?> 

<form method="post">
    <input type="text" name="term" /><input type="submit" value="Go" />
</form>

要获得更多$数组值,请尝试print_r($array);

答案 1 :(得分:1)

您可以使用file_get_contents并使用json_decode解析结果。

$js= json_decode(file_get_contents('http://itunes.apple.com/search?term=jack+johnson&limit=25&media=music&entity=musicArtist,musicTrack,album,mix,song'));

$js现在是一个包含apple返回的所有信息的数组。

答案 2 :(得分:1)

请求必须通过HTTP执行。 JSON只是它返回的数据的格式,而不是检索它的方法。

您可以通过多种方式获取该数据。

最简单的选择就是使用file_get_contents,如果您的服务器启用了fopen包装器(很可能)。

$data = file_get_contents('http://itunes.apple.com/search?term=jack+johnson&limit=25&media=music&entity=musicArtist,musicTrack,album,mix,song');

cURL也可以使用类似的选项:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://itunes.apple.com/search?term=jack+johnson&limit=25&media=music&entity=musicArtist,musicTrack,album,mix,song");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);

一旦您检索到该页面的内容,只要安装了JSON扩展,就可以轻松地对其进行反序列化。如果你正在使用PHP 5.2.0+,那么它就是核心的一部分。否则,您需要安装PECL模块。 See the PHP manual page on the extension for more information.

$response = json_decode($data);
var_dump($response);

反序列化数据是一个对象。您可以像这样使用它:

foreach ($response->results as $result)
{
    echo "Artist: ".$result->artistName."<br />".PHP_EOL;
}