重写脚本以使用wp_Remote_Get代替FILE_GET_CONTENTS_cURL

时间:2013-09-20 作者:ndru

我有一个脚本,可以通过facebook图提取facebook喜欢的内容,并将其写入我的数据库。但是,它对请求使用file\\u get\\u contents\\u curl,这会导致问题,因此我想使用wp\\u remote\\u get()命令。我试图改变它,但不知何故我做不到(我真的没有PHP知识)。

以下是脚本的一部分:

foreach($posts as $post)
    {

        $fb = json_decode(file_get_contents_curl(\'http://graph.facebook.com/?id=\'.get_permalink($post->ID)));
        if( !isset( $fb->likes) && isset($fb->shares) )
        {
            $fb->likes = $fb->shares;
        }
        //$fb->likes = isset($fb->likes) ? $fb->likes : 0;
        $myfblikes = sprintf("%04s", (int)$fb->likes);
        update_post_meta($post->ID, \'fb_likes\', $myfblikes);
    }

4 个回复
最合适的回答,由SO网友:birgire 整理而成

你可以试试这个:

foreach( $posts as $post )
{
    $url      = sprintf( \'http://graph.facebook.com/?id=%s\', get_permalink( $post->ID ) );
    $response = wp_remote_get( $url,  array( \'timeout\' => 15 ) );


    if( ! is_wp_error( $response ) 
        && isset( $response[\'response\'][\'code\'] )        
        && 200 === $response[\'response\'][\'code\'] )
    {
        $body = wp_remote_retrieve_body( $response );
        $fb   = json_decode( $body );

        if( ! isset( $fb->likes ) && isset( $fb->shares ) )
        {
            $fb->likes = $fb->shares;
        }

        if( isset( $fb->likes ) )
        {
            $myfblikes = sprintf( \'%04s\', (int) $fb->likes );
            update_post_meta( $post->ID, \'fb_likes\', $myfblikes );
       }
    }
}
我们可以使用的地方wp_remote_retrieve_body() 获取的响应主体wp_remote_get().

SO网友:Max Yudin

wp_remote_get 返回数组,而不是字符串。所以

foreach($posts as $post) {

    // get remote document as JSON
    $json = wp_remote_get( \'http://graph.facebook.com/?id=\' . get_permalink($post->ID) );

    // check for WP_Error
    if(is_wp_error($json))
        return false;

    // Decode JSON and get document body as associative array
    $fbData = json_decode($json[\'body\'], true);

    // return (numeric) array value
    return intval($fbData[\'likes\']);
}
我不确定get_permalink($post->ID) 部分只有在每个帖子都有FB页面的情况下才可以。

SO网友:cybmeta

只需将一个函数更改为另一个函数。这还需要改变您使用的方式json_decode() 因为wp_remote_get() 返回数组和json_decode() 需要字符串。

foreach($posts as $post) {

    $fb = wp_remote_get( \'http://graph.facebook.com/?id=\' . get_permalink( $post->ID ) );

    if( ! is_wp_error( $fb ) ) {

        $body = json_decode( wp_remote_retrieve_body( $fb ) );

        if( ! isset( $body->likes) && isset( $body->shares ) ) {
            $body->likes = $body->shares;
        }

        $myfblikes = sprintf( "%04s", (int) $body->likes );
        update_post_meta( $post->ID, \'fb_likes\', $myfblikes );
    }
}

SO网友:Khadka Pushpendra

这解决了我的问题,试试这个

 $response = wp_remote_get( \'http://www.example.com/index.html\' );
if( is_array($response) ) {
  $header = $response[\'headers\']; // array of http header lines
  $body = $response[\'body\']; // use the content
}
echo $body; // to print content

结束

相关推荐