Javascript 为什么可以';我不能从twitter查询中的curl_exec获取xml文件的标记名吗?
我正在使用twitter搜索API,即:Javascript 为什么可以';我不能从twitter查询中的curl_exec获取xml文件的标记名吗?,javascript,dom,namespaces,Javascript,Dom,Namespaces,我正在使用twitter搜索API,即: $search = "http://search.twitter.com/search.atom?q=" . $q . ""; $tw = curl_init(); curl_setopt($tw, CURLOPT_URL, $search); curl_setopt($tw, CURLOPT_RETURNTRANSFER, TRUE); $twi = curl_exec($tw); $tw似乎是一个合法的.xml文件。我将其输出到一个文件中,如下
$search = "http://search.twitter.com/search.atom?q=" . $q . "";
$tw = curl_init();
curl_setopt($tw, CURLOPT_URL, $search);
curl_setopt($tw, CURLOPT_RETURNTRANSFER, TRUE);
$twi = curl_exec($tw);
$tw似乎是一个合法的.xml文件。我将其输出到一个文件中,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns:google="http://base.google.com/ns/1.0" xml:lang="en-US" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns="http://www.w3.org/2005/Atom" xmlns:twitter="http://api.twitter.com/">
<id>tag:search.twitter.com,2005:search/"japan"</id>
<link type="text/html" href="http://search.twitter.com/search?q=%22japan%22" rel="alternate"/>
<link type="application/atom+xml" href="http://search.twitter.com/search.atom?q=%22japan%22" rel="self"/>
<title>"japan" - Twitter Search</title>
<link type="application/opensearchdescription+xml" href="http://search.twitter.com/opensearch.xml" rel="search"/>
<link type="application/atom+xml" href="http://search.twitter.com/search.atom?q=%22japan%22&since_id=53215162768965632" rel="refresh"/>
<twitter:warning>since_id removed for pagination.</twitter:warning>
<updated>2011-03-30T22:00:58Z</updated>
<openSearch:itemsPerPage>15</openSearch:itemsPerPage>
<link type="application/atom+xml" href="http://search.twitter.com/search.atom?max_id=53215162768965632&page=2&q=%22japan%22" rel="next"/>
<entry>
<id>tag:search.twitter.com,2005:53215162768965632</id>
<published>2011-03-30T22:00:58Z</published>
<link type="text/html" href="http://twitter.com/kobe_nowplaying/statuses/53215162768965632" rel="alternate"/>
<title>#NowPlaying "Deora Ar Mo Chroi" by Enya on album "A Day Without Rain (Japan)"</title>
<content type="html"><a href="http://search.twitter.com/search?q=%23NowPlaying" onclick="pageTracker._setCustomVar(2, 'result_type', 'recent', 3);pageTracker._trackPageview('/intra/hashtag/#NowPlaying');">#NowPlaying</a> &quot;Deora Ar Mo Chroi&quot; by Enya on album &quot;A Day Without Rain (<b>Japan</b>)&quot;</content>
<updated>2011-03-30T22:00:58Z</updated>
<link type="image/png" href="http://a1.twimg.com/sticky/default_profile_images/default_profile_0_normal.png" rel="image"/>
<twitter:geo>
</twitter:geo>
<twitter:metadata>
<twitter:result_type>recent</twitter:result_type>
</twitter:metadata>
<twitter:source><a href="http://www.h-fj.com/blog/" rel="nofollow">TWTunes</a></twitter:source>
<twitter:lang>en</twitter:lang>
<author>
<name>kobe_nowplaying (kobe_nowplaying)</name>
<uri>http://twitter.com/kobe_nowplaying</uri>
</author>
</entry>
xmlhttp.onreadystatechange=onResponse;
function onResponse() {
x=xmlhttp.responseXML.documentElement.getElementsByTagName("entry");
}
程序总是挂起在那一行。有什么想法吗?我尝试使用一个简单得多的XML文件,我的代码似乎很好。curl_exec的输出有什么不同吗
谢谢。您是否尝试了没有第一行的相同XML
或者尝试:
x=xmlhttp.responseXML.documentElement.getElementsByTagName("entry")[0]; //I think this will return you first entry
您可能应该等待文档加载: 像这样:
<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns:google="http://base.google.com/ns/1.0" xml:lang="en-US" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns="http://www.w3.org/2005/Atom" xmlns:twitter="http://api.twitter.com/">
<id>tag:search.twitter.com,2005:search/"japan"</id>
<link type="text/html" href="http://search.twitter.com/search?q=%22japan%22" rel="alternate"/>
<link type="application/atom+xml" href="http://search.twitter.com/search.atom?q=%22japan%22" rel="self"/>
<title>"japan" - Twitter Search</title>
<link type="application/opensearchdescription+xml" href="http://search.twitter.com/opensearch.xml" rel="search"/>
<link type="application/atom+xml" href="http://search.twitter.com/search.atom?q=%22japan%22&since_id=53215162768965632" rel="refresh"/>
<twitter:warning>since_id removed for pagination.</twitter:warning>
<updated>2011-03-30T22:00:58Z</updated>
<openSearch:itemsPerPage>15</openSearch:itemsPerPage>
<link type="application/atom+xml" href="http://search.twitter.com/search.atom?max_id=53215162768965632&page=2&q=%22japan%22" rel="next"/>
<entry>
<id>tag:search.twitter.com,2005:53215162768965632</id>
<published>2011-03-30T22:00:58Z</published>
<link type="text/html" href="http://twitter.com/kobe_nowplaying/statuses/53215162768965632" rel="alternate"/>
<title>#NowPlaying "Deora Ar Mo Chroi" by Enya on album "A Day Without Rain (Japan)"</title>
<content type="html"><a href="http://search.twitter.com/search?q=%23NowPlaying" onclick="pageTracker._setCustomVar(2, 'result_type', 'recent', 3);pageTracker._trackPageview('/intra/hashtag/#NowPlaying');">#NowPlaying</a> &quot;Deora Ar Mo Chroi&quot; by Enya on album &quot;A Day Without Rain (<b>Japan</b>)&quot;</content>
<updated>2011-03-30T22:00:58Z</updated>
<link type="image/png" href="http://a1.twimg.com/sticky/default_profile_images/default_profile_0_normal.png" rel="image"/>
<twitter:geo>
</twitter:geo>
<twitter:metadata>
<twitter:result_type>recent</twitter:result_type>
</twitter:metadata>
<twitter:source><a href="http://www.h-fj.com/blog/" rel="nofollow">TWTunes</a></twitter:source>
<twitter:lang>en</twitter:lang>
<author>
<name>kobe_nowplaying (kobe_nowplaying)</name>
<uri>http://twitter.com/kobe_nowplaying</uri>
</author>
</entry>
xmlhttp.onreadystatechange=onResponse;
function onResponse() {
x=xmlhttp.responseXML.documentElement.getElementsByTagName("entry");
}
为什么不通过AJAX使用PHP和echo输出解析XML?@webarto:我认为在原始代码中,作者就是这样做的,但我遇到了一些其他错误,因此我想从基础开始。我使用的教程就是从这里开始的:在那里,他创建了一个新的SimpleXMLElement,然后是一些preg_替换,然后是一些strip标记,并执行了foreach循环,但我遇到了错误,因为我无法调试该php文件,所以我更喜欢只输出XML并解析结果。我可以使用web inspector调试JS文件。好的,我复制了我的脚本,所以你可以看到基本内容。我刚刚尝试了,但它仍然返回我错误:Uncaught TypeError:无法读取null的属性“documentElement”。谢谢。我发现我的XML文件已损坏。我试过你的代码,它也能工作,谢谢你。但是,当它是日文字符时,输出结果不是日文字符,而是&123等等……Yko,只需替换
htmlentities($atom[“title”][$i],entu QUOTES)代码>与$atom[“title”][$i]代码>,在循环的中。
$search = "webarto";
$feed = curl("http://search.twitter.com/search.atom?q=$search");
$tags = array("title", "name", "uri", "published");
foreach($tags as $tag){
$atom["$tag"] = matchTags("$tag", $feed);
}
unset($atom["title"][0]);
$atom["title"] = array_values($atom["title"]);
for($i = 0; $i < count($atom["title"]); $i++){
$atom["title"][$i] = htmlentities($atom["title"][$i], ENT_QUOTES);
$atom["title"][$i] = preg_replace("/http\:\/\/(.*?)\s/",'<a rel="nofollow" target="_blank" href="http://\\1">http://\\1</a> ',$atom["title"][$i]);
$atom["published"][$i] = date("d.m.Y", strtotime($atom["published"][$i]));
echo('<li><a rel="nofollow" target="_blank" href="'.$atom["uri"][$i].'">'.$atom["title"][$i].' ('.$atom["published"][$i].')</a></li>');
}
function matchTags($tag, $xml){
preg_match_all("#\<$tag\>(.*?)\<\/$tag\>#is", $xml, $bingo);
return $bingo[1];
}
function curl($url){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_close ($ch);
return curl_exec($ch);
}
# test #stackoverflow (01.04.2011)