2010-10-29 59 views
0

我知道这个问题以前可能已经被问过一百万次了,但不幸的是我无法编译所有这些答案来使它工作。Facebook Graph API,匿名提取信息

我想编写一个使用Facebook图形API的PHP代码来搜索配置文件(例如通过名称),然后将此信息抓取到本地商店。我修改了facebook图形API,但它使用了OAuth和大量不需要的开销任务。原因就是我不想使用代表特定用户帐户的API。我只是想匿名地使用它,或者甚至是一个示例用户,他们不一定是我正在搜索的这些用户的朋友。 如果有人能告诉我它是否可行,或者请求我稍微澄清一下我的问题,我将不胜感激:)

在此先感谢。

回答

1

您必须检索访问令牌以使用图形API来搜索用户。我认为没有办法解决这个问题。至少不用Graph API。

尝试here使用Graph API搜索用户。您会看到他们正在使用访问令牌。对于没有访问令牌的用户尝试search将导致以下错误消息。

{ 
    "error": { 
    "type": "OAuthException", 
    "message": "An access token is required to request this resource." 
    } 
} 

更新

从Facebook的开发者文档:

“Facebook的身份验证使您的应用程序代表Facebook用户与图形API 进行互动,并提供了一个功能强大的跨Web,移动和桌面应用的单点登录机制。“

authentication过程并不那么复杂。

+0

感谢您的评论:)。我可以理解,应该在浏览器上登录用户打开会话吗? – rgeorgy 2010-10-29 14:14:59

+0

我很确定你必须登录到Facebook。至少我不知道另一种获取访问令牌的方式。 – 2010-10-29 14:21:33

1

当然这里有一个快速的方式去获得你想要的信息:

<?PHP 

define('FACEBOOK_APP_ID', 'yourappIDhere'); 
define('FACEBOOK_SECRET', 'yourFBsecretkeyhere'); 

function get_facebook_cookie($app_id, $application_secret) { 
    $args = array(); 
    if(isset($_COOKIE['fbs_' . $app_id])){ 
     parse_str(trim($_COOKIE['fbs_' . $app_id], '\\"'), $args); 
    } 

    ksort($args); 
    $payload = ''; 
    foreach ($args as $key => $value) { 
     if ($key != 'sig') { 
      $payload .= $key . '=' . $value; 
     } 
    } 
    if(isset($args['sig'])){ 
     if (md5($payload . $application_secret) != $args['sig']) { 
      return null; 
     } 
     else 
      return $args; 
    } 
    else 
     return null; 
} 

$cookie = get_facebook_cookie(FACEBOOK_APP_ID, FACEBOOK_SECRET); 

?> 


<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:fb="http://www.facebook.com/2008/fbml"> 
<head> 
</head> 
<body> 
<?php if ($cookie) { ?> 
    Your user ID is <?PHP echo $cookie['uid']; ?> 
<?PHP 
    $user = json_decode(file_get_contents('https://graph.facebook.com/me/access_token=' . $cookie['access_token']))->data; 

} else { 
?> 
    <fb:login-button perms="email"></fb:login-button> 
<?php } ?> 

<div id="fb-root"></div> 
<script src="http://connect.facebook.net/en_US/all.js"></script> 
<script> 
    FB.init({appId: '<?= FACEBOOK_APP_ID ?>', status: true, 
      cookie: true, xfbml: true}); 
    FB.Event.subscribe('auth.login', function(response) { 
    window.location.reload(); 
    }); 
</script> 
</body> 
</html> 

以后有什么公平如上所述,这里就是你需要得到认证设置为自己的非常基本的代码。

HTH :)

您可以更改参数的登录按钮,它不只是“电子邮件”,然后通过任何其他你可能希望搜索。

+0

其实,访问Facebook将在后端,我不需要登录到Facebook的用户登录按钮。我只想抓住用户帐户上的* public *信息。谢谢你的反应,虽然:) – rgeorgy 2010-10-29 14:18:18

相关问题