массивы — парсинг ответа PHP API Facebook — обновлено / переработано 05/02/2015

Мой массив;

{
"bio": "Testing Facebook Bio -> Stupidly forgot to set whilst trying to fetch this information testing my latest Facebook App!",
"movies": {
"data": [
{
"name": "Night At The Museum",
"id": "251922028320619"},
{
"name": "Little Nicky",
"id": "112378985439799"},
{
"genre": "Action / Adventure / Comedy / Family / Sci-Fi",
"name": "Back to the Future Trilogy",
"id": "141545972523915"},
{
"genre": "Stupid",
"name": "Jackass",
"id": "21295715752"},
{
"genre": "Comedy",
"name": "Mrs. Brown's Boys D'Movie",
"id": "217475368404328"},
{
"genre": "Animation, Family",
"name": "Madagascar",
"id": "149800431712088"},
{
"genre": "Animation",
"name": "Frozen",
"id": "482368755113431"},
{
"genre": "Animation",
"name": "Toy Story",
"id": "10498014129"},
{
"genre": "This is a gritty drama that develops into an uplifting story of triumph over adversity. It should appeal to a wide audience,  both male and female.",
"name": "Breaking Free  Film",
"id": "135991503231501"},
{
"genre": "Animation",
"name": "The Lion King",
"id": "12393266550"},
{
"genre": "Animation | Comedy | Family ",
"name": "Despicable Me",
"id": "117067844993952"},
{
"genre": "Action / Adventure",
"name": "Thor",
"id": "113589202010624"},
{
"name": "Scooby-Doo: The Movie",
"id": "306089742863765"},
{
"genre": "Action / fairy tale",
"name": "Hansel & Gretel: Witch Hunters",
"id": "271965656164363"},
{
"name": "Harry Potter",
"id": "156794164312"},
{
"name": "Star Wars",
"id": "216676368377759"},
{
"name": "Minion",
"id": "136787429687873"},
{
"name": "Night at the Museum 2",
"id": "115126478502712"},
{
"genre": "Animation, Holiday, Family",
"name": "The Nightmare Before Christmas",
"id": "173587329354820"},
{
"name": "Pacific Rim",
"id": "439835889373123"},
{
"genre": "Action Adventure",
"name": "Oblivion UK",
"id": "235958443193536"},
{
"genre": "Animation, Family",
"name": "Shrek",
"id": "355374000182"},
{
"name": "Scooby Doo: The Movie",
"id": "106352129401640"},
{
"genre": "Epic Action-Adventure",
"name": "Dracula Untold",
"id": "332230740134829"},
{
"name": "Simba",
"id": "27665751322"}
],
"paging": {
"next": "https://graph.facebook.com/v2.2/663878750359892/movies?fields=genre,name&limit=25&offset=25&__after_id=enc_AezyAtvaN1UtcaRwF9kgU5Z5PIv07LU_3Wli-CRCkYEol9BoJJtn86fNGT4v-XsnG-o"}
},
"id": "663878750359892"}

Я знаю, как получить «био» из моего массива, однако в Интернете довольно много способов передачи информации первого уровня из массива API Facebook;

$FB_About_Bio = $graph->getProperty('bio');

Однако, когда речь заходит о призыве к «кино»;

$FB_About_Movies = $graph->getProperty('movies');

Это производит сам массив, я считаю, что я не знаю, как сделать цикл, чтобы перечислить все названия фильмов, например

Как бы я получить все названия фильмов?

Полный сценарий:

<?php

/* INCLUSION OF LIBRARY FILEs*/
require_once( 'lib/Facebook/FacebookSession.php');
require_once( 'lib/Facebook/FacebookRequest.php' );
require_once( 'lib/Facebook/FacebookResponse.php' );
require_once( 'lib/Facebook/FacebookSDKException.php' );
require_once( 'lib/Facebook/FacebookRequestException.php' );
require_once( 'lib/Facebook/FacebookRedirectLoginHelper.php');
require_once( 'lib/Facebook/FacebookAuthorizationException.php' );
require_once( 'lib/Facebook/GraphObject.php' );
require_once( 'lib/Facebook/GraphUser.php' );
require_once( 'lib/Facebook/GraphSessionInfo.php' );
require_once( 'lib/Facebook/Entities/AccessToken.php');
require_once( 'lib/Facebook/HttpClients/FacebookCurl.php' );
require_once( 'lib/Facebook/HttpClients/FacebookHttpable.php');
require_once( 'lib/Facebook/HttpClients/FacebookCurlHttpClient.php');

/* USE NAMESPACES */
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\GraphUser;
use Facebook\GraphSessionInfo;
use Facebook\FacebookHttpable;
use Facebook\FacebookCurlHttpClient;
use Facebook\FacebookCurl;

/*PROCESS*/

//1.Stat Session
session_start();

