Всем привет, кто решил посетить мою страничку. Давно ничего не писал тут, решил продолжить. В этой статье я расскажу как автоматически загружать с помощью php фотографии и публиковать их на стену в ВКонтакте.
В прошлой статье я рассказал как простым способом и автоматически, например через cron, публиковать записи к себе на стену или на стену сообщества. В этой статье мы немного расширим наш класс Model_Vk
и добавим туда несколько функций. Так же нужно в запрос получения access_token добавить scope photos, выглядеть это будет так:
http://oauth.vk.com/authorize?client_id=YOUR_CLIENT_ID&scope=wall,offline,photos&redirect_uri=http://oauth.vk.com/blank.html&response_type=token
Функция загрузки фотографии uploadImage:
public function uploadImage($file, $group_id = null) {
$params = array();
if( $group_id ) {
$params['gid'] = $group_id;
}
//Получаем сервер для загрузки изображения
$response = $this->method("photos.getWallUploadServer", $params);
if( isset($response) == false ) {
print_r($response);
exit;
}
$server = $response->response->upload_url;
//Отправляем файл на сервер
$ch = curl_init($server);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array('photo' => class_exists("CURLFile", false) ? new CURLFile($file) : "@" . $file));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: multipart/form-data; charset=UTF-8'));
$json = json_decode(curl_exec($ch));
curl_close($ch);
//Сохраняем файл на стену
$photo = $this->method("photos.saveWallPhoto", array(
"server" => $json->server,
"photo" => ($json->photo),
"hash" => $json->hash,
"gid" => $group_id
));
if( isset($photo->response[0]->id) ) {
return $photo->response[0]->id;
} else {
return false;
}
}
Теперь разберем подробнее, что именно делает данная функция. На входе функция получает полный путь до файла, который необходимо загрузить и индетификатор группы (если необходимо опубликовать фотографию на стену группы). Далее методом photos.getWallUploadServer
мы запрашиваем у ВКонтакте, куда нам необходимо отправлять фотографию. После получения ссылки на загрузку фотографии производим ее непосредственную отправку и получаем данные об успешной отправке. Следующим шагом мы сохраняем фотографию в альбоме стены, это нужно для того, чтобы фотография получила свой индентификатор и могла быть опубликована на стене.
Следующим шагом модифицируем файлик vk_post.php следующим образом:
<?
include "vk.php";
$access_token = "ACCESS_TOKEN";
$user_id = "USER_ID";
$image_path = "IMAGE_PATH";
//Инициализируем класс
$vk = new Model_Vk($access_token);
//Загружаем изображение
$upload_img = $vk->uploadImage($image_path);
//Публикуем пост на стену
$params = array(
"owner_id" => $user_id,
"message" => "Hello world!",
"attachments" => $upload_img
);
$post = $vk->method("wall.post", $params);
Помнима, что путь к файлу изображения должен быть абсолютным в вашей файловой системе, т.е. /var/www/img/post.jpg. При публикации на стену группы в ВКонтакте в функции указываем дополнительную переменную $user_id (ID должен быть без знака минус "-"), получиться такая запись:
$upload_img = $vk->uploadImage($image_path, $user_id);
А в параметрах публикации поста, указываем уже со знаком минус "-":
$params = array(
"owner_id" => "-" . $user_id,
"message" => "Hello world!",
"attachments" => $upload_img
);
Запускаем файл через консоль и смотрим на стену пользователя.
$ php vk_post.php
Если вам понравилась статья, жмакните на рекламку ниже :)
P.Nixx, 02.12.2014, 11:58