Получение образования с Facebook Graph API в PHP - PullRequest
6 голосов
/ 30 мая 2011

Я пытаюсь получить информацию об образовании из API графа Facebook, используя stdclass.вот массив:

 "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"
      }
   ],

Как я могу использовать PHP, чтобы выбрать тот с типом "колледж"?Вот что я использую, чтобы прочитать это:

 $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));

Так что имя будет $ user-> name.

Я пробовал $ user-> education-> school, но это не такt работа.

Любая помощь будет оценена.

Спасибо!

1 Ответ

6 голосов
/ 30 мая 2011

Образование в вашем документе JSON представляет собой массив (обратите внимание, что его элементы окружены [] ), поэтому вам нужно сделать следующее:

// 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);
}

Результат будет примерно таким:

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)

Более простой прием - использовать json_decode со вторым параметром, установленным в true, что приводит к тому, что результаты будут массивами, а не stdClass.

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

Если вы используете массивы, вы должны изменить foreach для поиска в колледже на:

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

и результат будет:

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)

Хотя оба они действительны, по моему мнению, вам следует использовать массивы, они проще и более гибки для того, что вы хотите сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...