Получаем данные с помощью lastfm api REST requests.

Авг. 13, 2010| 18:43

То, о чем я дальше напишу можно будет использовать в работе с любыми REST-сервисами, да и вообще с любыми сервисами где на URI-запрос отвечают XML-ответом (та же самая RSS технически REST-сервис).

ну для начала :

  • что такое REST можно почитать на википедии и дальше по ссылками. Вкратце, в системе есть ресурс однозначно идентифицируемый URI. Клиенты общаются с сервисом по HTTP, получают ответы в формате XML. Большинство сервисов позволяют стандартные GET запросы к ресурсу.
  • описание lastfm api

Так как ответ приходит в формате XML, первое, что приходит на ум заядлому пхпшнику это SimpleXML. Отличный и удобный модуль для работы с XML.

Пример получения топлиста композиций:

  • урл где находится api - http://ws.audioscrobbler.com/2.0/
  • в GET запросе надо передать метод, имя пользователя и ключ, который выдется для работы с api

Ответ будет выглядеть примерно так :

<? xml version = "1.0"encoding = "utf-8" ?>
 <lfm status="ok">
 <toptracks user="v03adk" type="overall">
     <track rank="1">
         <name>Monsters (radio edit mix)</name>
         <playcount>96</playcount>
         <mbid></mbid>
         <url>http://www.last.fm/music/The+Gathering/_/Monsters+(radio+edit+mix)</url>
         <streamable fulltrack="0">1</streamable>
         <artist>
             <name>The Gathering</name>
             <mbid>004e5eed-e267-46ea-b504-54526f1f377d</mbid>
             <url>http://www.last.fm/music/The+Gathering</url>
         </artist>
         <image size="small">http://userserve-ak.last.fm/serve/34s/15846541.jpg</image>
         <image size="medium">http://userserve-ak.last.fm/serve/64s/15846541.jpg</image>
         <image size="large">http://userserve-ak.last.fm/serve/126/15846541.jpg</image>
         <image size="extralarge">http://userserve-ak.last.fm/serve/300x300/15846541.jpg</image>
     </track>
 </toptracks>
 </lfm>

Обрабатываем ответ :

$tracks = new SimpleXMLElement('http://ws.audioscrobbler.com/2.0/?method=user.gettoptracks&user=v03adk&api_key=my_key', NULL, true);
foreach($tracks->toptracks->track as $track)
{
    $row['rank'] = $track->attributes()->rank;
    $row['track'] = '<a href="'.$track->artist->url.'">'.$track->artist->name.'</a> - <a href="'.$track->url.'">'.$track->name.'</a>';
    $row['playcount'] = $track->playcount;
            
    $list[] = $row;
}

Всего 6 строк кода и в массиве $list теперь у нас построчно лежат композиции, дальше мы можем делать с ними все что хотим. SimpleXML сильная и отличная вещь. Не забывайте и о XPath, например получить одно из изображений( с аттрибутом  medium) можно вот так внутри цикла : $im = $track->xpath("image[@size='medium']");

Элемент класса SimpleXMLElement мы создаем напрямую из ссылки на сервис, но не забудьте, что вы не должны обращаться каждый раз к сервису при генерации страницы, я например сохраняю ответ и работаю уже с ним. Обновляю файл каждые 6 часов.


Метки: php, howto, simplexml, rest, lastfm api