Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

Je récupère pas mal de données via le Facebook Graph API. Cependant, je n'arrive pas à récupérer le champ emails. Dans la documentation, il indique que c'est un list string au lieu d'un string dans tous les autres champs. Ceci est consultable sur la documentation officielle.

$app_id = 'xxx';
    $app_secret = 'xxx';
    $non_update = get_custom_field('non_update');
    // Get data from API
    if (!empty(get_custom_field('facebook_update'))) {
        $json_object_id = fetchUrl("https://graph.facebook.com/v2.5/".get_custom_field('facebook_update')."?access_token=".$app_id."|".$app_secret);
    }else if(!empty(get_custom_field('facebook'))){
        $json_object_id = fetchUrl("https://graph.facebook.com/v2.5/".get_custom_field('facebook')."?access_token=".$app_id."|".$app_secret);
    }
    $array_id = json_decode($json_object_id);
    $json_object = fetchUrl("https://graph.facebook.com/v2.5/".$array_id->id."?fields=link%2Cbio%2Cevents%2Cpress_contact%2Cbooking_agent%2Cemails%2Cgeneral_manager%2Cband_members%2Ccurrent_location%2Cwebsite&access_token=".$app_id."|".$app_secret);
    $array_data = json_decode($json_object)
    // Contact
    if ((!empty($array_data->general_manager) || !empty($array_data->booking_agent) || !empty($array_data->press_contact) || !empty($array_data->emails)) && in_array('contact', $non_update)==false ) {
         $contact = '';
         if (!empty($array_data->general_manager)) {
            $contact .= 'Directeur géneral: '.$array_data->general_manager.' ';
        }
        if (!empty($array_data->booking_agent)) {
            $contact .= 'Agent artistique: '.$array_data->booking_agent.' ';
        }
        if (!empty($array_data->press_contact)) {
            $contact .= 'Contact presse: '.$array_data->press_contact.' ';
        }
        if (!empty($array_data->emails)) {
            $contact .= 'Email: '.$array_data->emails.' ';
        } 
        if ($contact!=get_custom_field('contact')) {
            update_post_meta($post_id, 'contact', $contact );
        }
    }

Ce que je veux

Récupérer le champs "emails"

Ce que j'obtiens

Quand je récupère le champs emails, ca me renvoie "array". J'ai vérifier via l'Explorateur de l'API Graph. Je n'ai pas de code d'erreur. Ca m'affiche array uniquement quand la Page a bien ce champ de rempli (ce que j'avais demandé). Je n'ai aucun problème avec mes autres champs

6 réponses


keulu
Réponse acceptée

parce que la valeur retournée par emails est surement un tableau contenant des emails...

fait un var_dump($array_data->emails) tu vera bien ce que ca te ressort...

il existe ensuite des methodes php pour récupérer le premier element current($array), ou le dernier end($array) ou concatener le tableau en string array_implode(). regarde les docs php ;)

Granchy
Auteur

Merci keulu. J'avais déjà testé var_dump mais ca me retournerait "array". Par contre, en utilisant current($array) comme tu me l'as suggéré, il me retourne bien une valeur du tableau. Mon problème est donc résolu

fait gaffe, parce que si facebook te présente ca sour forme de liste, ca veux dire que tu peux avoir potentiellement plusieurs email dans ce champ....

Granchy
Auteur

Oui effectivement, après, j'ai encore jamais vu plusieurs emails dans ce champ. Mais cela dit, avec un seul mail j'ai tout ce qu'il me faut.

oui oui mais si je te dit ca, c'est que dans 2 ans, tes infos seront peut être fausses, car l'utilisateur aura peut ete MAJ ses infos facebook (et surtout son email dans ce cas) donc, l'email courant de l'utilisateur ne sera pas forcement le premier du tableau (facebook te renvoit peut etre la liste de tous ses emails connus...).

Je sais pas comment gère facebook pour ca. faudrait que tu teste avec ton compte en donnant un nouveau mail, voir ou il est dans le tableau. premiere position ? derniere ?

Granchy
Auteur

Je récupère le mail d'une Page et non d'un profil personnel. Actuellement, il n'est pas possible de mettre deux adresses mails dans ce champ. J'imagine que Facebook compte un jour donner la possibilité d'en mettre plusieurs (ou alors qu'avant c'était possible). Mais je resterai effectivement vigilent si un moment je vois que ca me retourne plus ce que je veux...