我目前正在开发一个自动在 Facebook 墙上发布的应用程序。我浏览了所有讨论此类应用程序的博客和文章。最后我得出了这个结果。首先,我必须对用户进行身份验证并授予所需的权限,如下面的 JavaScript 代码所示:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Title</title>
<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
</head>
<body>
<div id="fb-root"></div>
<script type="text/javascript">
$(document).ready(function(){
var appId = "xxxxxxxxxxxxx";
var redirectUrl = "http://www.mydomain.com";
if (0 <= window.location.href.indexOf ("error_reason"))
{
$(document.body).append ("<p>Authorization denied!</p>");
return;
}
window.fbAsyncInit = function(){
FB.init({
appId : appId,
status : true,
cookie : true,
oauth : true,
channel: true,
channelURL: "http://www.mydomain.com/channel/"
});
FB.getLoginStatus (onCheckLoginStatus);
};
(function(d)
{
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
function onCheckLoginStatus (response)
{
if (response.status != "connected")
{
top.location.href = "https://www.facebook.com/dialog/oauth?client_id=" + appId + "&redirect_uri=" + encodeURIComponent (redirectUrl) + "&scope=publish_stream,email,user_birthday,publish_actions,offline_access";
}
else
{
// Start the application (this is just demo code)! ///////////////////////////////////
$(document.body).append ("<p>Authorized!</p>");
FB.api('/me', function (response) {
$(document.body).append ("<pre>" + JSON.stringify (response, null, "\t") + "</pre>");
});
//////////////////////////////////////////////////////////////////////////////////////
}
}
});
</script>
</body>
</html>
在用户的会话成功通过身份验证并且他接受了我代表他发布的权限请求后,这是我工作了两个多星期从一个站点移动到另一个站点的最难的代码。但这没用。
我发现以下代码发布帖子但仅在当前登录用户的墙上:
<script type="text/javascript">
function updateStatusViaJavascriptAPICalling(){
var status = document.getElementById('status').value;
FB.api('/me/feed', 'post', { message: status }, function(response) {
if (!response || response.error) {
alert('Error occured');
} else {
alert('Status updated Successfully');
}
});
}
它就像一个魅力,但是当我更改/me/feed
为另一个 Facebook uid 时,它说作为这个应用程序发布给其他用户不起作用。但是我尝试将应用访问令牌和用户访问令牌更改post
为PHP feed dialog
但也是徒劳的。
我尝试了 PHP 或 JavaScript 的所有代码来完成这项工作,但不幸的是没有任何效果。尤其是在 Facebook 阻止应用程序开发人员在朋友的墙上发帖之后。
我所需要的只是代表我的用户在他们的墙上自动发布,即使他们处于离线状态。我怎样才能做到这一点?