Вконтакте API VK загрузка нескольких фотографий в альбом

sonya2003

Создатель
Регистрация
6 Окт 2007
Сообщения
25
Реакции
2
У меня вопрос по загрузке фото в альбом: API Vkontakte предусматривает загрузку не более 5 фотографий за один раз, при этом при сохранении фотографий в альбоме, вызовом метода photos.save предусмотрено один текстовой параметр caption, т.е. комментарий у всех пяти фото будет один и тот же.
Можно ли как-то передавать пять разных caption?
 
Загрузка и сохранение - это разные вещи.
Вам надо вызвать photos.save для каждой загруженной.

Для экономии лимитов и ускорения обработки можно попробовать объединить запросы в один через Для просмотра ссылки Войди или Зарегистрируйся
 
Столкнулась с проблемой при выгрузке в контакт фотографий из каталога. По какой-то причине часть фотографий не сохраняется. При выгрузке на сервер в контакте получаю ответ:
Код:
Array
(
    [server] => 638819
    [photos_list] => [{"photo":"fe0f4a4682:w","sizes":[["s","638819746","b57a","qxwzlvwGSmg",56,75],["m","638819746","b57b","PATwD_niuUM",97,130],["x","638819746","b57c","jxVeU0SLH6I",453,604],["y","638819746","b57d","nvpTMD4qgOQ",605,807],["z","638819746","b57e","bP5SsUTcwuc",810,1080],["w","638819746","b57f","XX9jFzb_y0Y",900,1200],["o","638819746","b580","Ob6onuUREpI",130,173],["p","638819746","b581","EdcoeN4JfR0",200,267],["q","638819746","b582","YpsE7a65V7g",320,427],["r","638819746","b583","Y7B-7yBibu0",510,680]],"kid":"98fbf90466a296a446f7156a3693def7","debug":"xswmwxwywzwwwowpwqwrw"}]
    [aid] => 235078544
    [hash] => a04973efcac15b4ef8a2a988a83e6993
    [gid] => 125769423
)

Вроде бы все верно. Далее пытаюсь сохранить фото методом photos.save:
PHP:
$params = [
'group_id'=>$group_id,
'album_id'=>$album_id,
'server'=> $response['server'],
'photos_list'=>$response['photos_list'],
'hash'=>$response['hash'],
'caption'=>$product['url'].$product['title'].'Цена: '.$product['price'].' руб.'.PHP_EOL.$product['description'].$product['size'].$product['material'].$product['brand'].$product['code'],
'access_token'=>$access_token,
'v'=>$v,
];
$vk_method = 'photos.save';
$url = $vk_url.$vk_method.'?'.http_build_query($params);

$response = json_decode(file_get_contents($url),true);

выводит предупреждение:

Код:
Warning: file_get_contents(https://api.vk.com/method/photos.save?group_id=125769423&album_id=235078544&server=638819&photos_list=%5B%7B%22photo%22%3A%22fe0f4a4682%3Aw%22%2C%22sizes%22%3A%5B%5B%22s%22%2C%22638819746%22%2C%22b57a%22%2C%22qxwzlvwGSmg%22%2C56%2C75%5D%2C%5B%22m%22%2C%22638819746%22%2C%22b57b%22%2C%22PATwD_niuUM%22%2C97%2C130%5D%2C%5B%22x%22%2C%22638819746%22%2C%22b57c%22%2C%22jxVeU0SLH6I%22%2C453%2C604%5D%2C%5B%22y%22%2C%22638819746%22%2C%22b57d%22%2C%22nvpTMD4qgOQ%22%2C605%2C807%5D%2C%5B%22z%22%2C%22638819746%22%2C%22b57e%22%2C%22bP5SsUTcwuc%22%2C810%2C1080%5D%2C%5B%22w%22%2C%22638819746%22%2C%22b57f%22%2C%22XX9jFzb_y0Y%22%2C900%2C1200%5D%2C%5B%22o%22%2C%22638819746%22%2C%22b580%22%2C%22Ob6onuUREpI%22%2C130%2C173%5D%2C%5B%22p%22%2C%22638819746%22%2C%22b581%22%2C%22EdcoeN4JfR0%22%2C200%2C267%5D%2C%5B%22q%22%2C%22638819746%22%2C%22b582%22%2C%22YpsE7a65V7g%22%2C320%2C427%5D%2C%5B%22r%22%2C%22638819746%22%2C%22b583%22%2C%22Y7B-7yBibu0%22%2C510%2C680%5D%5D%2C%22kid%22%3A%2298fbf90466a296a446f7156a3 in D:\OpenServer\domains\localhost\savephotos2.php on line 75

При этом возвращает пустой результат и фото не сохраняются. Вместо file_get_contents пробовала передавать курлом, ошибок не выводит, но также ничего не сохраняет.
Так как выгружаемый каталог небольшой, то проанализировав выгрузку увидела, что не сохраняются одни и те же фото (из 344 не сохраняются 99). Вот для примера file19.jpg не сохраняется, а file25.jpg сохраняется. Фото с одного сайта, по размеру идентичны, что не так c фото file19.jpg, почему не сохраняется, при этом как я понимаю на сервера в контакте file19.jpg ушло успешно?
 

Вложения

  • file19.jpg
    file19.jpg
    334,1 KB · Просмотры: 3
  • file25.jpg
    file25.jpg
    414,6 KB · Просмотры: 1
Последнее редактирование:
Загрузка и сохранение - это разные вещи.
Вам надо вызвать photos.save для каждой загруженной.

Для экономии лимитов и ускорения обработки можно попробовать объединить запросы в один через Для просмотра ссылки Войди или Зарегистрируйся

Не получается загрузить сразу пять, не возвращает никакого ответа:
PHP:
   $file1 = $_SERVER['DOCUMENT_ROOT'].'/file1.jpg';
     $file1 = curl_file_create($file1, mime_content_type($file1), pathinfo($file1)['basename']);
    
     $file2 = $_SERVER['DOCUMENT_ROOT'].'/file2.jpg';
     $file2 = curl_file_create($file2, mime_content_type($file2), pathinfo($file2)['basename']);
    
     $file3 = $_SERVER['DOCUMENT_ROOT'].'/file3.jpg';
     $file3 = curl_file_create($file3, mime_content_type($file3), pathinfo($file3)['basename']);
    
     $file4 = $_SERVER['DOCUMENT_ROOT'].'/file4.jpg';
     $file4 = curl_file_create($file4, mime_content_type($file4), pathinfo($file4)['basename']);
    
     $file5 = $_SERVER['DOCUMENT_ROOT'].'/file5.jpg';
     $file5 = curl_file_create($file5, mime_content_type($file5), pathinfo($file5)['basename']);
    
     $post_params=[
     'file1'=>$file1,
     'file2'=>$file2,
     'file3'=>$file3,
     'file4'=>$file4,
      'file5'=>$file5,
     ];
  
     //первый этап - получаем адрес для выгрузки фотографий
     $params = [
     'group_id'=>$group_id,
     'album_id'=>$album_id,
     'access_token'=>$access_token,
     'v'=>$v,
     ];
     $vk_method = 'photos.getUploadServer';
     $url = $vk_url.$vk_method.'?'.http_build_query($params);  
     $response = json_decode(file_get_contents($url),true);

  
     //второй этап - передача фотографий на сервера вконтакте
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $response['response']['upload_url']);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: multipart/form-data; charset=UTF-8']);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $response = json_decode(curl_exec($ch), true);
    curl_close($ch);

Массив $response на втором этапе возвращается пустой, что не так?
 
Назад
Сверху