Facebook实时页面更新php


Facebook real time page update php

这是我向stackoverflow提出的第一个问题,所以如果有什么问题,请告知。。问题是Facebook实时更新:我已经成功创建了对页面的订阅,它是管理员用户(创建了测试页面和测试应用程序),用户同意管理页面、read_stream、read_friendlist、read_insights、publish_actions和许多用户数据(关于、电子邮件等)当我用边缘/订阅查询GET to Graph api时,我得到的结果是:

{
  "data": [
    {
      "object": "user", 
      "callback_url": "LIVE_CALLBACK_URL", 
      "fields": [
        "feed"
      ], 
      "active": true
    }, 
    {
      "object": "page", 
      "callback_url": "LIVE_CALLBACK_URL", 
      "fields": [
        "built", 
        "description", 
        "email", 
        "feed", 
        "location", 
        "name", 
        "personal_info", 
        "written_by"
      ], 
      "active": true
    }
  ]
}

所以,这已经解决了,在那之后,我搜索了为什么Facebook没有向我发送任何更新(我将其记录到somefile.txt)。所以我发现你需要用/tabs查询Graph api来为我的api创建页面选项卡。当我查询它返回了"success",所以它被创建了(找不到它存储在哪里,但它正在工作…)。之后,我在我的个人资料上创建了一些数据,以进行测试,并在页面上查看Facebook是否正在发送任何更新,它突然发送了一个更新,该更新是对我的用户个人资料帖子的评论(在时间线上共享)。回应是:

14:17 05.02.2015
Array
(
    [object] => user
    [entry] => Array
        (
            [0] => Array
                (
                    [uid] => ****my_fb_id****
                    [id] => ****my_fb_id - not_someone_else****
                    [time] => 1423146339
                    [changed_fields] => Array
                        (
                            [0] => feed
                        )
                )
        )
)

所以脸书发送的是空的订阅源,可能是一些权限或其他什么,但在那之后,我发了更多的帖子,人们对它发表了评论(在用户档案和测试页面上),但脸书没有向我的网页发送任何更新或打电话。那么,过去有人面临过这个问题吗?他是如何解决这个问题的?从Facebook接收更新的部分是:

$method = $_SERVER['REQUEST_METHOD']; 
    if(isset($_GET['hub_mode']) && isset($_GET['hub_verify_token'])){
          if (trim($method) == 'GET' && trim($_GET['hub_mode']) == 'subscribe' && trim($_GET['hub_verify_token']) == VERIFY_TOKEN) {
            print $_GET['hub_challenge'];
          }
      }
      else if ($method == 'POST') {      
        $updates = json_decode(file_get_contents("php://input"), true); 
            $file = 'log.txt';
            $current = file_get_contents($file);
            @$results = print_r($updates,true);
            $current .=  $results;
            file_put_contents($file, $current);                             
    }

我已经尽可能详细地说明了我的问题。。。搜索过,但不太明白为什么它不起作用。

除了使用@CBroe概述的过时方法外,我认为您有一个误解:Facebook不会向您发送已更改的数据,而是发生更改的对象(及其字段/边缘)用于用户对象更改。

对于Pages,您可以接收更改本身(FB请求中的changed_fieldschanges字段)。

参见

  • https://developers.facebook.com/docs/graph-api/real-time-updates/v2.2#receiveupdates

成功创建订阅后,每次(对所选字段或边)发生更改时,Facebook都会向您的回调URL发出HTTPPOST请求。

这意味着你需要从Facebook获得的信息对象中构建一个单独的请求。在您的示例中,它将是对用户的提要的请求

GET /{user_id}/feed

以查询最近的更改。