Как я могу получить информацию о приложении / песне / видео и т. д. из iTunes Store?
Мне нужно получить информацию о приложении/песне/видео по идентификатору элемента из iTunes Store.
Я нашел этой
но он не работает с приложениями.
есть ли какой-либо публичный API?
UPD: я могу получить информацию с помощью этой ссылке но это не структурированные данные, это просто разметка для iTunes для отображения материалов. Я не могу полагаться на что - то можно изменить в любое время и трудно разобрать, потому что это не согласуется структура...
5 ответов
Apple теперь, похоже, предлагает более дружелюбную службу поиска, возвращающую JSON. NB:документация тут оговаривает что API предназначен для использования в связи с продвижением результатов поиска (т. е. предназначен для партнерских ссылок).
пример, получение информации о приложении, если вы знаете его Apple ID:
http://itunes.apple.com/lookup?id=[appleID]
общий поиск по ключевым словам
http://itunes.apple.com/search?term=[query]
насколько я знаю (и я много искал), нет публичного API.
вы правы, что HTML не семантически структурирован, поэтому разбор его не будет очень надежным. Но я думаю, это твой единственный вариант. Вот несколько ссылок, которые могут помочь :-
A Python скрипт который анализирует комментарии.
статья Ars Technica:ссылка на звезды: взлом iTunes, чтобы запросить отзывы.
внутри iPhone статья: Выскабливание AppStore Отзывы.
в iTunes есть публичный API под названием "iTunes Store Web Service Search API", который возвращает довольно много информации. Некоторые из них документированы здесь но эта документация является неполной.
вы можете использовать API для получения информации обо всем, что продается в iTunes Store и App Store, включая URL-адреса для художественных работ, ссылки непосредственно в iTunes, все приложения разработчика и так далее. Это очень надежный, и я хотел бы найти обновленный документация.
в настоящее время я пишу статью в iPhone Dev FAQ чтобы показать, как делается несколько вещей и расширить доступную документацию.
эта ссылка у вас есть JSON! У вас есть правильное решение здесь. Вам просто нужно в формате JSON.рамки
Я написал этот сценарий для себя. Он не оптимизирован или не защищен от будущего, но тем временем он работает для меня...
<?php
ini_set('display_errors', false);
if(isset($_GET['appID']) && isset($_GET['format']))
{
$appID = (int)stripslashes($_GET['appID']);
$format = stripslashes($_GET['format']);
$url = "http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=$appID&mt=8";
$useragent = "iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
$result = curl_exec($ch);
curl_close($ch);
$temp = str_replace("½","",strip_tags(substr($result,
strpos($result,"Average rating for the current version:"),
strpos($result,"Rate this application:")-strpos($result,"Average rating for the current version:"))));
$temp1 = explode("ratings",$temp);
if(strpos($temp1[2], "Average rating for all versions:"))
$temp1[2] = substr($temp1[2],0,stripos($temp1[2],"Average rating for all versions:"));
$temp1[2] = preg_replace('/\s\s+/', ' ', $temp1[2]);
$temp2 = explode(" ",$temp1[2]);
$ratings[0] = $temp2[1];
$ratings[1] = $temp2[2];
$ratings[2] = $temp2[3];
$ratings[3] = $temp2[4];
$ratings[4] = $temp2[5];
if($format == "prettyPrint")
printRatings($ratings);
else if($format == "XML");
getXML($ratings);
}
else
{
echo "Enter the app id and format (http://iblackjackbuddy.com/getAppRatings.php?appID=###&format=###";
}
function printRatings($ratings)
{
echo "Five stars: " . $ratings[0];
echo "<br>Four stars: " . $ratings[1];
echo "<br>Three stars: " . $ratings[2];
echo "<br>Two stars: " . $ratings[3];
echo "<br>One star: " . $ratings[4];
echo "<hr>Total ratings: " . getTotalRatings($ratings);
echo "<br>Average rating: " . getAverageRating($ratings);
}
function getTotalRatings($ratings)
{
$temp = 1;
for($i=0; $i < count($ratings); ++$i)
$temp+=$ratings[$i];
return $temp;
}
function getAverageRating($ratings)
{
$totalRatings = getTotalRatings($ratings);
return round(5*($ratings[0]/$totalRatings)
+ 4*($ratings[1]/$totalRatings)
+ 3*($ratings[2]/$totalRatings)
+ 2*($ratings[3]/$totalRatings)
+ 1*($ratings[4]/$totalRatings),2);
}
function getXML($ratings)
{
header('Content-type: text/xml');
header('Pragma: public');
header('Cache-control: private');
header('Expires: -1');
echo '<?xml version="1.0" encoding="utf-8"?>';
echo '<Rating>';
echo '<FiveStars>'.$ratings[0].'</FiveStars>';
echo '<FourStars>'.$ratings[1].'</FourStars>';
echo '<ThreeStars>'.$ratings[2].'</ThreeStars>';
echo '<TwoStars>'.$ratings[3].'</TwoStars>';
echo '<OneStar>'.$ratings[4].'</OneStar>';
echo '<TotalRatings>'.getTotalRatings($ratings).'</TotalRatings>';
echo '<AverageRating>'.getAverageRating($ratings).'</AverageRating>';
echo '</Rating>';
}
?>