0

更新:

感谢兰博的精彩回答。我现在唯一的问题是,只要艺术家的下一场演出在英国,它就只会显示艺术家信息。例如,如果他们在法国玩然后在英国玩 - 它不会显示任何东西(或者它会显示我的 else 消息)。如果他们的下一场演出是在英国,那么它将呼应艺术家信息等。知道如何让它仅呼应英国信息,无论他们是否事先在另一个国家?

谢谢你。

原帖:

我目前正在为我的最后一个主要项目创建一个网站。我通过使用 PHP 和 XML 的 Last.fm API 检索数据。到目前为止一切顺利,但我遇到了一些问题。我对 PHP 很陌生,所以我想利用这个机会发展一些技能。

  1. 我想将数据限制在我的城市或国家。
  2. 如何从 XML 文档中检索图像?

使用 last.fm API,更具体地说,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>

希望有人可以在这里为我指明正确的方向,我感谢您提供的任何帮助。

谢谢,

克里斯。

4

3 回答 3

0

对于你的第二个问题:使用简单的 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/>";
}
于 2012-02-13T12:14:56.180 回答
0

$smallimg = $upcoming_gig_data_xml->events->event->venue->image['small'];

然后您可以使用 img html 标记回显图像,为其 src 提供 $smallimg 的值

我还没有测试过这个,但希望它能让你朝着正确的方向前进

更新

对于第一点,循环遍历 xml 文件并为国家/地区进行匹配,因此如果它等于英国则处理所有内容,否则将跳过它

foreach($upcoming_gig_data_xml->events->event as $event)
{
   if($event->location == "United Kingdom")
   {
      // process everything here
   }
}
于 2012-02-13T12:18:34.563 回答
0

您可以使用 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…
}

看到它运行。)

于 2012-02-13T22:52:53.243 回答