2011-05-30 18 views
6

Estoy tratando de obtener la información educativa de la API gráfica de Facebook usando stdclass. aquí está la matriz:Obteniendo educación con la API Graph de Facebook en PHP

"username": "blah", 
    "education": [ 
     { 
     "school": { 
      "id": "[removed]", 
      "name": "[removed]" 
     }, 
     "year": { 
      "id": "[removed]", 
      "name": "[removed]" 
     }, 
     "type": "High School" 
     }, 
     { 
     "school": { 
      "id": "[removed]", 
      "name": "[removed]" 
     }, 
     "year": { 
      "id": "[removed]", 
      "name": "[removed]" 
     }, 
     "type": "College" 
     } 
    ], 

¿Cómo puedo usar PHP para seleccionar el tipo de "universidad"? Esto es lo que estoy usando para leerlo:

$token_url = "https://graph.facebook.com/oauth/access_token?" 
    . "client_id=[removed]&redirect_uri=[removed]&client_secret=[removed]&code=".$_GET['code'].""; 


$response = file_get_contents($token_url); 


parse_str($response); 

$graph_url = "https://graph.facebook.com/me?access_token=" 
    . $access_token; 


    $user = json_decode(file_get_contents($graph_url)); 

Así que el nombre sería $ usuario-> nombre.

Intenté $ user-> education-> school pero eso no funcionó.

Cualquier ayuda sería apreciada.

Gracias!

+0

'var_dump ($ user)' – zerkms

+0

Facebook Developers Forum tiene algunas personas que recomiendan encarecidamente usar cURL en lugar de 'file_get_contents()' porque algunas personas se quejaron de que distorsionaba un par de caracteres. En este caso, es bastante sencillo, pero es posible que no desee utilizarlo en caso de obtener 'access_token' o tal. – Angad

Respuesta

6

Educación en el documento JSON es una matriz (aviso de que sus artículos están rodeados por []), así que lo que hay que hacer es:

// To get the college info in $college 
$college = null; 
foreach($user->education as $education) { 
    if($education->type == "College") { 
     $college = $education; 
     break; 
    } 
} 

if(empty($college)) { 
    echo "College information was not found!"; 
} else { 
    var_dump($college); 
} 

El resultado sería algo así como:

object(stdClass)[5] 
    public 'school' => 
    object(stdClass)[6] 
     public 'id' => string '[removed]' (length=9) 
     public 'name' => string '[removed]' (length=9) 
    public 'year' => 
    object(stdClass)[7] 
     public 'id' => string '[removed]' (length=9) 
     public 'name' => string '[removed]' (length=9) 
    public 'type' => string 'College' (length=7) 

Un truco más fácil sería usar json_decode con el segundo param establecido en true, lo que obliga a que los resultados sean matrices y no stdClass.

$user = json_decode(file_get_contents($graph_url), true); 

Si vas con matrices, hay que cambiar la universidad foreach recuperación a:

foreach($user["education"] as $education) { 
    if($education["type"] == "College") { 
     $college = $education; 
     break; 
    } 
} 

y el resultado será:

array 
    'school' => 
    array 
     'id' => string '[removed]' (length=9) 
     'name' => string '[removed]' (length=9) 
    'year' => 
    array 
     'id' => string '[removed]' (length=9) 
     'name' => string '[removed]' (length=9) 
    'type' => string 'College' (length=7) 

Aunque ambos son válidos, en mi Opina que debes ir con matrices, son más fáciles y más flexibles para lo que quieres hacer.

+0

¡Perfecto! Muchas gracias. –

Cuestiones relacionadas