繁体   English   中英

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

[英]Filtering specific data from XML using PHP (Last.fm) UPDATE

更新:

感谢Rambo的出色回答。 我现在唯一的问题是,只要艺术家的下一场演出在英国,它就只显示艺术家信息。 例如,如果他们在法国,然后在英国,则不会显示任何内容(或者将显示我的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>

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

谢谢,

克里斯。

您的第二个问题:使用简单的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/>";
}

$ smallimg = $ upcoming_gig_data_xml->事件->事件->场地->图像['small'];

那么您可以使用img html标签将图像回显,使src的值为$ smallimg

我尚未对此进行测试,但希望它能为您指明正确的方向

更新

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

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

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

看到它正在运行 。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM