Фильтрация определенных данных из XML с использованием PHP (Last.fm) ОБНОВЛЕНИЕ

Обновление:

Спасибо Рэмбо за отличный ответ. Единственная проблема, которая у меня есть сейчас, заключается в том, что он отображает информацию об исполнителе только до тех пор, пока следующий концерт артиста находится в Великобритании. Например, если они играют во Франции, а ПОТОМ в Великобритании - ничего не отобразится (или отобразится мое сообщение else). Если их следующий концерт состоится в Великобритании, то он будет отображать информацию об исполнителе и т. д. Есть идеи, как заставить его отображать только информацию о Великобритании, независимо от того, были ли они в другой стране до этого?

Спасибо.

Исходное сообщение:

В настоящее время я создаю веб-сайт для моего последнего крупного проекта. Я извлекаю данные с помощью API Last.fm, используя PHP и XML. Пока все идет хорошо, но есть несколько проблем, с которыми у меня возникли проблемы. Я очень новичок в PHP, поэтому я хочу использовать эту возможность, чтобы развить некоторые навыки.

  1. Я хочу ограничить данные своим городом или страной.
  2. Как получить изображения из XML-документа?

Используя API last.fm, а точнее, artist.getEvents (http://bit.ly/zYzWo6), я могу создать базовое поле поиска, чтобы пользователь мог ввести имя исполнителя. Это большой шаг в правильном направлении, но проблема в том, что любые результаты за пределами моей страны не имеют значения для моего проекта. Использование artist.getEvents не позволяет использовать какие-либо конкретные параметры, такие как местоположение, однако позволяет использовать geo.getEvents (http://bit.ly/wpSQwd).

Ниже приведен код, используемый для моего основного поиска:

<?php

    $first_bit_of_url = 'http://ws.audioscrobbler.com/2.0/?method=artist.getevents&artist=';
    $last_bit_of_url = '&api_key=b25b959554ed76058ac220b7b2e0a026&d';


    $artist = ($_GET["artist"]); // gets the information passed by the input form

    $query_url = $first_bit_of_url . $artist . $last_bit_of_url ;


    $upcoming_gig_data_xml = simplexml_load_file($query_url);

    $search_result = $upcoming_gig_data_xml->events->event->artists->artist;
    $venue_result = $upcoming_gig_data_xml->events->event->venue->name;
    $city_result = $upcoming_gig_data_xml->events->event->venue->location->city;

    for ($i = 0; $i < 5; $i++){

    echo $search_result . "<br />";
    echo $venue_result . ", ";
    echo $city_result . "<br />";

    } ?>

Во-вторых, как мне получить изображение, например, из этого образца кода XML, используемого в приведенном выше контексте? Я кратко прочитал несколько статей о Xpath, могу ли я смешивать метод Xpath с методом, который я использую выше?

<image size="small">...</image>
  <image size="medium">...</image>
  <image size="large">...</image>

Надеюсь, кто-то может указать мне правильное направление здесь, и я ценю любую оказанную помощь.

Спасибо,

Крис.


person Chris Kernaghan    schedule 13.02.2012    source источник


Ответы (3)


Вы можете использовать XPath, чтобы получить только элементы event с площадками в Великобритании.

$lfm = simplexml_load_file('http://ws.audioscrobbler.com/2.0/?method=artist.getevents&artist=metallica&api_key=b25b959554ed76058ac220b7b2e0a026&d');
$uk_events = $lfm->xpath('events/event[venue/location/country="United Kingdom"]');
foreach ($uk_events as $event) {
    $venue_city = (string) $event->venue->location->city;
    $large_pics = array_map('strval', $event->xpath('image[@size="large"]'));
    // Do whatever other processing/displaying you like…
}

(Посмотрите, как он работает.)

person salathe    schedule 13.02.2012

для вашего второго вопроса: используйте простой xml http://www.php.net/manual/de/ref.simplexml.php

например, ваш xml может быть:

<?xml version="1.0" encoding="UTF-8"?>
<images>
  <image size="small">1</image>
  <image size="medium">2</image>
  <image size="large">3</image>
</images>

загрузите файл xml с помощью простого xml и получите доступ к таким узлам. Это всего лишь простой пример.

$r = simplexml_load_file('test.xml');
foreach($r->image as $img) {
  print $img . ' and size is ' . $img['size'] . "<br/>";
}
person busypeoples    schedule 13.02.2012

$smallimg = $upcoming_gig_data_xml->события->событие->место проведения->изображение['маленький'];

затем вы можете повторить изображение, используя HTML-тег img, присвоив ему src значение $smallimg

Я не проверял это, но, надеюсь, это приведет вас в правильном направлении.

Обновить

для первого пункта, прокрутите файл xml и выполните сопоставление для страны, поэтому, если он равен соединенному королевству, обработайте все, иначе он его пропустит.

foreach($upcoming_gig_data_xml->events->event as $event)
{
   if($event->location == "United Kingdom")
   {
      // process everything here
   }
}
person Rambo    schedule 13.02.2012