Вконтакте delphi. REST Client Library: использование API ВКонтакте. Пишем простейший спамер для ВКонтакте на Delphi

Вконтакте delphi. REST Client Library: использование API ВКонтакте. Пишем простейший спамер для ВКонтакте на Delphi

Парсинг вконтакте представляет из себя сбор определенных каких-то данных будь то id друзей определенного пользователя, номера телефонов, id людей из определенной группы и так далее. Комплекс данных действий направлен на сбор целевой аудитории, которая в последующем будет использована для настройки

Парсим конкретных людей или группы, затем формируем файл с базой собранных данных и выставляем в рекламных настройках. Теперь наша реклама будет транслироваться только по указанным id пользователей. Таким образом мы наиболее точно нацеливаемся на заинтересованную аудиторию. Приблизительный план работы можете увидеть на картинке ниже

Данный способ парсинга, который будет описан ниже еще не встречал нигде, где бы он описывался. Берите на вооружение и используйте данный подход. Преимущество в том, что не потребуется никакого стороннего софта, кроме разве что бесплатного блокнота Notepad++ (если нет его, вбиваем в поиск название и скачиваем).

Хочу подчеркнуть , что парсить через Api Вконтакте мы сможем только id пользователей любого человека из социальной сети вконтакте. Для сбора информации из групп этот способ не пройдет, необходимо использовать сторонний софт, но это уже тема отдельной статьи!

Парсинг id друзей

Сперва нам понадобится id номер пользователя социальной сети vk, чьих друзей мы собрались парсить. Либо через поиск ищем, или другим удобным для вас образом человека. Если пользователь переименовал свой адрес страницы например в http://vk.com/machommen , берет и нажимаем на аватар этого пользователя, затем скопируйте в браузерной строке значение после слова photo — это и будет id пользователя.

Рассмотрим пример : Пользователь, его адрес страницы — https://vk.com/me

Хорошо, номер выяснили. Теперь для того чтобы спарсить друзей этой милой девушки по адресу http://vk.com/id2050
Вставляем следующую команду, которая функцией Api vk выведет всех ее друзей.

Стоит оговориться об одном нюансе функции friends.get , которая за раз может вывести 5000 друзей того или иного пользователя. Это актуально, если у пользователя например около 8000 — 9000 тысяч друзей, тогда используем такую запись:

https://api.vk.com/method/friends.get?user_id=2050&offset=5000 Параметр offset - означает с какого значения начать делать выборку друзей, если например offset=5000, то друзья будут искаться после 5000 пользователя

На данный момент у этой барышни 393 друга , далее нам эта цифра понадобится чтобы сопоставить результат работы

Копируем полученные данные из окна браузера (список id), проще это сделать комбинацией клавиш CTRL + A — выделить все. Копируем и вставляем в блокнот Notepad++

1 {"response":[ ................содержимое.............. ]}

{"response":[ ................содержимое.............. ]}

Отлично, имеем список id пользователей. Помните я вначале говорил про базу таргетинга для контакта, так вот чтобы база правильно была обработа и принята в рекламный кабинет, есть правильно: id пользователя с начала каждой строки. Сейчас приведем в порядок наш список, так как нужно.

Находясь на нашем списке id пользователей в программе Notepad++ вызываем окно поиска сочетанием клавиш CTRL + F , вкладка «Заменить» , выставляйте значения так же как на скриншоте ниже и жмем «Заменить Все».

Получаем готовый список к работе в таргетке vk, сохраняйте себе на жесткий диск и пользуйтесь на здоровье. Убеждаемся, что сделали все правильно — конечное значение 393 , сравните с количеством друзей! — Все выполнено верно. Если в чем-то засомневались, пробегитесь по id номерам в браузере и убедитесь, что все номера принадлежат некой Кате Лебедевой.


Парсинг вконтакте помогает собрать готовые базы пользователей по которым Вам будет удобно таргетироваться. Удобство и преимущество, что вы подбираете целевую аудиторию вашего товара или услуги. Таким образом рекламные и промо материалы выстрелят лучше, соответственно Лиды, больший процент из посетителей сконвертится в лидов. Ооо, чудная конвертация))

