使用curl的Facebook Graph-API - 创建带图片的事件失败

时间:2014-04-10 12:58:10

标签: php facebook facebook-graph-api curl facebook-php-sdk

我测试了thisthis的代码 但它不起作用。

事件已成功创建,但图片未发布。

这是我的实际代码:

require_once '../admini/config.php';

$t = getToken('appID', 'appSecret');

$file = 'Koala.jpg';
$arrData = array(
    'name' => 'Test Event',
    'start_time' => '2015-07-04', //ISO-8601 format - With Time  -     2012-07-04T19:00:00-0700
    //'end_time' => '', //optional
    'description' => 'Das erste Test-Event',
    'location' => 'Deggendorf', //Just a name
    'location_id' => '103091806397289', //place id - inserts a link to place fb page
    'ticket_url' => 'url', //URL to buy a ticket for the event
    'no_feed_story' => FALSE, //TRUE = dont display on page 
    'access_token' => 'token',
    'picture' => '@'. realpath($file),
    );
$createUrl = 'https://graph.facebook.com/page_id/events';


$test = fbcurl($createUrl, 'POST', $arrData); //Returns the event id

echo '<pre>';
print_r($test);
echo '</pre>';

function fbcurl($url, $method, $fields = array(), $auth = array()){

foreach($fields as $key => $value){
    if(!is_string($value)){
        $fields[$key] = json_encode($value);
    }
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:multipart/form-data'));
//  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
//  if(count($auth)===2)
//      curl_setopt($ch, CURLOPT_USERPWD, $auth['user'].':'.$auth['pass']);
//  }
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
if(count($fields)>0){
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields, null, '&'));

}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
//curl_setopt($ch, CURLOPT_TIMEOUT, 60);

//curl_setopt($ch, CURLOPT_USERAGENT, 'facebook-php-3.2');
//curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "Content-Type: multipart/form-data");
    //file_put_contents('fbcurllocal.txt', print_r(http_build_query($fields, null,        '&'),      true)."\n".$url);
$r = curl_exec($ch);
curl_close($ch);
if($r!=''){
    $p = explode("\r\n\r\nHTTP/", $r);
    $p = (count($p) > 1 ? 'HTTP/' : '') . array_pop($p);
    list($h, $b) = explode("\r\n\r\n", $p, 2);
    return array('header' => $h, 'body' => $b);
}else{
    return array('header' => '', 'body' => 'error');
}
}

2 个答案:

答案 0 :(得分:0)

如果您阅读了documentation,则picture没有\POST /{page-id}/events这样的字段。

因此,在创建活动时,您无法发布封面图片。所以这是一个两步程序 -

  1. 创建活动

    API:\POST /{page-id}/events - Reference

    您已经完成此操作,只需从中删除picture参数即可。

  2. 上传封面图片

    API:\POST /{event-id}/events - Reference

    将图像提供给参数:source

  3. 这样您就可以将封面照片上传到活动中。希望有所帮助。


    修改

    我提到的上传封面照片的方法目前无效(您可以订阅此bug进行更新),而不是#39 ;需要链接到图像并拨打电话 -

    \POST /{event-id}
    

    参数:cover_url

    这很有效。我已经过测试了!

答案 1 :(得分:0)

在了解它之前先看看它们。

'asdf' => '@'. realpath($file).';type=image/jpeg',

(
[header] => HTTP/1.1 200 OK
x-fb-rev: 1200162
Access-Control-Allow-Origin: *
Cache-Control: private, no-cache, no-store, must-revalidate
Content-Type: application/json; charset=UTF-8
Date: Thu, 10 Apr 2014 14:26:20 GMT
Expires: Sat, 01 Jan 2000 00:00:00 GMT
Pragma: no-cache
X-FB-Debug: nLKpXn4cbeF4AMa8kiOVMAfcKG5EFvQZmqvxFJXYC88=
Connection: keep-alive
Content-Length: 4
[body] => true
)

我测试了这个

'source' => '@'. realpath($file).';type=image/jpeg',

和这个

'source' => '@'. realpath($file),

bevore