I have a script that pulls the facebook likes via facebook graph and writes them in my DB. However it uses file_get_contents_curl for the request and this is causing problems, so I’d like to use the wp_remote_get() command. I’ve tried to change it but somehow I can’t do it (I don’t really have PHP knowledge).
Here’s the part of the script:
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 Answers
You can try this:
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 );
}
}
}
where we can use wp_remote_retrieve_body()
to get the response body of wp_remote_get()
.