我有一个脚本,可以通过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);
}
最合适的回答,由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网友: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 );
}
}