【问题标题】:Get wall feed from a public Facebook page using Graph API - is it really this complex?使用 Graph API 从公共 Facebook 页面获取墙源 - 真的这么复杂吗?
【发布时间】:2012-04-03 07:14:36
【问题描述】:

我从阅读 Displaying Facebook posts to non-Facebook users 开始,这有些用处,但我不敢相信从 Facebook 获得公开信息有这么难。

我想从中获取提要的页面是公开的,您无需登录即可访问它。

我是否正确地假设我需要一个 access_token 来获取此信息,尝试访问该 URL 而不会导致 OAuth 错误。

所以流程应该是这样的(大量,过于复杂):

  1. 使用用户进行身份验证(如果用户不在 Facebook 上怎么办?)
  2. 一些复杂的 OAuth 废话 - 只是为了阅读提要,我什至不想要一个赞按钮或发布到墙上的功能
  3. 使用 PHP 请求通过用户的 access_token 获取到正确 URL 的提要
  4. 呈现提要

假设用户不在 Facebook,你会怎么做,使用通用应用程序来获取提要?

  1. 使用我的通用应用的 ID 和密码将身份验证请求硬编码到 Facebook
  2. 一些复杂的 OAuth 废话
  3. 使用 PHP 请求通过应用程序的 access_token 获取到正确 URL 的提要
  4. 呈现提要
  5. 哦,不,身份验证已过期,请重新进行身份验证并捕获这个新的 access_token 以供将来的请求使用。

这似乎真的很复杂,除了 Facebook 想知道正在发生的一切之外,它会更容易做一个 cURL 并使用 XPath 从公共 URL 中抓取内容。

在这方面的任何帮助都会很棒。

谢谢, 杰克

编辑

显示这不是完全重复的编辑。

我使用 access_token 进行了这项工作,但现在失败了,令牌已过期,我无法再使用它从公共墙获取信息。

我尝试使用其他帖子中提到的方法延长此令牌的到期日期,但这不起作用,并且到期未延长 - 我们现在在这里,令牌无效,没有进一步的进展。

似乎必须批准 OAuth 请求的手动过程意味着不可能以编程方式获取公共页面的提要。

【问题讨论】:

  • 查看我对facebook.stackoverflow.com/questions/9663700/… 的回答,我相信它可以解决您的问题。
  • 谢谢 Shreeni - 这是我所害怕的 - 它太复杂了。维护代理简直是疯了。我现在正试图通过访问 URL 来使其工作,尝试从我的通用帐户甚至我自己的帐户中获取 acccess_token 失败。说实话,这一切都是一团糟。
  • 嗨 Shreeni,我将进行编辑以更新我在此方面的位置。
  • 我也在想同样的事情 (stackoverflow.com/questions/9970381/…)。为什么 Facebook 让使用他们的 API 比简单地抓取网站更难?太疯狂了。
  • 我想我们忘记了。他们的业务,他们没有用处。

标签: php facebook facebook-graph-api facebook-access-token


【解决方案1】:

Facebook 已更改检索公共 Facebook 页面提要的方式,因为其他答案已发布。

查看我的answer/question。不是PHP,而是提供了URLs和你需要的流程。

【讨论】:

    【解决方案2】:

    两年后,您可以通过 Facebook 应用程序(使用 PHP 和 Slim 的示例)以编程方式执行此操作:https://developers.facebook.com/apps/

    $base_api="https://graph.facebook.com/";
    $client_id="XXXXXX";
    $app_secret="XXXXXX";
    
    //get a profile feed (can be from a page, user, event, group)
    $app->get('/feed/:profileid/since/:start_date', function ($profile_id,$start_date) {
    
        $start_time=date('m/d/Y h:i:s',$start_date);
    
        $request = new FacebookRequest(
          getSession(),
          'GET',
          '/'.$profile_id.'/feed?since='.$start_time
        );
    
        $response = $request->execute();
        $graphObject = $response->getGraphObject();
    
        //do something with $graphObject
    
    });
    
    
    function getSession(){
        $session = new FacebookSession(getAccessToken());
        return $session;
    }
    
    
    function getAccessToken(){
        global $base_api, $client_id, $app_secret;
        $url=$base_api."oauth/access_token?client_id=".$client_id."&client_secret=".$app_secret."&grant_type=client_credentials";
        $str = file_get_contents($url);
        $token = str_replace ( "access_token=" , "" , $str );
        return $token;
    }
    

    【讨论】:

      【解决方案3】:

      我在没有令牌等的直接提要中阅读取得了一些成功。 (使用 magpie、simplepie 或 querypath 或类似方法)。

      http://www.facebook.com/feeds/page.php?format=rss20&id=........ http://www.facebook.com/feeds/page.php?format=atom10&id=........

      发现于:http://ahrengot.com/tutorials/facebook-rss-feed/

      【讨论】:

      • 不赞成使用 Facebook API。太糟糕了,因为这是获取我需要的信息的简单方法!
      猜你喜欢
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2017-07-30
      • 1970-01-01
      • 2013-03-15
      • 2015-12-19
      • 2021-03-27
      • 1970-01-01
      相关资源
      最近更新 更多