从Facebook获取活动

Goa*_*444 5 php facebook facebook-graph-api facebook-php-sdk

我目前正试图通过使用Facebook api来获取和解析用户的事件.为此,我正在使用下面的功能.

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;
}
Run Code Online (Sandbox Code Playgroud)

问题:问题是它不起作用.在日志中我注意到数组中只有一个元素.顺便说一句,我假设事件是一个数组,因为根据Facebook的文档,响应是"一系列事件对象".点击这里查看文档链接.

关于id的打印,没有显示任何内容.

为了检查请求是否正确,我还使用了Facebook的Graph API Explorer,它正确地返回事件列表.结果结构如下所示(由于隐私问题,信息已被删除).

    {
      "data": [
        {
          "name": "...", 
          "start_time": "...", 
          "location": "...", 
          "rsvp_status": "...", 
          "id": "..."
        }, 
        {
          "name": "...", 
          "start_time": "...", 
          "timezone": "...", 
          "rsvp_status": "...", 
          "id": "..."
        }
      ], 
.....
}
Run Code Online (Sandbox Code Playgroud)

我还检查了我的权限是否正确,我可以确认我是否包含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) “…”
Run Code Online (Sandbox Code Playgroud)

进展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;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码没有打印出来.

Bre*_*hse 2

这是最简单的方法:

$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;
}
Run Code Online (Sandbox Code Playgroud)

这是一个很好的方法:

类声明:

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
{
}
Run Code Online (Sandbox Code Playgroud)

获取事件

$events = (new FacebookRequest($session, 'GET', '/me/events'))->execute()->getGraphObject('GraphEventlist');
Run Code Online (Sandbox Code Playgroud)

迭代:

foreach ($events as $event) {
    echo $event->getProperty('name');
}
Run Code Online (Sandbox Code Playgroud)

通过ID获取单个事件:

var_dump($events->getProperty('6499**********4', 'GraphEvent'));
Run Code Online (Sandbox Code Playgroud)