Успехов в работе, с вами был

В этом уроке я покажу вам достаточно простой и эффективный способ авторизации в небезызвестной социальной сети ВКонтакте, например, для получения какой-либо информации.
Всем известно, что в социальных сетях в настоящее время зарегистрировано огромное количество пользователей, в частности в соц. сети ВКонтакте. Поэтому синхронизация, привязка различных данных из аккаунтов соц. сетей к различным приложениям и играм является достаточно актуальной темой. Для того чтобы получать эту информацию в Delphi, можно провести авторизацию посредством библиотеки Indy, принять все cookies и получить необходимую информацию. В интернете можно найти огромное множество различных способов авторизации ВКонтакте посредством Indy, однако будьте уверены, что 99% этих способов не работают, или перестали работать уже очень давно. Это обуславливается тем, что ВКонтакте постоянно изменяется, в него вносится постоянно множество изменений. Способ, который предлагаю я, на сегодняшний день (12 марта 2012) работает достаточно неплохо. Итак, привожу код самой авторизации с подробными комментариями:
var
s: string;
http: TIdHTTPEx;
begin
http:= TIdHTTPEx.Create;
// Создаем экземпляр класса TIdHTTPEx
http.Request.UserAgent:=
‘Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.7.62 Version/11.01’;
// Маскируемся под оперу 🙂
try
s:= http.GetEx(‘http://vk.com/login.php?m=1&email=’ + email +
‘&pass=’ + pass);
// пробуем залогиниться
// для этого выполняем обычный GET запрос, в котором прямо в адресе передаем
// значения email и pass
except
// при авторизации происходит редирект,
// который обязательно необходимо обработать,
// иначе корректно залогиниться нам не удастся
if http.ResponseCode = 302 then
s:= http.GetEx(‘http://vk.com’ + http.Response.Location);
end;

Обратите внимание на то, что в качестве email`а нужно указывать email, который привязан к аккаунту! Если вы укажете вместо email свой номер телефона, по которому вы регистрировались, или логин, то авторизация скорее всего будет неуспешной. В настоящее время привязка аккаунта ВКонтакте к email не обязательна и при регистрации не требуется. Привязать ваш email к аккаунту можно в настройках аккаунта.

Как вы уже заметили, для проведения самой авторизации я использую не стандартный класс TIdHTTP, а TIdHTTPEx, который отличается тем, что более корректно принимает и отправляет печенья. TIdHTTPEx основан естественно на базе стандартного TIdHTTP. Для работы с TIdHTTPEx вам потребуется скачать модуль по этой ссылке , кинуть его в папку с будущим проектом, а затем объявить его в разделе uses.

Итак, если логин и пароль были введены правильно, то авторизация должна пройти без проблем. Чтобы проверить авторизировались ли мы, давайте пропарсим полученный исходный код страницы ВКонтакте, который я поместил в строковую переменную s. Определить успешность авторизации достаточно просто: для этого мы всего лишь поищем в той самой строке s слово ‘logout’, которое появляется в исходном коде в ссылке ‘Выйти’ (для выхода из аккаунта). Если это слово в строке s обнаружено, значит мы успешно авторизировались:
if Pos(‘logout’, s) <> 0 then
ShowMessage(‘Авторизация успешна’)
else
ShowMessage(‘Авторизация неудачна’);
Поместим этот код сразу же после кода с авторизацией.
Теперь, когда мы прошли авторизацию, мы можем получать различную информацию из аккаунта. Делается это достаточно простым парсингом строки s. Можно также зайти на другую страницу ВКонтакте, мы все равно будем авторизованны. Кстати парсить строки очень удобно при помощи библиотеки RegExpr.

Вполне сгодится для работы с любой социальной сетью или онлайн сервисом, которые предоставляют нам в распоряжение API. Но “ВКонтакте”, всё же из всех мне известных социальных сетей (за исключением, наверное, Twitter) является самой популярной в России, поэтому с ней и попробуем поработать, используя в работе Delphi XE6 . Ну, а чтобы было ещё более занимательно, попробуем написать небольшое приложение для Android . Кому потребуется приложение для Windows и VCL, думаю легко разберется в том, какие модули следует подключить в uses, а какие наоборот - убрать.

1. Создаем свое приложение “ВКонтакте” и пробуем авторизовать пользователя.

Для начала работы с API “ВКонтакте” необходимо создать новое приложение и получить необходимые данные для авторизации пользователей. Для этого заходим на страницу разработчиков и жмем вверху страницы кнопку “Создать приложение “:

Жмем кнопку “Подключить приложение” после чего вам предложат подтвердить свое действие, выслав на мобильный телефон проверочный код. После подтверждения Вам станет доступно изменение настроек приложения:

Переходим на вкладку “Настройки” и запоминаем ID приложения и Защищенный ключ :

Теперь можно переходить к Delphi XE6 и попробовать реализовать авторизацию пользователя.

Запускаем Delphi XE6, создаем новый проект для мобильных устройств и на главную форму бросаем компоненты, покзанные на рисунке ниже:

Сейчас нам нужны будут следующие компоненты: TButton , TRESTClient , TRESTRequest , TRESTResponse и TOAuth2Authenticator . Клик по кнопке TButton будет вызывать процесс авторизации пользователя. Для начала, напишем процедуру авторизации пользователя.

Теперь необходимо вызвать форму для авторизации пользователя “ВКонтакте” и получить Access Token. Как это делать я достаточно подробно рассказывал в самоё первой статье по . Подключаем в uses модуль REST.Authenticator.OAuth.WebForm.FMX и определяем следующую переменную:

type TForm1 = class (TForm) [ ... ] private WebForm: Tfrm_OAuthWebForm; public { Public declarations } end ;

Напомню, что Tfrm_OAuthWebForm - это форма, на которой расположен компонент TWebBrowser с помощью которого пользователь заходит на сайт, чтобы ввести свои логин/пароль и получить доступ для приложения к каким-либо данным своего аккаунта. Соответственно нам, как разработчикам, эта форма необходима, как минимум, для того, чтобы “отловить” редирект на специальный URL, который будет содержать необходимый нам Access Token. Для управления редиректами у Tfrm_OAuthWebForm определено сразу два события:

type TOAuth2WebFormRedirectEvent = procedure (const AURL: string ; var DoCloseWebView : boolean ) of object ; property OnBeforeRedirect: TOAuth2WebFormRedirectEvent read FOnBeforeRedirect write FOnBeforeRedirect; property OnAfterRedirect: TOAuth2WebFormRedirectEvent read FOnAfterRedirect write FOnAfterRedirect;

Нам необходим обработчик события OnAfterRedirect. Напишем его:

type TForm1 = class (TForm) [ ... ] private WebForm: Tfrm_OAuthWebForm; procedure AfterRedirect(const AURL: string ; var DoCloseWebView : boolean ) ; [ ... ] public { Public declarations } end ; procedure TForm1. AfterRedirect (const AURL: string ; var DoCloseWebView: boolean ) ; var i: integer ; Str: string ; Params: TStringList; begin i: = pos ("#access_token=" , AURL) ; if (i> 0 ) and (OAuth2Authenticator1. AccessToken = EmptyStr) then begin Str: = AURL; Delete (Str, 1 , i) ; Params: = TStringList. Create ; try Params. Delimiter : = "&" ; Params. DelimitedText : = Str; OAuth2Authenticator1. AccessToken : = Params. Values [ "access_token" ] ; OAuth2Authenticator1. AccessTokenExpiry : = IncSecond(Now, StrToInt (Params. Values [ "expires_in" ] ) ) ; finally Params. Free ; end ; WebForm. Close ; end ; end ;

Таким образом, после редиректа мы проверяем есть ли в URL подстрока #access_token= и, если такая строка имеется, то вытаскиваем из URL данные по Access Token и время его жизни - значение параметра expires_in.

Обратите внимание, что данные для доступа к API мы записываем сразу в компонент TOAuth2Authenticator1

Теперь нам необходимо создать форму, определить обработчик OnAfterRedirect и в нужный момент показать эту форму пользователю.
Что касается создания/уничтожения объекта формы, то это можно сделать где вам удобно. Для примера, я создаю форму авторизации в OnCreate главной формы, а уничтожаю, соответственно, в OnDestroy:

procedure TForm1. FormCreate (Sender: TObject ) ; begin WebForm: = Tfrm_OAuthWebForm. Create (nil ) ; WebForm. OnAfterRedirect : = AfterRedirect; end ; procedure TForm1. FormDestroy (Sender: TObject ) ; begin WebForm. Free ; end ;

type TForm1 = class (TForm) [ ... ] private WebForm: Tfrm_OAuthWebForm; procedure AfterRedirect(const AURL: string ; var DoCloseWebView : boolean ) ; procedure Auth; public { Public declarations } end ; procedure TForm1. Auth ; begin OAuth2Authenticator1. AccessToken : = EmptyStr; OAuth2Authenticator1. ClientID : = cAppID; OAuth2Authenticator1. ClientSecret : = cAppKey; OAuth2Authenticator1. ResponseType : = TOAuth2ResponseType. rtTOKEN ; OAuth2Authenticator1. AuthorizationEndpoint : = cEndPoint; WebForm. ShowWithURL (OAuth2Authenticator1. AuthorizationRequestURI ) ; end ;

Здесь мы, опять же, используем компонент TOAuth2Authenticator - записываем в него данные нашего приложения (ID и секретный ключ), а также получаем URL, по которому необходимо перейти пользователю для авторизации.

Доброго времени суток уважаемые читатели! Сегодня мы с вами поговорим про API ВКонтакте, точней об использовании API в Delphi. Я буду использовать в этой статье Delphi 2010, в принципе вам ее использовать не обязательно, данный материал будет применим к любой версии Delphi. И так, сегодня мы с вами рассмотрим метод авторизации в VK.COM с помощью indy, настройку компонентов indy для работы с API VK. На самом деле все очень-очень просто и 100 раз находится в гуглояндексе и других поисковиках. Но большинство из них написаны еще под vkontakte.ru, API тогда естественно было другое. Ну да ладно, давайте начинать. Для начала нам понадобятся компоненты:

  • IdHTTP
  • IdSSLIOHandlerSocketOpenSSL
  • IdCookieManager

Ну и стандартно:

  • TLabel
  • TEdit
  • TButton

Настраиваем компоненты

ВАЖНО! В папку с исполнительным файлом программы копируем эти DLL

Они есть в архиве к этому материалу.
И так, настройка компонентов для авторизации вконтакте завершена, необходимые DLL библиотеки скопированы, теперь напишем немного кода.

Procedure TForm1.Button1Click(Sender: TObject); var TmpStr: string ; json: TJSONObject ; client_id ,client_secret: string ; Token, IdUser: string ; begin client_id:= Ваш ID полученный на сайте Вконтакте; client_secret:= Секрет от туда же; try TmpStr:= IdHTTP.Get("https://oauth.vk.com/token?grant_type=password&client_id="+client_id+"&client_secret="+client_secret+"&username="+EdtEmail.Text+"&password="+EdtPass.Text); except on E: Exception do begin MessageBox(Application.Handle, PChar(Format("Ошибка: %s",)), "Error", MB_ICONHAND); exit ; end; end; json:= TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(TmpStr),0) as TJSONObject; Token:= json.Get(0).JsonValue.ToString; Token:= StringReplace(Token, """, "", ); IdUser:= json.Get(2).JsonValue.ToString; end;

я осознанно опускаю ту часть в которой обычно рассказывают про то как получить ID и секрет от вконтакте, это вы уже читали в предыдущих постах. У нас же будет только самое необходимое, не какого левого материала).
Объясню код:
Первое что вы наверное не видели в других уроках это json: TJSONObject, да да, я правильно разбираю ответы от сервера, так как того просит религия;). Другими словами это правильная переменная для хранения ответа от сервера на наш GET запрос. Инициализируется она просто: json:= TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(TmpStr),0) as TJSONObject; поля вытащить из нее тоже не составляет большого труда: Token:= json.Get(0).JsonValue.ToString;
Токен и айди пользователя нужны для дальнейшего выполнения API функций, о которых мы поговорим с вами в следующих статьях.
Ну собственно и все на этом по коду. Проверку авторизации не делаю, оставляю это вам)))



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows