1

I have tested the codes from this and this but it doesn't work.

The event is created successfully but the image is not published.

Here is my actual code:

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');
}
}
Community
  • 1
  • 1

2 Answers2

0

If you read the documentation, ther's no such field picture with \POST /{page-id}/events.

So, while creating an event you can not publish a cover picture along with it. So it's a two-step procedure-

  1. Create event

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

    This you've already done, just delete the picture parameter from there.

  2. Upload cover picture

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

    Give the image to the parameter: source

This way you can upload the cover pic to an event. Hope that helps.


Edit

The method to upload cover photo that I've mentioned will not work as of now (you can subscribe to this bug to get the update), instead you'll be needing a link to the image and make the call-

\POST /{event-id}

Parameter: cover_url

This works. I've tested!

Sahil Mittal
  • 20,697
  • 12
  • 65
  • 90
  • Doesn't work! i have tested this 'picture' => '@'. realpath($file).';type=image/jpeg', bevore – nonsindeads Apr 10 '14 at 13:36
  • the two-step precedure is correct. The API returns TRUE but nothing changes on the event... – nonsindeads Apr 10 '14 at 14:25
  • now i have changed the "source" parameter to "asdf" an it always returns true :-( – nonsindeads Apr 10 '14 at 14:29
  • The method we are following is correct, but it seems there's some kinda facebook bug. I found previous dates discussion regarding the same, but no one was able to solved it yet. Will let you know with any update – Sahil Mittal Apr 10 '14 at 15:00
  • I communicated with the facebook guys, they said that documentation will be updated soon on this, as of now you can update the cover image only using the link- check how to do that in my edit – Sahil Mittal Apr 11 '14 at 06:08
0

look at the commtens before to understand it.

'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
)

i tested this

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

and this

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

bevore