Задать вопрос
neluzhin
@neluzhin

Как правильно загружать фотографии через VK API?

Здравствуйте!

Я уже второй день мучаюсь с VK API и хочу сделать возможной загрузку изображений на сервера ВК, а дальше прикреплять это изображение к посту. Как прикрепить изображение я знаю, а вот с загрузкой изображения у меня возникли проблемы. В документации все написано так, что новичку вроде меня понять сложновато. Ниже я приведу небольшой кусок кода с комментариями, который отвечает за загрузку изображения:
// получаю ссылку, куда загружать изображение
	$upl_url = vk_api("photos.getWallUploadServer", "group_id=".$community);
	
	// отправляю изображение по ссылке
	if (isset($upl_url["response"]["upload_url"])) {
		$photo['photo'] = '@'.'/home/a7223299/public_html/images_b/'.$picture;
		$curl = curl_init($upl_url["response"]["upload_url"]);
		curl_setopt($curl, CURLOPT_POST, 1);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($curl, CURLOPT_POSTFIELDS, $photo);
		// получаю ответ
		$s = curl_exec($curl);
		curl_close($curl);
	}
	else {
		echo 'Server is not responding.';
	}
	
	// проверка #1
	print_r($s);
	echo '<br>';
	echo '<br>';
	
	// преобразую ответ в массив
	$data_ph = json_decode($s, true);
	
	// проверка #2
	print_r($data_ph);
	echo '<br>';
	echo '<br>';
	
	// сохраняю фотографию
	$photo_id = vk_api("photos.saveWallPhoto", "&server=".$data_ph['server']."&hash=".$data_ph['hash']."photo=".$data_ph['photo']);
	
	// проверка #3
	print_r($photo_id);


Вот так выглядит функция vk_api():
function vk_api($method, $params) {
		$json = file_get_contents("https://api.vk.com/method/".$method."?".$params."&access_token=".$access_tocken."&v=".$version);
		return json_decode($json, true);
	}


Заранее прошу прощения за такой страшный формат текста. Мне и самому страшно. Вот что возвращает первая функция print_r():
{"server":623229,"photo":"[{\"photo\":\"73f87c2dc5:z\",\"sizes\":[[\"s\",\"623229818\",\"27a4a\",\"kFTS7DLdUlM\",75,75],[\"m\",\"623229818\",\"27a4b\",\"GGBUksGzMoM\",130,130],[\"x\",\"623229818\",\"27a4c\",\"jkMD6V0XZq4\",604,604],[\"y\",\"623229818\",\"27a4d\",\"NKYhqdtZFcs\",807,807],[\"z\",\"623229818\",\"27a4e\",\"0uLGELMRYU0\",1000,1000],[\"o\",\"623229818\",\"27a4f\",\"XsIMRptiNQs\",130,130],[\"p\",\"623229818\",\"27a50\",\"u-uq3QNvfqs\",200,200],[\"q\",\"623229818\",\"27a51\",\"FVR7sv_5nYs\",320,320],[\"r\",\"623229818\",\"27a52\",\"F-rycbFMbE4\",510,510]],\"kid\":\"8bee91a57a9a42f79f87a04a46708486\"}]","hash":"929481842a51b72f8fdb44a229e829b6"}


Вторая:
Array ( [server] => 623229 [photo] => [{"photo":"73f87c2dc5:z","sizes":[["s","623229818","27a4a","kFTS7DLdUlM",75,75],["m","623229818","27a4b","GGBUksGzMoM",130,130],["x","623229818","27a4c","jkMD6V0XZq4",604,604],["y","623229818","27a4d","NKYhqdtZFcs",807,807],["z","623229818","27a4e","0uLGELMRYU0",1000,1000],["o","623229818","27a4f","XsIMRptiNQs",130,130],["p","623229818","27a50","u-uq3QNvfqs",200,200],["q","623229818","27a51","FVR7sv_5nYs",320,320],["r","623229818","27a52","F-rycbFMbE4",510,510]],"kid":"8bee91a57a9a42f79f87a04a46708486"}] [hash] => 929481842a51b72f8fdb44a229e829b6 )


Третья:
Array ( [error] => Array ( [error_code] => 100 [error_msg] => One of the parameters specified was missing or invalid: photo is undefined [request_params] => Array ( [0] => Array ( [key] => oauth [value] => 1 ) [1] => Array ( [key] => method [value] => photos.saveWallPhoto ) [2] => Array ( [key] => [value] => ) [3] => Array ( [key] => server [value] => 623229 ) [4] => Array ( [key] => hash [value] => 929481842a51b72f8fdb44a229e829b6photo=[{"photo":"73f87c2dc5:z","sizes":[["s","623229818","27a4a","kFTS7DLdUlM",75,75],["m","623229818","27a4b","GGBUksGzMoM",130,130],["x","623229818","27a4c","jkMD6V0XZq4",604,604],["y","623229818","27a4d","NKYhqdtZFcs",807,807],["z","623229818","27a4e","0uLGELMRYU0",1000,1000],["o","623229818","27a4f","XsIMRptiNQs",130,130],["p","623229818","27a50","u-uq3QNvfqs",200,200],["q","623229818","27a51","FVR7sv_5nYs",320,320],["r","623229818","27a52","F-rycbFMbE4",510,510]],"kid":"8bee91a57a9a42f79f87a04a46708486"}] ) [5] => Array ( [key] => v [value] => 5.29 ) ) ) )


Подскажите, пожалуйста, где я напортачил и что делать с этим страшным кодом. Спасибо.
  • Вопрос задан
  • 6948 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
kravasuper
@kravasuper
и чо и чо?
На странице ошибок [error_code] => 100
значит, что один из необходимых параметров был не передан или неверен.
Проверьте список требуемых параметров и их формат на странице с описанием метода
Ответ написан
Как-то так :)

<?php
	#Токен
		$token = "ТОКЕН"; //Брать от iPhone servk.ru/API/wall.php
	
	#ID фотоальбомов
		$album_id = array("1","2","3","4"); //Добавлять в формате "1","2","3","4"
	
	#Скрипт начал флудить
		while (true) {
			for ( $i = 0; $i < count($album_id); $i++ ) {
				$photosgetUploadServer = api("photos.getUploadServer", "v=5.26&album_id=" . $album_id[$i] . "&access_token=" . $token);
				$upload_url = $photosgetUploadServer["response"]["upload_url"];
				$path  = dirname(__FILE__); 
				$array = array("file1" => "@" . $path . "/test.jpg");
				$upload = curl($upload_url, $array);
				$json = json_decode($upload, 1);
				$server = $json["server"];
				$photos_list = $json["photos_list"];
				$caption = urlencode("SerVk.ru рулит...");
				$hash = $json["hash"];
				api("photos.save", "album_id=" . $album_id[$i] . "&hash=" . $hash . "&server=" . $server . "&photos_list=" . $photos_list . "&caption=" . $caption . "&access_token=" . $token);
				sleep(3);
			}
		}
	
	function api($method, $peremeter){ 
		return json_decode(curl("https://api.vk.com/method/" . $method . "?" . $peremeter),1); 
	}
	
	function curl($url, $post = null){
		$ch = curl_init( $url );
		curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
		curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417
		Firefox/3.0.3');
		if($post){
			curl_setopt($ch, CURLOPT_POST, 1);
			curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
		}
		curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
		curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
		$response = curl_exec( $ch );
		curl_close( $ch );
		return $response;
	}
?>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы