Как загружать встроенные изображения с помощью пакетного запроса Graph API?

Я пытаюсь загрузить изображения, используя пакетный запрос Graph API, но я не могу загрузить с помощью встроенного изображения, может ли кто-нибудь мне помочь?

Документы пакетного запроса: https://developers.facebook.com/docs/reference/api/batch/

Загрузка фотокартинок: http://developers.facebook.com/blog/post/493/

Photo batch uploads blog post code работает отлично, но я хочу загружать изображения с моего сервера, а не с моего компьютера, Ex: /public_html/image/pic.jpg, и я не уверен, как я могу это сделать.

EDIT: я использую PHP SDK 3.0.1

Вот мой код:

<?php CODE WAS CHANGED AND THE PROBLEM IS FIXED ALREADY, SEE THE ANSWER BELOW ?> 

Это из их документов:

Загрузка двоичных данных

Двоичные данные могут быть указаны как часть части multipart / mime запроса пакетного API. API-интерфейс пакетного графика позволяет загружать несколько двоичных элементов как часть пакетного вызова. Чтобы сделать это, вам нужно добавить все бинарные элементы в виде вложений multipart / mime в ваш запрос и потребовать, чтобы каждая операция ссылалась на его двоичные элементы, используя свойство «attach_files» в операции. Свойство «attach_files» может принимать разделенный запятыми список имен вложений.

В следующем примере показано, как загрузить 2 фотографии в один пакетный вызов:

 curl –F 'access_token=…' \ -F 'batch=[{“method”:”POST”, \ “relative_url”:”me/photos”, \ “body”:”message=My cat photo” \ "attached_files":"file1" \ }, {“method”:”POST”, \ “relative_url”:”me/photos”, \ “body”:”message=My dog photo” \ "attached_files":"file2" \ }, ]' -F 'file1=@cat.gif' \ -F 'file2=@dog.jpg' \ https://graph.facebook.com 

EDIT 2:

Related of "Как загружать встроенные изображения с помощью пакетного запроса Graph API?"

Первая проблема, которую я вижу, заключается в том, что пакет не должен быть частью URL-адреса, а скорее частью параметров …

См. Пример сырой партии:

 $batch = array(); $req = array( 'method' => 'GET', 'relative_url' => '/me' ); $batch[] = json_encode($req); $req = array( 'method' => 'GET', 'relative_url' => '/me/albums' ); $batch[] = json_encode($req); $params = array( 'batch' => '[' . implode(',',$batch) . ']' ); try { $info = $facebook->api('/','POST',$params); } catch(FacebookApiException $e) { error_log($e); $info = null; } if(!empty($info)){ if($info[0]['code'] == '200'){ $user_profile = json_decode($info[0]['body']); } if($info[1]['code'] == '200'){ $user_albums = json_decode($info[1]['body']); } echo "<pre>User Profile:\n"; print_r($user_profile); echo "\nAlbums\n"; print_r($user_albums); echo "<pre>"; } 

Обратите внимание, что формат $ facebook-> api отформатирован …

РЕДАКТИРОВАТЬ:

Вот загруженная загрузка пакетного изображения:

 $files = array( '/data/Pictures/pic1.jpg', '/data/Pictures/pic2.jpg', '/data/Pictures/pic3.jpg' ); //Must set upload support to true $facebook->setFileUploadSupport(true); $batch = array(); $params = array(); $count = 1; foreach($files as $file){ $req = array( 'method' => 'POST', 'relative_url' => '/me/photos', 'attached_files' => 'file' . $count ); //add this request to the batch ... $batch[] = json_encode($req); //set the filepath for the file to be uploaded $params['file'.$count] = '@' . realpath($file); $count++; } $params['batch'] = '[' . implode(',',$batch) . ']'; try{ $upload = $facebook->api('/','post',$params); } catch(FacebookApiException $e) { error_log($e); $upload = null; } //View the results ... if(!is_null($upload)){ echo "<pre>" . print_r($upload,1) . "<pre>"; echo "<hr />"; } 

Просто протестирован и работает как шарм …

Ну, я не слишком уверен, и я не могу проверить в данный момент, но

http://au.php.net/manual/en/function.curl-setopt.php

Посмотрите его на CURLOPT_POSTFIELDS, он говорит:

Полные данные для отправки в HTTP-режиме «POST». Чтобы опубликовать файл, добавьте имя файла с помощью @ и используйте полный путь. Тип файла может быть явно указан, следуя имени файла с типом в формате '; type = mimetype'. Этот параметр может быть передан как строка с urlencoded, например 'para1 = val1 & para2 = val2 & …', или как массив с именем поля в качестве ключа и данными поля в качестве значения. Если значением является массив, заголовок Content-Type будет установлен в multipart / form-data. Начиная с PHP 5.2.0, файлы, переданные этому параметру с префиксом @, должны быть в форме массива для работы.

Вот еще один пример CURL:

CURL PHP отправить изображение

Итак, что вам нужно сделать, это

 $queries = array( array("method" => "POST", "relative_url" => "me/photos","body" => "message=cool","attached_files" => 'file1') ); 

а также

 $batch = $facebook->api("/?batch=".json_encode($queries)."&file1=@pic.jpg", 'POST'); 
 // // File you want to upload/post $post_data['file1'] = "@D:/home/2.jpg"; $post_data['file2'] = "@D:/home/1.jpg"; // Initialize cURL $ch = curl_init(); // Set URL on which you want to post the Form and/or data curl_setopt($ch, CURLOPT_URL, $post_url); // Data+Files to be posted curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); // Pass TRUE or 1 if you want to wait for and catch the response against the request made curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // For Debug mode; shows up any error encountered during the operation curl_setopt($ch, CURLOPT_VERBOSE, 1); // Execute the request $response = curl_exec($ch); // echo curl_errno($ch); // echo curl_error($ch); // Just for debug: to see response echo $response; 

Это будет работать, чтобы убедиться, что он работает для меня