質問

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');
}
}
役に立ちましたか?

解決

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!

他のヒント

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top