web-dev-qa-db-fra.com

script de réécriture pour utiliser wp_remote_get au lieu de file_get_contents_curl

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);
    }
3
ndru

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().

5
birgire

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.

1
Max Yudin

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
0
Khadka Pushpendra

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 );
    }
}
0
cybmeta