I am using Facebook SDK to post some test wall post on my own Facebook page. What i want is to post on my facebook page every 8 hours using PHP CRON script and for that i have to bypass the Facebook login dialog page, So does anyone know the way to authenticate from command line or on air?
问问题
5226 次
3 回答
2
Facebook 为用户提供访问令牌以使用 Facebook 应用程序。第一次,用户必须通过facebook登录,登录网站后,它会要求访问该应用程序的权限。一旦用户接受,facebook 将通过 url 返回一个代码。您必须获取代码并使用它来获取访问令牌
通过使用以下代码
$url = "https://graph.facebook.com/oauth/access_token?client_id=". $yourappId ."&redirect_uri=". urlencode($this->redirect_url) ."&client_secret=". $youappsecret."&code=". $code;
$auth_token = $this->getContents($url);
$str = explode('=',$auth_token);
$token = explode('&expires', $str[1]);
这里 $token 将拥有用户的访问令牌,您可以将该令牌存储在您的本地数据库中,并使用该令牌将消息发布到 Facebook 墙。它很简单..仅此而已。
在 Fb Wall 上发布消息
$fb_id = "User_fb_id"
$access_token = "User_Access_Token_Take by Above code"
$msg = "Message_to_post"
$img_path = "Image_Path"
$facebook = new Facebook(array(
'appId' => $this->appId,
'secret' => $this->secret,
'cookie' => true));
if($msg != NULL) {
$attachment = array(
'message' => $msg,
'name' => 'NHM',
'picture' => $img_path);
}
try {$result = $facebook->api('/'. $fb_id . '/feed/',
'post',
$attachment);
if(isset($result['id']))
return true;
else
return false;
} catch(FacebookApiException $e) {
return $e->getMessage();
}
在这里,您必须使用 Facebook 用户 ID。要获取用户 ID,请使用以下代码
$url = "https://graph.facebook.com/me?access_token=". $access_token;
$userInfo = $this->getContents($url);
$userInfo = json_decode($userInfo, true);
public function getContents($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec ($ch);
curl_close ($ch);
return $content;
}
尝试这个 。让我知道如果有任何问题
于 2012-10-10T13:03:09.467 回答
-1
不,没有办法绕过 Facebook 登录对话框页面,但对于您的情况,您可以检索扩展访问密钥并将其用于发布到您的墙上。您可以通过 PHP SDK 使用以下代码来检索访问令牌
$extendedToken = $facebook->setExtendedAccessToken();
$facebook->api('<PAGE_ID>?fields=access_token');
然后只需使用
$facebook->setAccessToken();
发布到您的页面。请记住在生成扩展访问令牌之前获得许可。
于 2012-10-10T13:02:33.857 回答