Автоматический постинг в ВК wall.post с attachment

12.06.2018  09:39

Ваяем автоматический постинг в ВК wall.post с attachment (фото) на PHP. Погнали.
В ВК хоть и есть документация, но с wall.post есть особенности. Для начала регистрируем приложение и оно должно быть Standalone, настройки такие:
Настройки Standalone-приложения ВК

Первым делом получим токен (я использовал класс за авторством Dmitriy Nyashkin:
$secret_key = 'Защищённый ключ';
$client_id = 'ID приложения';
$v = new Vk(array(
		'client_id' => $client_id , // (обязательно) номер приложения
		'secret_key' => $secret_key, // (обязательно) получить в настройках приложения
		'user_id' => 0000, // ваш номер пользователя в вк
		'scope' => 'wall,photos', // права доступа
		'v' => '5.62' // не обязательно
	));
$url = $v->get_code_token();
echo $url;
if(!isset($_GET['code'])) {
	$url = $v->get_code_token('code','wall_post.php');
	header("Location: $url");
} else {
	$access_token = $v->get_access_token($_GET['code'],'wall_post.php');
}
if (!empty($access_token['access_token'])) {
echo $access_token['access_token'];//ваш токен после подтверждения прав
}


Пишем скрипт:
$message = 'Охуенный пост в ВК';
$message_short = 'Название фото';
$token = 'токен, полученный ранее';
if (!empty($message)){
//////////////// post
$v = '5.62'; //версия vk api
$image_path = $img;// путь до картинки
$post_data = array("file1" => '@'.$image_path);
// получаем урл для загрузки
$url = file_get_contents("https://api.vk.com/method/photos.getWallUploadServer?user_id=".$user_id."&v=".$v."&access_token=".$token); //
$url = json_decode($url)->response->upload_url;
//// отправка post картинки
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$result = json_decode(curl_exec($ch),true);
$message_short = urlencode($message_short);
$turl = "https://api.vk.com/method/photos.saveWallPhoto?server=".$result['server']."&photo=".$result['photo']."&hash=".$result['hash']."&v=5.62"."&caption=".$message_short."&access_token=".$token;
$safe = file_get_contents($turl);
$safe = json_decode($safe,true);
if (!empty($safe['response'][0]['id'])){
//создаём саму запись
$query=file_get_contents("https://api.vk.com/method/wall.post?owner_id=".$user_id."&user_id=".$user_id."&v=5.62&attachments=photo2493914_".$safe['response'][0]['id'] ."&message=".urlencode($message)."&access_token=".$token);
echo $query.'
fin'; } else echo 'fail'; }


И, пожалуй, самое попадалово, что при добавлении фото его название (caption) надо прогнать urlencode. Пздц нетривиальная хуйня, а в документации про это ничего не сказано (или я слепой).

Кратко, порядок такой:
  • Регистрируем приложение (Standalone! — важно)
  • Получаем токен
  • Сначала постим фото и получаем его id
  • А затем уж создаём саму запись с этой картинкой
  • Всё! Радуемся.


У меня таким макаром постятся фото, новые записи из блога и юбилейные даты из Петербургского календаря. По времени создания записей видно что они автоматические.
Андрей Панёвин
Здравствуйте! Я — Андрей Панёвин и занимаюсь профессиональной разработкой сайтов на платформе 1С-Битрикс (исключительно программирование). Есть вопросы по статье? Могу подсказать и помочь по скайпу (andrey.panevin.ru), WhatsApp (+7-911-091-0670) или перепиской в ВК.
1000 р./час.



перейти в Блог | Блог (стр. 2)

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): PHP 60  SMM 3  web-программирование 84  

комментарии:
21.06.2018 13:40
Прохожий
не работает, ответ "fail"
 
22.06.2018 10:33
andrey
>Прохожий

Всё работает как часы. Это 2 разных скрипта: сначала получаете токен, потом с его помощью скрипт постинга получает доступ к постингу на стену.
 
23.06.2018 10:32
Прохожий
Думаю всё дело в токене. Есть php скрипт для получения токена без composer?
 
25.06.2018 06:48
andrey
Так скрипт тот же самый, ссылка в записи. Компосер там нахрен не нужен, просто подключить класс.
 
28.06.2018 12:58
Прохожий
Я, наверное, криворукий, но ни черта не выходит
 
28.06.2018 13:52
Прохожий
Интересует скрипт постинга в вк с другого IP адреса (например с сервера) и себе на стену и в группу, вылоденное здесь - не рабочее решение.
 
28.06.2018 14:38
Криворукое апи для криворуких
уникумы для уникумов, не юзерфрэндли
 
28.06.2018 16:42
Кто ищет - тот найдет
Нашел рабочий код на другом сайте, этот нерабочий
 
30.06.2018 04:25
andrey
Всё идеально работает - видно по моей стене в ВК :) Ну, хорошо что проблема разрешилась.
 

Высказаться о наболевшем, я выслушаю:
Имя


email (не публикуется)