我需要有关如何引入用户个人信息流的帮助。例如,当我访问此网页时,我希望用户能够看到他/她的 facebook 实时个人资料流,就好像他/她正在查看 facebook 网站一样。
您还建议我使用 Javascript 或 PHP SDK 吗?
任何帮助或示例链接将不胜感激。
要获取用户的流,应用需要获得此数据的权限
当用户登录应用程序时,该应用程序可以访问他们的公开个人资料和朋友列表 - 要阅读有关某人的更多信息,应用程序必须向他们请求额外的权限
权限使您能够访问用户信息。Graph API 参考提供了有关存储在用户配置文件中的信息类型的详细信息,以及在您的应用程序可以访问之前必须由用户授予的特定权限。
http://developers.facebook.com/docs/concepts/login/permissions-login-dialog/
为了获得许可,您需要一个访问令牌
访问令牌是一个随机字符串,提供对 Facebook API 的临时安全访问。
令牌标识用户、应用程序或页面会话,并提供有关授予权限的信息。它们还包括有关令牌何时过期以及哪个应用程序生成令牌的信息。由于隐私检查,Facebook 上的大多数 API 调用都需要使用访问令牌进行签名
对于用户配置文件,您需要用户访问令牌
用户访问令牌是 API 调用的标准类型;这些是在用户向应用授予权限时在登录流程中生成的。
一旦知道了这些基础知识,您就需要通过一个HTTP GET
to拉取数据
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'];
}
您可以为您的网站创建一个徽章(您的 FB 个人资料右上角的齿轮),然后单击“编辑徽章”。有很多可用的选项。