如何在WordPress中消费和显示来自其他网站的外部数据

时间:2016-10-07 作者:Madeirense

我正在尝试访问另一个网站的数据,以显示在我正在开发的WordPress网站上。到目前为止,我有以下几点:

<?php
    /*
       Template Name: Testing remote data
    */

get_header(); 

<div class="main">
    <div class="col-sm-12">
      <header>
          <h2>Testing remote data</h2>
      </header>
    </div>
    <div class="container">
        <div id="content" role="main">
            <div class="col-sm-12">
                <?php
                    $url = \'http://www.bbc.co.uk/news/\';// this url is only for example purposes
                    $request = wp_remote_get( $url );

                    if(is_wp_error($request)) {
                        return false;
                    } else {
                        $body = $request[\'body\'];
                    }

                    echo $body;

            </div>
         </div>
     </div>
 </div>
这很好用。然而,我得到了整个身体的内容。我该如何获取身体的特定部分?如果有人能帮我,我会非常感激。很抱歉,如果这是一个明显的问题,但我是WordPress的新手,我仍然对它感到不舒服。

2 个回复
SO网友:Shivanand Sharma
// make request... (optionally save in transient for faster future fetches)
$dom = new DOMDocument();
$dom->loadHTML(wp_remote_retrieve_body($request));
$sections=$dom->getElementsByTagName("section");
foreach ($sections as $section) {
    // Do something...
    }
SO网友:Aishan

您可以通过RSS提要访问其他网站的数据。您可以在以下url中查看bbc新闻的RSS提要
http://news.bbc.co.uk/2/hi/help/rss/default.stm

然后,您可以使用transient将其feed合并到站点中,以便设置适当的时间来获取新数据。使用DOMDocument元素可以获得值/数据

下面是一个示例函数,我在其中准备了一个函数来获取您的RSS提要url。

function vp_get_rss_feed($feed_url) {
    $expires = 7200; // 2hours

    delete_transient( \'rss_bbc_feed_world\' );
    $feed = get_transient( \'rss_bbc_feed_world\' );
    if ( false === ( $rss = $feed ) ) :
        $rss = new DOMDocument();
        $rss->load($feed_url);

        $feed = array();
        $i=1;
        foreach ($rss->getElementsByTagName(\'item\') as $node) {

            $link = $node->getElementsByTagName(\'link\')->item(0)->nodeValue;
            $title = $node->getElementsByTagName(\'title\')->item(0)->nodeValue;
            $slug = sanitize_title($title);
            $desc = $node->getElementsByTagName(\'description\')->item(0)->nodeValue;


            $item[$slug] = array (
                            \'title\' => $title,
                            \'slug\' => $slug,
                            \'desc\' => $desc,
                            \'date\' => $node->getElementsByTagName(\'pubDate\')->item(0)->nodeValue,
                        );

        }
        array_push( $feed, $item );
        set_transient( \'rss_bbc_feed_world\', $feed, $expires );
    endif;
    return $feed;
}
此函数用于获取RSS提要并将其存储在一个数组中,然后返回该数组($feed)

然后,您可以在desire位置的$feed中循环,到您希望以desire html样式显示RSS提要数据的位置。

供参考:
https://codex.wordpress.org/Transients_API
http://php.net/manual/en/class.domdocument.php

希望有帮助!!

相关推荐

How deactivate the http-api

为它提供一个tipp或解决方案来停用WP\\U Http\\U Streams类中的方法request()?我也在脱机服务器上使用WordPress,并让wp\\U debug true用于开发和测试。但是我从函数中得到了很多关于使用http类的警告;例如,在仪表板中读取提要的函数。目前我已经停用了更新主题、插件、核心和cron的所有挂钩;请参阅我的小插件:https://github.com/bueltge/WP-Offline谢谢你的回复