PHP Twitter API 无法抓取 georss:point 并存储为变量?



我对API很陌生,就像今天一样。我已经学会了如何简单地调用twitter api xml数据并从帖子中提取某些东西。我的问题是,虽然我似乎无法弄清楚如何在Twitter API中拉出地理或坐标并显示它或将其存储为变量。

<html>
<?php
$xmldata = 'http://twitter.com/statuses/user_timeline/allencoded.xml';
$open = fopen($xmldata, 'r');
$content = stream_get_contents($open);
fclose($open);
$xml = new SimpleXMLElement($content);
?>
<?php 
$geo = $xml->status[0]->coordinates->georss:point; //<---PROBLEM POINT!!!!
?>
<body>
<table>
<tr>
<td><img src="<? echo $xml->status[0]->user->profile_image_url; ?>" /></td>
<td>
<? echo $xml->status[0]->text; ?> at <? echo $xml->status[0]->created_at; ?> by <? echo $xml->status[0]->user->name; ?> 
</td>
<td>
GEO IS AT:<? echo $geo; ?>
</td>
</tr>
</table>
</body>
</html>

当我运行代码时,我得到:解析错误:语法错误,意外':'在C:inetpubvhostsallencoded.comhttpdocstwitter.php第11行

当我删除第11行的代码时,一切都正常了。

当处理带有名称空间的元素(如namespace_name:element_name)时,您需要告诉SimpleXML加载该名称空间的元素(默认是加载没有名称空间的元素)。为此,使用SimpleXMLElement::children() (docs)。

$xml = simplexml_load_file('http://twitter.com/statuses/user_timeline/allencoded.xml');
$geo = (string) $xml->status->geo->children('georss', true)->point;
echo $geo;

键行的第一个块$xml->status->geo获得第一个状态元素的第一个geo元素。然后,我们请求属于georss名称空间的子元素(因此,任何georss:…元素),然后指定我们想要(第一个,唯一的)point

我不认为PHP会逐字解析XML。虽然georss:point是XML树中的一个有效节点,但该语法对PHP来说另有含义。试着在$xml->status[0]->coordinates值上做一个print_r(),看看它说的属性是什么。

最新更新