//2.Use app id,secret and redirect url
$app_id = '000000000000000';
$app_secret = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$redirect_url='http://rafflebananza.com/Desktop/facebook.php';

//3.Initialize application, create helper object and get fb sess
FacebookSession::setDefaultApplication($app_id,$app_secret);
$helper = new FacebookRedirectLoginHelper($redirect_url);
$sess = $helper->getSessionFromRedirect();

//4. if fb sess exists echo name
if(isset($sess)){

//store the token in the php session
$_SESSION['fb_token']=$sess->getToken();

//create request object,execute and capture response
$request = new FacebookRequest($sess,'GET','/me');

// from response get graph object
$response = $request->execute();
$graph = $response->getGraphObject(GraphUser::classname());

// use graph object methods to get user details
$FB_id = $graph->getId();
$FB_First_Name = $graph->getProperty('first_name');
$FB_Middle_Name = $graph->getProperty('middle_name');
$FB_Last_Name = $graph->getProperty('last_name');
$FB_About_Bio = $graph->getProperty('bio');
$FB_image = 'https://graph.facebook.com/'.$id.'/picture?width=300';
$FB_email = $graph->getProperty('email');

$graphArray = $graph->asArray();
$movies = $graphArray['movies']['data'];
foreach ($movies as $movie) {
$name = $movie['name'];
}

// Echo Info To Page:
echo '<h1>'.$name.'</h1>';
echo '<table><tr><td><strong>First Name:</strong></td><td><input type="text" value="'.$FB_First_Name.'"></input></td></tr>';
echo "<tr><td><strong>Middle Name: </strong></td><td>$FB_Middle_Name</td></tr>";
echo "<tr><td><strong>Last Name: </strong></td><td>$FB_Last_Name <br</td></tr>";
echo "<tr><td><strong>E-Mail Address:</strong></td><td>$FB_email</td></tr>";
echo "<tr><td><strong>About You:</strong></td><td>$FB_About_Bio</td></tr></table>";
echo "<img src='FB_$image' /><br><br>";

// Logout Button
echo "<a href='".$logout."'><button>Logout</button></a>";}else{
//else echo login
echo '<a href="'.$helper->getLoginUrl(array('email')).'" >Login with facebook</a>';
}

Обновить

user9418 спросил на Stackoverflow «Как разобрать ответ API api» а также бхушья ответ дал некоторое представление о том, как это должно быть сделано. Ниже мой последний прогресс, тогда как ранее я не получал никаких данных;

Новый фрагмент кода;

$user_profile = (new FacebookRequest(
$sess, 'GET', '/me/movies'
))->execute()->getGraphObject();
$movies =  $user_profile->getProperty('data');

$movies_data = $movies->asArray();//this will do all job for you..
foreach($movies_data as $row){
var_dump($row);
}

Результат:

