2014-09-18 6 views
4

В настоящее время я пытаюсь получить и разобрать события пользователя, используя api. Для этого я использую функцию ниже.Получение событий от Facebook

function facebook_get_events($facebookSession) { 

     // make the API call and get array of event objects 
     $events = (new FacebookRequest($facebookSession, 'GET', '/me/events')->execute()->getGraphObject(); 

     log("Got events from facebook " . count($events)); 

     foreach ($events as $event) { 
      echo $event->getProperty('id'); 
     } 

     return events; 
} 

Проблема: Проблема заключается в том, что он не работает. В журнале я замечаю, что в массиве только один элемент. Кстати, я предполагаю, что события - это массив, потому что, согласно документации Facebook, ответ представляет собой «массив объектов событий». Click here to check out the doc link.

Что касается печати идентификатора, ничего не отображается.

Чтобы проверить правильность запроса, я также использовал API-интерфейс API-интерфейсов Facebook и правильно вернул список событий. Структура результатов показана ниже (информация удалена из-за проблем с конфиденциальностью).

{ 
     "data": [ 
     { 
      "name": "...", 
      "start_time": "...", 
      "location": "...", 
      "rsvp_status": "...", 
      "id": "..." 
     }, 
     { 
      "name": "...", 
      "start_time": "...", 
      "timezone": "...", 
      "rsvp_status": "...", 
      "id": "..." 
     } 
     ], 
..... 
} 

Я также проверил ли мои права являются правильными, и я могу подтвердить, что я в том числе разрешение user_events. Я думаю, что моя проблема больше связана с тем, как я анализирую ответ.

В соответствии с комментарием, я также сделал var_dump для событий. Ниже приведен снимок того, что я получил.

object(Facebook\GraphObject)#5 (1) { 
["backingData":protected]=> 
array(2) { 
["data"]=> 
array(25) { 
[0]=> object(stdClass)#6 (5) { 
["id"]=> string(15) “…” 
["name"]=> string(11) “..”. 
[“location"]=> string(14) “…” 
["start_time"]=> string(24) “…” 

Прогресс 1:

Я также попытался сделать использование этого кода, вызвав свойство 'данные', но до сих пор не удалось.

function facebook_get_events($facebookSession) { 

     // make the API call and get array of event objects 
     $events = (new FacebookRequest($facebookSession, 'GET', '/me/events')->execute()->getGraphObject(); 

     log("Got events from facebook " . count($events->getProperty('data'))); 

     foreach ($events->getProperty('data') as $event) { 
      echo $event->getProperty('id'); 
     } 

     return events; 
} 

Приведенный выше код не выдает ничего.

+0

ли вы показать нам, что вы видите, когда вы 'var_dump ($ событий)' сразу после выполнения вызова, пожалуйста? Надеюсь, это прояснится, если это определенно, как вы разбираете его и формат, в котором он находится. Возможно, ему нужно что-то вроде 'foreach ($ events ['data]) {' или что-то еще. – LeonardChallis

+0

Я поместил var_dump в вопрос. Спасибо – Goaler444

+0

Получил предупреждение: PHP Предупреждение: неверный аргумент для foreach() – Goaler444

ответ

1

Это самый простой путь:

$eventResponse = (new FacebookRequest($session, 'GET', '/me/events'))->execute()->getResponse(); 
$events = $eventResponse->data; 

foreach ($events as $event) { 
    echo $event->name; 
    //echo $event->id; 
    //echo $event->name; 
    //echo $event->start_time; 
    //echo $event->timezone; 
    //echo $event->location; 
} 

И это хороший способ:

деклараций Класс:

class GraphEventlist extends GraphObject implements Iterator 
{ 
    /** 
    * @var GraphEvent[] 
    */ 
    protected $backingData = array(); 

    public function __construct($raw) 
    { 
     foreach ($raw['data'] as $eventArray) { 
      if ($eventArray instanceof \stdClass) { 
       $eventArray = get_object_vars($eventArray); 
      } 
      $this->backingData[$eventArray['id']] = $eventArray; 
     } 
    } 

    public function current() 
    { 
     return $this->getProperty(key($this->backingData), 'GraphEvent'); 
    } 

    public function key() 
    { 
     return key($this->backingData); 
    } 

    public function next() 
    { 
     next($this->backingData); 
    } 

    public function rewind() 
    { 
     reset($this->backingData); 
    } 

    public function valid() 
    { 
     return null !== key($this->backingData); 
    } 
} 

class GraphEvent extends GraphObject 
{ 
} 

Получить событий

$events = (new FacebookRequest($session, 'GET', '/me/events'))->execute()->getGraphObject('GraphEventlist'); 

Итерация:

foreach ($events as $event) { 
    echo $event->getProperty('name'); 
} 

Получить одно событие по ID:

var_dump($events->getProperty('6499**********4', 'GraphEvent')); 
Смежные вопросы