ВКонтакте без API: посты с картинками и ссылками

в 10:26, , рубрики: curl, perl, php, Вконтакте, посты, метки: , , , ,

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

Были опробованы различные готовые решения, но полноценных рабочих вариантов так и не было найдено.

Среди таких решений стоит выделить разработку пользователя xbreaker — класс vk.wallpost. В этой реализации работал постинг с вложением ссылок, но с картинками были проблемы — они не закачивались. Попытавшись доработать класс vk.wallpost, желаемого результата я так и не получил. Запросы к ВК в этом модуле делаются через небезызвестный PHP модуль CURL. Именно в нём, как мне показалось, и была проблема при закачке картинок, возможно просто не удалось настроить его должным образом. Помимо этого, проблемой было и то что в PHP нет хорошего модуля для программного server-side «браузера», такого например как WWW::Mechanize в Perl. Оценив все «за» и «против» я взялся написать свой модуль для управления аккаунтом в ВКонтакте, но уже на языке Perl.

Итак, перейдём непосредственно к разработке VK.pm.

Для наглядности приведу пример использования. В самом кратком варианте это выглядит так:

use VK;

my $vk = VK->new('vkaccount@email.com', 'mypassword', undef, 1234);
print $vk->wallPost(
	message         => "Hello World!",
	link            => "http://code.google.com/p/vkontakte-non-api-manager",
	photo           => "sample.jpg"
)?':-)':':-(';

Далее более подробный и полный пример с комментариями:

use VK;

# последние 4 цифры вашего телефона привязанного к аккаунту вК
my $security_code = 1234;

# если хотим работать со стеной группы указываем вместо undef адрес стенки (напр. "/mygroupaddress")
my $walluri = undef;

# логинимся (email/телефон, пароль)
my $vk = VK->new('vkaccount@email.com', 'mypassword', $walluri, $security_code);

print $vk->wallPost(
	message         => "Hello World!", # наш пост собственно
	#to_id           => 1234456, # id стенки/юзера куда хотим постить, если пусто то себе или в группу

	link            => "http://code.google.com/p/vkontakte-non-api-manager", # ссылка
	link_title      => "This is the title of the link popup", # заголовок во всплывающем окне ссылки
	link_desc       => "This is the content of link popup", # контент для всплывающего окна ссылки
	
	signed          => '', # 1/0 - подписывать или нет посты

	photo           => "sample.jpg", # фотка, имя файла для поста
	album           => "This is the new album", # название альбома куда качать фоту, создаст альбом если его нет
	album_desc      => "This is description of a new album", # описание альбома
	album_view      => 0, # виден альбом: 0-всем, 1-друзьям, 2-друзьям друзей, 3-себе
	album_comments  => 0, # каменты к альбому: 0-всем, 1-друзьям, 2-друзьям друзей, 3-себе
)?':-)':':-(';

Как видно, код ничего сложного из себя не представляет, можно сразу использовать. Отмечу лишь что $security_code нужен для случаев когда ВК предполагает что мы «робот» и просит ввести последние 4 цифры номера телефона. Возможно иногда ВК требует и капчу, пока не попадалась.

Сам модуль VK.pm реализован через упомянутый выше модуль WWW::Mechanize и его расширение WWW::Mechanize::GZip для обработки «сжатых» страниц. Никакого API вконтакта мы не используем, соответственно никаких ключей нам получать не нужно. Через скриптовый браузер мы эмулируем действия реального пользователя зашедшего в свой аккаунт.

Дополнительно имеется ещё несколько функций которые могут оказаться полезными:

# создание альбома

$vk->createAlbum("Название альбома", "Описание альбома");

# закачиваем фото в альбом

$vk->addPhoto("photo.jpg", "Название альбома куда положить фото", "Описание альбома", 0, 0);

# если вдруг нужно залогиниться в другой акк

$vk->login('vkaccount@email.com', 'mypassword', $walluri, $security_code);

Если не указывать название альбома при закачке картинок, то модуль создаст его сам с названием "#shared".

В будущем предполагается дополнить модуль дополнительными функциями управления аккаунтом.

Пока это всё.

Исходный код с примерами можно найти здесь:
code.google.com/p/vkontakte-non-api-manager

Спасибо за внимание. Буду рад если модуль окажется полезен.

Автор: leonmedia


  1. аава:

    Не понял а как это использовать?

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js