object (stdClass) # 28 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (19) «Ночь в музее» [«creation_time»] => string (24)
«2014-12-16T23: 05: 57 + 0000» [«id»] => string (15) «251922028320619»}
object (stdClass) # 29 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (12) «Маленький Ники» [«made_time»] => string (24)
«2014-12-14T02: 35: 10 + 0000» [«id»] => string (15) «112378985439799»}
object (stdClass) # 30 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (26) «Трилогия« Назад в будущее »» [«creation_time»] => string (24)
«2014-10-06T04: 12: 32 + 0000» [«id»] => string (15) «141545972523915»}
object (stdClass) # 31 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (7) «Jackass» [«made_time»] => string (24)
«2014-08-23T21: 51: 24 + 0000» [«id»] => string (11) «21295715752»}
object (stdClass) # 32 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (25) «Mrs. Brown’s Boys D’Movie» [«creation_time»] => string (24)
«2014-08-06T10: 16: 10 + 0000» [«id»] => string (15) «217475368404328»}
object (stdClass) # 33 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (10) «Мадагаскар» [«made_time»] => string (24)
«2014-07-09T22: 16: 05 + 0000» [«id»] => string (15) «149800431712088»}
object (stdClass) # 34 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (6) «Frozen» [«made_time»] => string (24)
«2014-05-27T20: 47: 31 + 0000» [«id»] => string (15) «482368755113431»}
object (stdClass) # 35 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (9) «История игрушек» [«creation_time»] => string (24)
«2014-04-15T01: 39: 17 + 0000» [«id»] => string (11) «10498014129»}
object (stdClass) # 36 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (19) «Breaking Free Film» [«creation_time»] => string (24)
«2014-02-20T14: 16: 06 + 0000» [«id»] => string (15) «135991503231501»}
object (stdClass) # 37 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (13) «Король Лев» [«creation_time»] => string (24)
«2014-02-19T08: 32: 34 + 0000» [«id»] => string (11) «12393266550»}
object (stdClass) # 38 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (13) «Гадкий я» [«creation_time»] => string (24)
«2014-02-19T08: 32: 29 + 0000» [«id»] => string (15) «117067844993952»}
object (stdClass) # 39 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (4) «Thor» [«creation_time»] => string (24)
«2013-11-29T02: 22: 14 + 0000» [«id»] => string (15) «113589202010624»}
object (stdClass) # 40 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (21) «Скуби-Ду: фильм» [«made_time»] => string (24)
«2013-10-17T13: 41: 51 + 0000» [«id»] => string (15) «306089742863765»}
object (stdClass) # 41 (4) {[«category»] => string (5) «Movie» [«name»] =>
Строка (30) «Гензель» & Гретель: Охотники на ведьм «[» creation_time «] =>
string (24) «2013-10-15T21: 22: 05 + 0000» [«id»] => string (15)
«271965656164363»} объект (stdClass) # 42 (4) {[«category»] => string (5)
«Movie» [«name»] => string (12) «Harry Potter» [«creation_time»] =>
string (24) «2013-10-09T21: 29: 08 + 0000» [«id»] => string (12)
«156794164312»} объект (stdClass) # 43 (4) {[«категория»] => строка (5)
«Movie» [«name»] => строка (9) «Звездные войны» [«made_time»] => строка (24)
«2013-08-30T20: 12: 14 + 0000» [«id»] => string (15) «216676368377759»}
object (stdClass) # 44 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (6) «Миньон» [«made_time»] => string (24)
«2013-07-22T12: 25: 27 + 0000» [«id»] => string (15) «136787429687873»}
object (stdClass) # 45 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (21) «Ночь в музее 2» [«creation_time»] => string (24)
«2013-06-14T01: 18: 02 + 0000» [«id»] => string (15) «115126478502712»}
object (stdClass) # 46 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (30) «Кошмар перед Рождеством» [«creation_time»] =>
string (24) «2013-06-08T11: 11: 36 + 0000» [«id»] => string (15)
«173587329354820»} объект (stdClass) # 47 (4) {[«категория»] => строка (5)
«Movie» [«name»] => string (11) «Pacific Rim» [«creation_time»] =>
string (24) «2013-05-16T19: 30: 24 + 0000» [«id»] => string (15)
«439835889373123»} object (stdClass) # 48 (4) {[«category»] => string (5)
«Movie» [«name»] => string (11) «Oblivion UK» [«creation_time»] =>
string (24) «2013-02-14T23: 02: 31 + 0000» [«id»] => string (15)
«235958443193536»} object (stdClass) # 49 (4) {[«category»] => string (5)
«Movie» [«name»] => string (5) «Shrek» [«creation_time»] => string (24)
«2012-10-03T07: 01: 57 + 0000» [«id»] => string (12) «355374000182»}
object (stdClass) # 50 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (21) «Скуби-Ду: фильм» [«creation_time»] => string (24)
«2012-09-20T11: 55: 28 + 0000» [«id»] => string (15) «106352129401640»}
object (stdClass) # 51 (4) {[«category»] => string (5) «Movie» [«name»] =>
string (14) «Дракула нераскрытая» [«creation_time»] => string (24)
«2012-09-17T16: 15: 38 + 0000» [«id»] => string (15) «332230740134829»}
object (stdClass) # 52 (4) {[«category»] => string (15) «Персонаж фильма» [«name»] => string (5) «Simba» [«creation_time»] => string (24)
«2012-09-06T22: 23: 22 + 0000» [«id»] => string (11) «27665751322»}

Мой полный код теперь совпадает с этим, реализованным выше моего эхо на страницу. Мне просто нужно научиться обходить и перечислять только название каждого фильма, оборачивая каждый в тег!

-2

Решение

Вариант 1. Преобразуйте объект графа в массив, используя метод asArray (), и проанализируйте как обычный массив.

$graphArray = $graph->asArray();
$movies = $graphArray['movies']['data'];
foreach ($movies as $movie) {
$name = $movie['name'];
}

Вариант 2: получить свойство data и пройти через этот массив, затем получить свойства genre, name и id с помощью метода getProperty.

$movies = $graph->getProperty('movies');
foreach ($movies as $movie) {
$name = $movie->getProperty('name');
}
0

Другие решения

Разрешенный фрагмент

$FB_User_Interests_Movies = (new FacebookRequest(
$sess, 'GET', '/me/movies'
))->execute()->getGraphObject()->asArray();
foreach($FB_User_Interests_Movies['data'] as $key) {
echo $key->name.'<br />';
}

Как я решил

В API Facebook Graph есть много других вещей, поэтому я расширил исследование, чтобы спросить, как найти друзей и еще много чего. Это привело меня к видео на YouTube под названием «Facebook PHP SDK v4: получить список страниц, понравившихся пользователю | Часть 10этого было достаточно, чтобы объяснить, как добиться моего вопроса!

0

По вопросам рекламы [email protected]