Php 即使我';我注销了

Php 即使我';我注销了,php,facebook,Php,Facebook,我制作了这个PHP脚本,它可以定期获取要发布到我管理的Facebook页面的消息 我的脚本运行良好,但这取决于我作为一个登录Facebook的用户。我希望此脚本作为cron作业运行,因此我担心如果我注销,脚本将无法工作 即使我没有登录Facebook,我怎么能让它工作呢 请注意,我根据请求创建了一个Facebook应用程序,以便能够使用Facebook api。有没有一种方法可以发布为Facebook应用程序 这是我的代码,以防万一 require_once('config.inc.php');

我制作了这个PHP脚本,它可以定期获取要发布到我管理的Facebook页面的消息

我的脚本运行良好,但这取决于我作为一个登录Facebook的用户。我希望此脚本作为cron作业运行,因此我担心如果我注销,脚本将无法工作

即使我没有登录Facebook,我怎么能让它工作呢

请注意,我根据请求创建了一个Facebook应用程序,以便能够使用Facebook api。有没有一种方法可以发布为Facebook应用程序

这是我的代码,以防万一

require_once('config.inc.php');
require '_classes/facebook-php-sdk/src/facebook.php';


$homeurl = 'http://domain.com/to-facebook/index.php';
$post_url = '/'.PAGEID.'/feed';



// The message
        $msg_body = array(
        'message' => 'hello world',
        );

// Post to Facebook

$facebook = new Facebook(array(
        'appId'  => FB_APP_ID,
        'secret' => FB_APP_SECRET,
    ));


// Get User ID
$fbuser = $facebook->getUser();
if ($fbuser) {
    try {
        $postResult = $facebook->api($post_url, 'post', $msg_body );
    } catch (FacebookApiException $e) {
        echo $e->getMessage();
    }
}else{
 // I would like never to come to this point...
    $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>$homeurl,'scope'=>'publish_stream,manage_pages,publish_actions,status_update,offline_access'));
    header('Location: ' . $loginUrl);
}
if($postResult)
{

    echo '<h1>Your message is posted on your facebook wall.</h1>';
}
require_once('config.inc.php');
需要“_classes/facebook-php-sdk/src/facebook.php”;
$homeurl='1!'http://domain.com/to-facebook/index.php';
$post_url='/'.PAGEID'/feed';
//信息
$msg_body=数组(
'message'=>'hello world',
);
//发布到Facebook
$facebook=新的facebook(数组)(
'appId'=>FB\U应用程序\U ID,
“机密”=>FB\U应用程序\U机密,
));
//获取用户ID
$fbuser=$facebook->getUser();
如果($fbuser){
试一试{
$postResult=$facebook->api($post\u url,$post',$msg\u body);
}捕获(FacebookApiException$e){
echo$e->getMessage();
}
}否则{
//我永远不想走到这一步。。。
$loginUrl=$facebook->getLoginUrl(数组('redirect\u uri'=>$homeurl,'scope'=>'publish\u stream,管理页面,发布操作,状态更新,离线访问');
标题('位置:'。$loginUrl);
}
如果($postResult)
{
echo“你的信息发布在你的facebook墙上。”;
}
*更新*
我尝试了cronjob,但不幸的是,过了一段时间,我收到了“验证访问令牌时出错:会话在unix时间已过期”的消息。我很困惑。我做错了什么?

对于连接到应用程序的站点: 当您获得应用程序管理_页面的权限时,您将使用用户令牌运行api,该api将为您提供所有页面的访问令牌。这些代币可以永远使用

对于授权应用程序的用户: 您可以延长访问令牌的使用时间。但是,用户需要登录以刷新扩展令牌。阅读更多关于“Facebook扩展令牌”的信息

过去有一个许可证可以让应用程序永远重复使用令牌,但现在已经不可用了。现在,您所能做的最好的事情就是在用户每次登录到您的应用程序时运行api来扩展令牌。

**更新** 我尝试了cronjob,但不幸的是,过了一段时间,我收到了“验证访问令牌时出错:会话在unix时间已过期”的消息。我很困惑。我做错了什么


我似乎已经根据这个答案找到了解决办法。 它解释了如何获取FB应用程序特定页面的访问令牌。 我得到了它,然后修改了我的代码。我用一个我没有登录facebook的浏览器测试了它,它可以正常工作

以下是更新后的脚本,以防有所帮助

$msg_body = array(
    'message' => $message->message.' v/ @'.$message->author,
    'access_token' => FB_ACCESS_TOKEN
);



try {
    $postResult = $facebook->api($post_url, 'post', $msg_body );
} catch (FacebookApiException $e) {
    echo $e->getMessage();
}

if($postResult)
{
    echo '<h1>Your message is posted on your facebook wall.</h1>';
    print_r($msg_body);
}
$msg\u body=数组(
'message'=>$message->message.'v/@.$message->author,
“访问令牌”=>FB\U访问令牌
);
试一试{
$postResult=$facebook->api($post\u url,$post',$msg\u body);
}捕获(FacebookApiException$e){
echo$e->getMessage();
}
如果($postResult)
{
echo“你的信息发布在你的facebook墙上。”;
打印($msg\u body);
}

我将运行cronjob几天,如果它不能可靠地工作,我将与您联系。

您可以轻松使用CURL。谷歌类似的东西,“CURL登录,CURL facebook登录”

你确定吗?我正准备发布一个基于此的答案:它在AICS起到了作用,我尝试了一个我没有登录Facebook的浏览器的发布url。网站的访问令牌是永久的,但不适用于特定用户。抱歉,我只是误读了内容。我从我的手机atm上看:p将纠正我自己的错误最佳实践是使用facebookphpsdk(),它在下面执行curl请求。但你还远远没有用这个来回答我的问题。不,我不是。使用curl,您可以在现场登录。然后获取内容、查找表单、预匹配并发布数据。不管怎样,问题在于不需要以用户身份登录就可以发布。意思:如何获取访问令牌。详情见我的答案。谢谢。如何在不发布用户ID和会话的情况下发布数据。您需要登录。Usr Curl for bot登录和发布尝试过之后,facebook立即向我发送警告,说有人试图访问我的帐户。感觉不太对劲。