ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

限制为仅使用PHP标记的帖子

2019-12-08 05:29:48  阅读:253  来源: 互联网

标签:api xpath simplexml php tumblr


我试图只获得在tumblr博客上标记的帖子.我可以根据帖子的类型(常规,链接,照片等)来获取每个帖子,但我想获取每个带有特定标签的帖子.例如,仅获取标记为“文件”的帖子

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

<?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专家,所以应该有一种比我想象的更干净的方法.

而且由于我并不是真的在研究链接文本的三元数,或者我不知道一个或另一个是否总是可用,所以这应该是更具描述性的,并使用备用网址.

<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标签时,就不会在xml-is-for-noobs之类的内容上获得匹配. contains()将同时匹配两者,而以下仅匹配xml.

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

因此,根据您的评论,如果您要查找带有标记事件的帖子,但又不想捕获诸如保龄球事件,阻止娱乐,其他事件等之类的标记,则希望使text()= “赛事”比赛.另一方面,如果DID想要使任何内容与TAG节点文本中的事件匹配,请使用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元素中.

标签:api,xpath,simplexml,php,tumblr
来源: https://codeday.me/bug/20191208/2089183.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有