Facebook实时页面更新php

时间:2015-02-05 20:34:15

标签: php facebook facebook-graph-api real-time subscription

这是我对stackoverflow的第一个问题,所以如果有什么问题请指教.. 那么问题是Facebook的实时更新: 我已经成功创建了对页面的订阅,并且它的管理员用户(测试页面和测试应用程序已创建),用户已经同意了manage_page,read_stream,read_friendlist,read_insights,publish_actions和许多用户数据(关于,电子邮件等等)的权限 当我使用边缘/订阅查询GET到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。当我查询它返回“成功”以便创建(无法找到它存储的位置,但它正在工作......)。 之后我在我的个人资料上创建了一些数据,进行测试,并在页面上查看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发送的是空的Feed,它没关系,可能是一些权限或其他东西,但之后我发了更多的帖子和ppl评论(在用户个人资料和测试页面上)但Facebook没有发送任何更新或者对我的网页的任何调用。 那么过去任何人都面临这个问题,他是如何解决这个问题的? 用于从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);                             
    }

我试图尽可能详细地解释我的问题...搜索但不太明白为什么它不起作用。

1 个答案:

答案 0 :(得分:0)

除了使用过时的方法@CBroe概述,我认为你有一个误解:Facebook不会发送已更改的数据,但对象(及其字段/ edge)用户对象更改发生了更改

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

  

成功创建订阅后,每次发生更改(选择的字段或边缘)时,Facebook都会向您的回调网址发出HTTP POST请求。

这意味着您需要从Facebook获得的info对象中构建单独的请求。在您的示例中,它将是对您用户的Feed的请求

GET /{user_id}/feed

查询最近的更改。