【问题标题】:Bring in a facebook users stream into a webpage将 facebook 用户流引入网页
【发布时间】:2013-03-14 00:01:53
【问题描述】:

我需要有关如何引入用户个人信息流的帮助。 例如,当我访问此网页时,我希望用户能够看到他/她的 facebook 实时个人资料流,就好像他/她正在查看 facebook 网站一样。

您还建议我使用 Javascript 或 PHP SDK 吗?

非常感谢任何帮助或示例链接。

【问题讨论】:

  • 您只想显示用户的帖子或出现在用户壁画上的所有帖子(朋友、页面等)
  • 嗨 Fabio,现在我只想让用户的个人信息流正常工作 (www.facebook.com/usersname)

标签: php facebook web stream


【解决方案1】:

要获取用户的信息流,应用需要获取此数据的权限

当用户登录应用时,该应用可以访问他们的公开个人资料和好友列表 - 要阅读有关某人的更多信息,应用必须向他们请求额外的权限

权限使您能够访问用户信息。 Graph API 参考提供了有关存储在用户配置文件中的信息类型的详细信息,以及用户必须授予的特定权限,然后您的应用才能访问它。

http://developers.facebook.com/docs/concepts/login/permissions-login-dialog/

为了获得权限,您需要一个访问令牌

访问令牌是一个随机字符串,提供对 Facebook API 的临时安全访问。

令牌标识用户、应用程序或页面会话,并提供有关授予权限的信息。它们还包括有关令牌何时过期以及哪个应用程序生成令牌的信息。由于隐私检查,Facebook 上的大多数 API 调用都需要使用访问令牌进行签名

对于用户个人资料,您需要一个用户访问令牌

用户访问令牌是 API 调用的标准类型;这些是在用户向应用授予权限时在登录流程中生成的。

了解这些基础知识后,您需要通过HTTP GET 将数据拉取到

https://graph.facebook.com/me/feed?access_token=USER_ACCESS_TOKEN

这将返回一个包含(最多)最后 25 个帖子的 Post 对象数组。

http://developers.facebook.com/docs/reference/api/user/#feed

现在您有一个类似于此的 JSON 响应

{
  "data": [
    {
      "id": "13608786_10101118139895617", 
      "from": {
        "name": "Philippe Harewood", 
        "id": "13608786"
      }, 
      "picture": "https://fbexternal-a.akamaihd.net/safe_image.php?d=AQDuPlCx0L1BP7wp&w=130&h=130&url=http%3A%2F%2Fi4.ytimg.com%2Fvi%2F7_3hKVxOcRI%2Fmqdefault.jpg", 
      "link": "http://www.youtube.com/watch?v=7_3hKVxOcRI", 
      "source": "http://www.youtube.com/v/7_3hKVxOcRI?version=3&autohide=1&autoplay=1", 
      "name": "Suit & Tie (Acoustic Cover) - Tori Kelly", 
      "description": "hope you enjoy my cover of Suit & Tieeee. JT is the man. for all info and tickets to my upcoming shows go to torikellymusic.com !! love you guys! -----------...", 
      "icon": "https://fbstatic-a.akamaihd.net/rsrc.php/v2/yj/r/v2OnaTyTQZE.gif", 
      "privacy": {
        "value": ""
      }, 
      "type": "video", 
      "application": {
        "name": "YouTube", 
        "namespace": "yt-fb-app", 
        "id": "87741124305"
      }, 
      "created_time": "2013-03-23T23:21:50+0000", 
      "updated_time": "2013-03-23T23:21:50+0000", 
      "comments": {
        "count": 0
      }
    }
  ], 
  "paging": {
    "previous": "https://graph.facebook.com/13608786/feed?limit=25&since=1364080910", 
    "next": "https://graph.facebook.com/13608786/feed?limit=25&until=1364080909"
  }
}

根据您应用的语言,您应该能够正确解析响应。在这种情况下,从用户配置文件中获得近乎持久的提要数据流。您将需要存储用户访问令牌,以便应用可以随时请求访问。

通常用户访问令牌仅持续两个小时,因此将令牌延长至持续两个月将是一个明智的选择。您可以使用以下调用扩展令牌

https://graph.facebook.com/oauth/access_token?  
    grant_type=fb_exchange_token&           
    client_id=APP_ID&
    client_secret=APP_SECRET&
    fb_exchange_token=SHORT_LIVED_ACCESS_TOKEN

您可以将此令牌交换为一个寿命较长的令牌(有效期最长为 60 天),方法是使用 fb_exchange_token 的 grant_type 参数将其从您的服务器传递到 /oauth 端点(这样密码就不会暴露)

现在您应该将其存储在数据库中,例如MySQL 供稍后检索。

总之,加载你的 SQL

CREATE TABLE IF NOT EXISTS `facebook_data` (
  `ID` int(11) NOT NULL,
  `access_token` varchar(255) NOT NULL,
  UNIQUE KEY `ID` (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

根据需要预填充数据

INSERT INTO `facebook_data` (`ID`, `access_token`) VALUES
(1, 'temptoken');

通常我倾向于让 JS SDK 处理用户身份验证和 PHP SDK 处理 API 调用。同时允许 JS SDK 设置的 cookie 被 PHP SDK 拾取

一旦 PHP SDK 设置了 cookie 并解析了signed request

我将扩展访问令牌并在数据库中设置新的访问令牌。

$facebook->setExtendedAccessToken();
$fbdb_result = $fbdb->query("UPDATE facebook_data SET access_token='" . $facebook->getAccessToken() . "' WHERE ID = 1");

现在在我的演示页面中,每当我需要时,我都会从数据库中提取访问令牌并将 PHP SDK 设置为正确的用户。

$result = $fbdb->query("SELECT access_token FROM facebook_data WHERE ID = 1");
$access_token = mysql_result($result, 0);
$facebook->setAccessToken($access_token);

然后我确保自上次存储以来没有发生过失效

// Get User ID
$user = $facebook->getUser();
    
if ($user) {
  try {
    // Proceed knowing you have a logged in user who's authenticated.
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    error_log($e);
    $user = null;
  }
  $user_posts = $facebook->api('me/feed'); // The user's feed on their wall
}

然后开始处理每个帖子并用一些样式化的 CSS 显示它

foreach($user_posts['data'] as $post){
  $post_link = $post['actions'][0]['link'];
  $page_id = $post['from']['id'];
  $page_name = $post['from']['name'];
  $message = ($post['message']) ? $post['message'] : " ";
  $name = ($post['name']) ? $post['name'] : " ";
  $story = ($post['story']) ? $post['story'] : " ";
  $post_time = $post['updated_time'];
}

【讨论】:

  • 这对我帮助很大,我真的很感激 :)。
【解决方案2】:

您可以为您的网站创建一个徽章(您的 FB 个人资料右上角的齿轮),然后点击“编辑徽章”。有很多可用的选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多