我使用atom2rss.xsl将原子供稿转换为RSS。工作良好。
然后,我使用DOMDocument尝试获取帖子标题和URL:
$feed = new DOMDocument();
$feed->loadHTML('<?xml encoding="utf-8" ?>' . $html);
if (!empty($feed) && is_object($feed) ) {
foreach ($feed->getElementsByTagName("item") as $item){
echo 'url: '. $item->getElementsByTagName("link")->item(0)->nodeValue;
echo 'title'. $item->getElementsByTagName("title")->item(0)->nodeValue;
}
return;
}
但是帖子网址为空。
请参阅此eval which contains HTML。我究竟做错了什么?我怀疑我无法通过$item->getElementsByTagName("link")->item(0)->nodeValue
正确获取链接标记。
答案 0 :(得分:2)
我认为问题在于,每个项目中都有几个<link>
元素,而您感兴趣的一个(我认为)是一个以rel="self"
作为属性的元素。最快的方法(不弄乱XPath)是遍历每个<link>
元素,检查正确的rel
值,然后从中获取href
属性...
if (!empty($feed) && is_object($feed) ) {
foreach ($feed->getElementsByTagName("item") as $item){
$url = "";
// Look for the 'right' link tag and extract URL from that
foreach ( $item->getElementsByTagName("link") as $link ) {
if ( $link->getAttribute("rel") == "self" ) {
$url = $link->getAttribute("href");
break;
}
}
echo 'url: '. $url;
echo 'title'. $item->getElementsByTagName("title")->item(0)->nodeValue;
}
return;
}
这给...
url: https://www.blogger.com/feeds/2984353310628523257/posts/default/1947782625877709813titleExtraordinary Genius - Cp274
答案 1 :(得分:0)
function get_links($link)
{
$ret = array();
$dom = new DOMDocument();
@$dom->loadHTML(file_get_contents($link));
$dom->preserveWhiteSpace = false;
$links = $dom->getElementsByTagName('a');
foreach ($links as $tag){
$ret[$tag->getAttribute('href')] = $tag->childNodes->item(0)->nodeValue;
}
return $ret;
}
print_r(get_links('http://www.google.com'));
或者您可以使用DOMXpath
$html = file_get_contents('http://www.google.com');
$dom = new DOMDocument();
@$dom->loadHTML($html);
// take all links
$xpath = new DOMXPath($dom);
$hrefs = $xpath->evaluate("/html/body//a");
for ($i = 0; $i < $hrefs->length; $i++) {
$href = $hrefs->item($i);
$url = $href->getAttribute('href');
echo $url.'
';