Error message

Notice: Trying to access array offset on value of type bool in block_inject_do_injection() (line 271 of /var/www/oivt/sites/all/modules/block_inject/block_inject.module).

Lazarus + Synapse = API ВКонтакте

Доброго времени суток!

Сегодня мы поработаем с API ВКонтакте.

Тех, кого пугает обилие букв - сразу заинтригую тем, что мы напишем программу для Контакта.

Все что Вы делаете вручную - можно сделать программным способом. 

 

Что нам потребуется для написания программы:

1. Для выполнения запроса будем использовать библиотеку Synapse модуль httpsend .

Скачать Synapse можно отсюда. И все файлы из архива поместите в папку проекта программы.

2. Для того чтобы Synapse мог работать с протоколом https в папку с проектом программы нужно поместить 2 dll - ssleay32.dll и libeay32.dll . Это важно - если этих dll-лей не будет, Синапс будет работать по протоколу http, даже если Вы указываете в URL https, а VK - сервер в целях безопасности не работает по http . Скачать можно здесь.  Все файлы из архива брать не нужно, только 2 эти dll.

3. Для того, чтобы Ваша программа могла производить действия от Вашего имени - мы должны зарегистрировать ее https://vk.com/apps?act=manage - создать новое приложение и записать его ID.

Далее - этому новому приложению Вы должны выдать разрешение доступа (к нашим сообщениям, фото, стене, друзъям и т.д.)  в виде токена , делается это так:

Нужно пройти по нижеуказанной ссылке, где вместо ХХХХХХХ нужно подставить ID Вашего приложения

https://oauth.vk.com/authorize?client_id=XXXXXX&scope=notify,photos,frie...

 Обратите внимание на строку - scope= там указываются разделы, доступ к которым мы запрашиваем.

 

Нажимайте разрешить и перейдете к следующему окну

Из адресной строки которого и нужно скопировать и сохранить куда-нибудь токен. (Имейте в виду - токен выдается на время, он может устареть, если сессия пользователя завершена на всех устройствах или пользователь сменил пароль.

 После чего можем перейти непосредственно к программированию.

1. В разделе Uses указываем HTTPSend и ssl_openssl

2. В разделе Var объявляем переменную HTTPSend1:THTTPSend;  

3. Кидаем на форму Кнопку , для кнопки пишем код:

procedure TForm1.Button1Click(Sender: TObject);

var zapros:string;

begin

zapros:='https://api.vk.com/method/wall.post?owner_id=15254905&message=test&acces...';

  HTTPSend1 := THTTPSend.Create;

try

  HTTPSend1.Sock.CreateWithSSL(TSSLOpenSSL);

  HTTPSend1.Sock.SSLDoConnect;

  HTTPSend1.HTTPMethod('GET', zapros);

  finally

HTTPSend1.Free;

end;                

Осталось дело за малым - сформировать строку запроса.

Например, мы хотим к себе на стену поместить запись "С НГ 2018 ! "

Тогда мы воспользуемся методом wall.post , список параметров смотрим 

https://vk.com/dev/wall.post

Самыми важными из них являются owner_id - (посмотрите свой ID ВКонтакте) - это числовой параметр - на чьей стене пишем и message - текст публикации.

Так же мы должны передать токен, подтверждающий право на публикацию.

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

 

zapros:='https://api.vk.com/method?wall.post&owner_id=XXXXXXX&message=XXXXXXXXXXXXX&access_token=XXXXXX&v=5.69';

Для проверки - можно вставить ее в строку адреса браузера и нажать Enter - если на Вашей странице опубликована запись - значит строка запроса составлена правильно.

 

Исходник прилагается, но т.к. он настроен на мою стену - я стер пару символов в access_token. Так что пока не замените на свои данные - работать не будет.

 

Теоретически не сложно доработать исходник, например, чтобы разом поздравить всех своих друзей с Новым Годом (хотя нужно учитывать, что при массовой рассылке сообщений ВК выведет капчу)

 

Можно написать разные VK-боты: например - пусть программа все время проверяет наличие свежих сообщений и если сообщение начинается на "Приве" (без учета регистра) или "Здра", "Здор" и т.д. - отвечает "Салам пополам!" .

 

AttachmentSize
Image icon 168.JPG25.16 KB
Image icon 159.JPG40.8 KB
Package icon Lazarus VK API.zip1.28 MB