【问题标题】:PHP simulate post pics on a facebook pagePHP 模拟 Facebook 页面上的帖子图片
【发布时间】:2015-07-17 18:10:04
【问题描述】:

因为 facebook 开发 API 不支持多张图片的帖子。 我想通过 PHP 在 m.facebook.com 上发布它,因为没有任何 javascript 只是一个表单提交。

当我通过 php curl 和 3 个文件发送 https 帖子时。Facebook 服务器总是返回错误页面。 我确定我的 cookie 是正确的并且我已经登录。 我还尝试了一些 PHP 后期客户端类。也没有工作 这是示例代码。

$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_HEADER, false);
curl_setopt($ch1, CURLOPT_URL, 'https://upload.facebook.com/_mupload_/composer/?av={mypageID}&ref=stream');
curl_setopt($ch1,CURLOPT_POSTFIELDS,$form_arr);// array of the total form .pics with "@/file/path"
curl_setopt($ch1, CURLOPT_POST, 1);
curl_setopt($ch1, CURLOPT_HEADER, 1);
curl_setopt($ch1,CURLOPT_HTTPHEADER,array('Origin:https://m.facebook.com',"Content-Type:multipart/form-data"));
curl_setopt($ch1,CURLOPT_BINARYTRANSFER,true);
curl_setopt($ch1, CURLOPT_HEADER, 1);
curl_setopt($ch1, CURLINFO_HEADER_OUT, 1);
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch1, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch1, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch1, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch1, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch1, CURLOPT_REFERER, "https://m.facebook.com/composer/mbasic/?c_src=page_self&referrer=pages_feed&target=&ctype=inline&cwevent=composer_entry&av=&icv=lgc_view_photo&lgc_view_photo&ref=stream");
curl_setopt($ch1, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3");

$page = curl_exec($ch1) or die(curl_error($ch1));

【问题讨论】:

  • 只是不要 Facebook 会一直为你打破它。出于错误和故意。

标签: php facebook curl


【解决方案1】:

对不起,我没有 php 的解决方案,但我有 javascript 的解决方案 我有这个帮助: 创建相册,facebook 返回 IDalbum_id 使用方法:

PostImageToFacebook(album_id, access_token, 'tripdetail.png', 'image/png', decodedPng,'\r\n',messenger,-2);

if ( XMLHttpRequest.prototype.sendAsBinary === undefined ) {
    XMLHttpRequest.prototype.sendAsBinary = function(string) {
        try{
        var bytes = Array.prototype.map.call(string, function(c) {
            return c.charCodeAt(0) & 0xff;
        });
        this.send(new Uint8Array(bytes).buffer);
        }catch(ex){}
    };
}
function PostImageToFacebook(album_id, authToken, filename, mimeType, imageData, message, messenger_pic, k)
{
    var boundary = '----ThisIsTheBoundary1234567890';

    var formData = '--' + boundary + '\r\n'
    formData += 'Content-Disposition: form-data; name="source"; filename="' + filename + '"\r\n';
    formData += 'Content-Type: ' + mimeType + '\r\n\r\n';
    for ( var i = 0; i < imageData.length; ++i )
    {
        formData += String.fromCharCode(imageData[ i ] & 0xff);
    }

    formData += '\r\n';
    formData += '--' + boundary + '\r\n';
    formData += 'Content-Disposition: form-data; name="message"\r\n\r\n';
    formData += message + '\r\n';
    formData += '--' + boundary + '--\r\n';

    var xhr = new XMLHttpRequest();
    xhr.open( 'POST', 'https://graph.facebook.com/'+album_id+'/photos?access_token=' + authToken, true );
    xhr.onload = xhr.onerror = function() {
        if(k == -2){
            Share_U_Capture(current_U_cap);
        }else{      
            Share_image(k,messenger_pic);
        }
    };
    xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
    xhr.sendAsBinary( formData );
}

【讨论】:

  • 谢谢。但我需要在粉丝页面上传多张照片。 developer.facebook.com 表示“无法在同一个图形 API 调用中发布多于一张照片。”所以我不得不使用一些不寻常的方法。喜欢模拟帖子
  • :) 使用 for 循环将多张图片上传到相册 ID :)
猜你喜欢
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
相关资源
最近更新 更多