0

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

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

任何帮助或示例链接将不胜感激。

4

2 回答 2

1

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

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

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

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

为了获得许可,您需要一个访问令牌

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

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

对于用户配置文件,您需要用户访问令牌

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

一旦知道了这些基础知识,您就需要通过一个HTTP GETto拉取数据

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

您可以通过使用 fb_exchange_token 的 grant_type 参数将其从您的服务器传递到 /oauth 端点(以便不暴露秘密),将此令牌交换为寿命更长的令牌(有效期最长为 60 天)

现在您应该将其存储在数据库中,例如 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 并解析了签名的请求

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

$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'];
}
于 2013-03-24T19:35:40.377 回答
0

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

于 2013-03-24T14:25:06.497 回答