我是API的新手,就像今天的新手一样。我已经学会了如何简单地调用twitter api xml数据并从帖子中删除某些内容。我的问题是,我似乎无法弄清楚如何在Twitter API中拉出Geo或Coordinates并显示它或将其存储为变量。
<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>
当我运行代码时,我得到: 解析错误:语法错误,第11行的C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ twitter.php中的意外':'
当我删除第11行的代码时,一切正常。
答案 0 :(得分:2)
在处理命名空间元素(如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
的第一个块获取第一个status元素的第一个geo
元素。然后我们要求属于georss
命名空间的孩子(所以,任何georss:…
个元素),然后指定我们想要(仅限第一个)point
。
答案 1 :(得分:1)
我认为PHP不会逐字解析XML。虽然georss:point
是XML树中的有效节点,但该语法对PHP来说意味着什么。尝试对print_r()
值执行$xml->status[0]->coordinates
,看看它的属性是什么。