В настоящее время я пытаюсь получить и проанализировать события пользователя, используя 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, ответом является «массив объектов Event». Нажмите здесь, чтобы проверить ссылку на документ.
Что касается печати удостоверения личности, то ничего не показывается.
Чтобы проверить правильность запроса, я также использовал Facebook API Graph API, и он корректно возвращает список событий. Структура результатов показана ниже (информация была удалена из-за соображений конфиденциальности).
{
"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:
Я также пытался использовать этот код, вызывая свойство «data», но все равно не справился.
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;
}
Приведенный выше код ничего не печатает.
Это самый простой путь:
$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'));
Других решений пока нет …