J'ai un script qui extrait les goûts de Facebook via un graphique facebook et les écrit dans ma base de données. Cependant, il utilise file_get_contents_curl pour la demande et cela pose des problèmes, aussi j'aimerais utiliser la commande wp_remote_get (). J'ai essayé de le changer mais d'une manière ou d'une autre, je ne peux pas le faire (je n'ai pas vraiment de connaissances PHP).
Voici la partie du 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);
}
Vous pouvez essayer ceci:
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 );
}
}
}
où nous pouvons utiliser wp_remote_retrieve_body()
pour obtenir le corps de réponse de wp_remote_get()
.
wp_remote_get
renvoie un tableau, pas une chaîne. Alors,
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']);
}
Je ne suis pas sûr de la fonction get_permalink($post->ID)
. Ce n'est correct que si vous avez une page FB pour chaque poste.
Ceci a résolu mon problème, essayez ceci
$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
Il suffit de changer une fonction avec l'autre. Cela nécessite également de changer votre façon d'utiliser json_decode()
car wp_remote_get()
renvoie un tableau et json_decode()
nécessite une chaîne.
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 );
}
}