使用PHP(Last.fm)UPDATE从XML过滤特定数据

时间:2012-02-13 12:03:55

标签: php xml last.fm

更新

感谢Rambo给出的答案。我现在唯一的问题是它只显示艺术家信息,只要艺术家的下一场演出在英国。例如,如果他们在法国和英国玩,那么它将不会显示任何内容(或者它会显示我的其他消息)。如果他们的下一场演出在英国,那么它将回应艺术家的信息等。任何想法如何让它只回应英国的信息,不管他们是否在其他国家/地区之前?

谢谢。

原帖:

我正在为我的最终主要项目创建一个网站。我使用PHP和XML使用Last.fm API检索数据。到目前为止一切顺利,但是我遇到了一些问题。我是PHP的新手,所以我想借此机会培养一些技能。

  1. 我想将数据限制在我的城市或国家/地区。
  2. 如何从XML文档中检索图像?
  3. 使用last.fm API,更具体地说,使用artist.getEvents(http://bit.ly/zYzWo6) - 我可以创建一个基本搜索字段,以便用户可以输入艺术家姓名。这是朝着正确方向迈出的一大步,但问题是,我国以外的任何结果都与我的项目无关。但是,使用artist.getEvents不允许任何特定参数,例如location-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>
    

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

    谢谢,

    克里斯。

3 个答案:

答案 0 :(得分: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/>";
}

答案 1 :(得分:0)

$ smallimg = $ comingth_gig_data_xml-&gt; events-&gt; event-&gt; venue-&gt; image ['small'];

然后你可以使用img html标签回显图像,给它的src值$ smallimg

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

更新

对于第一点,循环遍历xml文件并为国家进行匹配,如果它等于联合王国然后处理所有内容,否则它将跳过它

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

答案 2 :(得分: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…
}

See it running。)