2010-10-29 83 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