facebook通过编程在facebook页面上发布一张大照片

facebook通过编程在facebook页面上发布一张大照片,facebook,facebook-graph-api,facebook-javascript-sdk,Facebook,Facebook Graph Api,Facebook Javascript Sdk,我创建了一个假的facebook页面(娱乐页面)。 在所附图像的左侧,我手动制作了第一篇帖子(下面的一篇带有 大照片),以及一张编程的照片(上面的照片和小照片) 我用于小照片的代码如下所示: FB.api( 'https://graph.facebook.com/[myAppId]/feed', 'post', { message: 'this is a grumpy cat', descri

我创建了一个假的facebook页面(娱乐页面)。 在所附图像的左侧,我手动制作了第一篇帖子(下面的一篇带有 大照片),以及一张编程的照片(上面的照片和小照片)

我用于小照片的代码如下所示:

    FB.api(
        'https://graph.facebook.com/[myAppId]/feed',
        'post',
        {
            message: 'this is a grumpy cat',
            description: "This cat has been lost for decades now, please call at 654321486",
            picture: "http://laughingsquid.com/wp-content/uploads/grumpy-cat.jpg"

        },
        function (response) {
            if (!response) {
                alert('Error occurred.');
            } else if (response.error) {
                document.getElementById('result').innerHTML =
                    'Error: ' + response.error.message;
            } else {
                document.getElementById('result').innerHTML =
                    '<a href=\"https://www.facebook.com/' + response.id + '\">' +
                        'Story created.  ID is ' +
                        response.id + '</a>';
            }
        }
    );
FB.api(
'https://graph.facebook.com/[myAppId]/feed',
"岗位",,
{
信息:“这是一只脾气暴躁的猫”,
描述:“这只猫已经失踪几十年了,请致电654321486”,
图片:“http://laughingsquid.com/wp-content/uploads/grumpy-cat.jpg"
},
功能(响应){
如果(!响应){
警报('发生错误');
}else if(response.error){
document.getElementById('result').innerHTML=
'错误:'+response.Error.message;
}否则{
document.getElementById('result').innerHTML=
'';
}
}
);
但我对此并不满意: 我正在开发的应用程序可以列出丢失的动物, 因此,如果有大照片,效果会更好

我在facebook开发者页面上没有看到任何关于如何做到这一点的例子。 我相信这是可能的,但我还没有发现。
你们以前有没有遇到过这个问题?

要做到这一点,你们需要做两件事。我不能100%确定JS-SDK是否允许您执行第二步,但如果需要,您可以使用服务器端SDK

应用程序需要请求
管理页面
发布流
权限。然后调用
/{user id}/accounts
,它将返回授权用户管理的所有页面及其各自的页面

将为要发布到的页面返回的页面访问令牌存储在变量中。将要上载的照片设置为
参数(必须是运行代码的服务器的本地参数),并使用页面访问令牌(而不是应用程序访问令牌!)向
/{page\u id}/photos发出
POST
请求

因此,它将遵循以下原则:

FB.api('/{page_id}/photos', 'post', { source: 'path/to/image.jpg', access_token: {page_access_token}, message: 'hey heres a photo' }, function(response) {
  if (!response || response.error) {
    alert('Error occured');
  } else {
    alert('Post ID: ' + response.id);
  }
});
我相信应用程序在初始化时还需要将
fileUpload
指定为true

如果对您有帮助的话,我很乐意与您分享我的PHP代码。最后,我做到了! 我正在发布解决方案,感谢cdbconcepts为我指明了正确的方向。 再次阅读文档后:

他们说: “您还可以通过提供带有照片url的url参数来发布照片。” url不必位于同一台服务器上,如下面的示例所示, 它与JSSDK一起工作

这是最后一个对我有用的代码:

<html>
<head>
    <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
</head>
<body>

<div id="fb-root"></div>
<script>

var appId = 'Replace with your appId';

window.fbAsyncInit = function () {
    FB.init({
        appId: appId,
        status: true, // check login status
        cookie: true, // enable cookies to allow the server to access the session
        xfbml: true  // parse XFBML
    });


    var options = {
        scope: 'manage_pages, publish_stream'
    };

    FB.Event.subscribe('auth.authResponseChange', function (response) {
        if (response.status === 'connected') {
            testAPI();
        } else if (response.status === 'not_authorized') {
            FB.login(function () {
            }, options);
        } else {
            FB.login(function () {
            }, options);
        }
    });
};

// Load the SDK asynchronously
(function (d) {
    var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
    if (d.getElementById(id)) {
        return;
    }
    js = d.createElement('script');
    js.id = id;
    js.async = true;
    js.src = "//connect.facebook.net/en_US/all.js";
    ref.parentNode.insertBefore(js, ref);
}(document));

// Here we run a very simple test of the Graph API after login is successful.
// This testAPI() function is only called in those cases.
function testAPI() {
    console.log('Welcome!  Fetching your information.... ');
    FB.api('/me', function (response) {
        console.log('Good to see you, ' + response.name + '.');
    });
}

function error(msg) {
    document.getElementById('result').innerHTML = 'Error: ' + msg;
}

function postApi() {

    var myPageID = '484364788345193';
    var targetPageName = 'Entertainment page of ling';
    var pathToImg = 'http://laughingsquid.com/wp-content/uploads/grumpy-cat.jpg';
    var accessToken = null;

    FB.api(
        'https://graph.facebook.com/me/accounts',
        function (response) {
            if (!response || response.error) {
                console.log(response);
                error('Error occured');
            } else {
                console.log(response);
                for (var i in response.data) {
                    if (targetPageName === response.data[i].name) {
                        accessToken = response.data[i].access_token;
                    }
                }
                if (accessToken) {
                    FB.api(
                        'https://graph.facebook.com/' + myPageID + '/photos',
                        'post',
                        {
                            url: pathToImg,
                            access_token: accessToken,
                            message: "Tadaam"
                        },
                        function (response) {
                            if (!response || response.error) {
                                console.log(response);
                                error('Error occured');
                            } else {
                                console.log(response);
                                alert("PostId: " + response.id);
                            }
                        }
                    );
                }
                else {
                    error("Page not found in the accounts: " + targetPageName);
                }
            }
        }
    );

}


function logout() {
    FB.logout();
}


$(document).ready(function () {
    $("#logout").click(function () {
        logout();
    });
    $("#post1").click(function () {
        postApi();
    });
});


</script>

<!--
  Below we include the Login Button social plugin. This button uses the JavaScript SDK to
  present a graphical Login button that triggers the FB.login() function when clicked. -->

<fb:login-button show-faces="true" width="200" max-rows="1"></fb:login-button>


<button id="logout">Logout</button>
<button id="post1">post something</button>
<div id="result"></div>
</body>
</html>

var appId='替换为您的appId';
window.fbAsyninit=函数(){
FB.init({
appId:appId,
状态:true,//检查登录状态
cookie:true,//启用cookie以允许服务器访问会话
xfbml:true//解析xfbml
});
变量选项={
作用域:“管理\u页面,发布\u流”
};
FB.Event.subscribe('auth.authResponseChange',函数(响应){
如果(response.status===“已连接”){
testAPI();
}else if(response.status===“未授权”){
FB.login(函数(){
},选项);
}否则{
FB.login(函数(){
},选项);
}
});
};
//异步加载SDK
(职能(d){
var js,id='facebook jssdk',ref=d.getElementsByTagName('script')[0];
if(d.getElementById(id)){
返回;
}
js=d.createElement('script');
js.id=id;
js.async=true;
js.src=“//connect.facebook.net/en_US/all.js”;
ref.parentNode.insertBefore(js,ref);
}(文件);
//在这里,我们在登录成功后运行一个非常简单的Graph API测试。
//此testAPI()函数仅在这些情况下调用。
函数testAPI(){
log('欢迎!获取您的信息…);
FB.api('/me',函数(响应){
log(“很高兴见到你,+response.name+”);
});
}
函数错误(msg){
document.getElementById('result')。innerHTML='错误:'+msg;
}
函数postApi(){
var myPageID='484364788345193';
var targetPageName='娱乐页面,共页';
var pathToImg=http://laughingsquid.com/wp-content/uploads/grumpy-cat.jpg';
var accessToken=null;
FB.api(
'https://graph.facebook.com/me/accounts',
功能(响应){
如果(!response | | response.error){
控制台日志(响应);
错误('发生错误');
}否则{
控制台日志(响应);
for(响应中的var i.data){
if(targetPageName==response.data[i].name){
accessToken=response.data[i].accessToken;
}
}
if(accessToken){
FB.api(
'https://graph.facebook.com/“+myPageID+”/photos”,
"岗位",,
{
url:pathToImg,
访问令牌:访问令牌,
信息:“Tadaam”
},
功能(响应){
如果(!response | | response.error){
控制台日志(响应);
错误('发生错误');
}否则{
控制台日志(响应);
警报(“posted:+response.id”);
}
}
);
}
否则{
错误(“页面不完整”)