gpt4 book ai didi

php - 仅限于使用 PHP 标记的帖子

转载 作者:搜寻专家 更新时间:2023-10-31 20:51:42 35 4
gpt4 key购买 nike

我试图只获取在 tumblr 博客上标记的帖子。我可以根据帖子的类型(常规、链接、照片等)获取每个帖子,但相反,我想获取每个帖子上都有特定的标签。例如,只获取标记为"file"的帖子

到目前为止,这是我的代码:

<?php
$xml = simplexml_load_file('http://stocklamp.tumblr.com/api/read');
$posts = $xml->xpath("/tumblr/posts/post[@type='photo']");
foreach($posts as $post) {

}
?>

<ul>
<li> <a href="<?php echo $post['url-with-slug']; ?>">Post 1(PHP should be here)</a></li>
</ul>

这是 tumblrs API http://www.tumblr.com/docs/en/api/v2

最佳答案

首先,您需要将标记放在属于 foreach 循环的大括号内。否则,您正在引用的 $post 对象的范围将不可用,并且会报错。

这是我想出的:

<ul>
<?php

$xml = simplexml_load_file('http://stocklamp.tumblr.com/api/read');
$posts = $xml->xpath("/tumblr/posts/post/tag/..");
foreach($posts as $post) {
echo "
<li>
<a href='{$post['url-with-slug']}'>".($post->{'regular-title'}?$post->{'regular-title'}:$post->{'link-text'})."</a>
</li>
";
}

?>
</ul>

如果你想限制匹配的标签,你可以这样做:

<ul>
<?php

$xml = simplexml_load_file('http://stocklamp.tumblr.com/api/read');
$posts = $xml->xpath("/tumblr/posts/post/tag[contains(text(),'xml') or contains(text(),'php') or contains(text(),'firefox')]/..");
foreach($posts as $post) {
echo "
<li>
<a href='{$post['url-with-slug']}'>".($post->{'regular-title'}?$post->{'regular-title'}:$post->{'link-text'})."</a>
</li>
";
}

?>
</ul>

当然,这有点乱。我不一定是 XPath 大师,所以应该有比我想象的更简洁的方法。

而且由于我并没有真正挖掘链接文本的三元组,或者我不知道一个或另一个是否总是可用的事实,所以这应该通过 url 的后备更具描述性。

<ul>
<?php

$xml = simplexml_load_file('http://stocklamp.tumblr.com/api/read');
$posts = $xml->xpath("/tumblr/posts/post/tag[contains(text(),'xml') or contains(text(),'php') or contains(text(),'firefox')]/..");
foreach($posts as $post) {
if ($post->{'regular-title'}) {
$slug = $post->{'regular-title'};
} else if ($post->{'link-text'}) {
$slug = $post->{'link-text'};
} else {
$slug = $post['url-with-slug'];
}
echo "
<li>
<a href='{$post['url-with-slug']}'>".$slug."</a>
</li>
";
}

?>
</ul>

编辑

而且,您可能还想匹配 TAG 元素的整个文本,这样就不会匹配 xml-is-for-noobs 之类的内容 当您只需要 xml 标签时。 contains() 将匹配两者,而 below 将仅匹配 xml

/tumblr/posts/post/tag[text() = 'xml']/..

因此,根据您的评论,如果您正在寻找标记为 events 的帖子,但不想捕获像 bowling-events 这样的标签, 可以防止funother events 等...,您可能希望使 text() = 'events' 匹配。另一方面,如果您 DID 想要匹配 TAG 节点文本中的任何内容与 events,请使用 contains(text(), 'events' ) 方法。

编辑 2

如果您想限制结果,请使用 position():

(/tumblr/posts/post/tag[text() = 'xml']/..)[position() <= 3]

请注意,我网页上的示例不包括 text() 匹配,因为没有足够的条目来支持子匹配并仍然有效。但是,这应该有效。

http://jfcoder.com/test/tumblrtest.php

XPath 选择属于 POST 元素的所有 TAG 元素,然后选择该 的父级 (..) TAG,它为您提供一个 SimpleXML 对象,其中包含您要查找的相关 POST 元素。

然后,它遍历每个元素,将 $post 的信息打印到 UL 元素中。

关于php - 仅限于使用 PHP 标记的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6801539/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com