Работа с API и POST-GET на примере VK.COM

Работа с API и POST-GET на примере VK.COM

Очень часто вижу, что многие начинающие Зенщики смотрят в сторону API & POST/GET и правильно делают. Ведь нет ничего лучше POST/GET для уменьшения жора ресурсов шаблонами, ну а API для того и сделано, что бы быстро получать конкретные результаты.

Примером я выбрал именно VK.COM потому что мне он привычней и понятней.

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

Текстовый редактор я использую Notepad ++, а сниффер – HTTP Analyzer. Все это легко гуглится, но если будут какие то проблемы с поиском, то смело пишите в личку, помогу.

Рассматривать текстовый редактор мы не будем, а вот на сниффере остановимся по подробнее.

Я не буду останавливаться на том, что Вы уже активировали данную программу удобным Вам способом или используете триальную версию. У меня уже активирована и поэтому выглядит окно именно так.

Изначально программа всегда запускается на стопе. Нам нужно ее запустить, нажав на Start:

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

Есть один лайфхак – после первого запуска зайдите в Viewи выберите LocalTime:

Теперь каждый запрос будет отображаться во времени, что очень удобно.

Теперь давайте рассмотрим более внимательно рабочую область программы:

В основном мы будем работать с двумя зонами, которые на картинке выше обозначаются 1 и 2 соответственно. Где показано время сделанного запроса, метод запроса так же указано на картинке.

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

Данную программу мы используем для работы с POST/GET запросами. Алгоритм тут простой – сделали в браузере нужное действие – посмотрели что перехватила программа. Повторили тоже самое в шаблоне. Все. Ничего сложного. Ну а дальше нужно набивать руку и глаз.

Теперь давайте разберемся как нам работать с API Vk.

Четкое и полное описание работы с API можно найти на сайте - https://vk.com/dev/main

Для работы с методами API нам нужно авторизоваться. Авторизуясь раз, мы получаем токен, который потом можем постоянно использовать для отдельно выбранного аккаунта (пока сами не сменим токен или не забанят аккаунт).

Лично я рекомендую всегда делать Клиентскую авторизацию для Standalone-приложений и мобильных клиентов, так как большинство методов требуют именно ее. Простейшие методы, такие как спарсить что то просто и в открытом доступе, не требует такой сложной авторизации. Да и делается она на много проще.

Вот таким запросом:

client_id и client_secret могут быть от Вашего приложения. Можете использовать и мои данные, но сами понимаете, вероятность того что что то может пойти не так - огромная. Мало ли кто там в каких целях будет использовать это приложение? Раз сделали, а потом не волнуетесь. Удобно же!

Вернемся к теме разговора. Рассматривать мы будем именно клиентскую, так как она требует подтверждение прав от авторизованного аккаунта. На примере авторизации в vk.com я Вам покажу как работать с HTTP Analyzer, обрабатывая запросы и куки.

Лично я для работы с ВК выделяю отдельно ЮзерАгенты в файл, а так же работаю через прокси. Поэтому все мои шаблоны заточены под них. Прокси использую с привязкой по IP.

Что бы начать с чем либо работать, изначально нужно понять точный порядок действий. Для авторизации в ВК он будет такой: 1. Открываем vk.com 2. Вводим логин и пароль. 3. Вводим капчу при авторизации, если необходимо. 4. Отправляем данные логина и пароля на сервер ВК. 5. Проверяем - прошла ли авторизация на сервере.

Вроде ничего сложного. Начнем разбираться!

Первым делом в наш шаблон нужно добавить System.Web . Делается это так: 1. Переходите в расширенный редактор. 2. Ищите "Ссылки из GAC" 3. Добавляете (перетаскиваете) на панель внизу (смотрите скрин) 4. Дважды кликаете по появившемуся ярлыку с "книжками" 5. В всплывшем окне жмете "Добавить. " и в следующем вводите System.Web. 6. Выбираете под Вашу систему - 64 или 32 битную. Кликом выбираете. Все.

Это делается для того, что бы можно было кириллические буквы перевести в читаемые сервером вк данные.

Делаем заготовки: Тут мы берем прокси и помещаем в переменную

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

Работаю в основном с текстовыми данными, а не табличными, так как продают их именно в таком виде. Далее есть проверка на разделитель, так как у разных продавцов бывает по разному. У кого то разделитель ":", а у кого то - ";"

Именно в кодировке windows-1251!

Все, на этом этап подготовки завершается и мы начинаем делать саму авторизацию через POST/GET.

Я делаю так: 1. Запускаю HTTP Analyzer 2. Проверяю его работоспособность обновлением страницы в браузере. 3. Удаляю куки и кэш в браузере 4. Произвожу необходимые мне действия (в нашем случае – перехожу на https://vk.com и совершаю авторизацию)

Вот что выдает Аналайзер:

Кучу разной информации. Львиная доля нам не нужна. Вот тут и нужен навык отбирать то, что нам нужно, а то что нет – удалять. На первых этапах не советую удалять, так как Вы можете случайно удалить то, что Вам будет необходимо, да и порой кой какие переменные и куки появляются при загрузке изображений. Это я сейчас не про ВК, а в общем о сайтах.

Вот что осталось после очистки не нужных строк (удалил всякие картинки и прочие не нужные джава скрипты):

В итоге у меня получилось 6 действий. Не было капчи и мы ее не разгадывали. К сожалению, из тех акков, что у меня сейчас есть, не получилось поймать капчу на авторизации. да я и особо не старался. В шаблоне у меня этот момент есть и, те кто заинтересуются как решается капча, могут спокойно это там посмотреть.

Теперь покажу как это все берется, откуда и куда помещается:

Нажимаем право кнопкой мыши на интересующую нас строку и в выпадающем меню выбираем «CopyCell». К получится, что мы скопируем текст - https://vk.com/ Это очень удобно.

Теперь более подробно рассмотрим как и что мы добавляем в наш экшин.

На картинке ниже, в левой стороне расположена часть из HTTP Analyzer'а – Закладка "RawStream", а справа экшин GET запроса из ПроджектМэйкера:

Тут мы это экшин заполняем следующим образом: URL – мы вставляем то, куда хоти обратиться (в нашем случае это https://vk.com) Referer – берем из RawStream (на картинке выделили данный момент) Кодировка windows-1251 (так как работаем с Русскоязычной частью ВК) Таймаут я советую ставить более 300 на проксях. На хороших или на своем IP можно оставить и 30. Далее всегда выбираем в «Загружать» - Заголовки и содержимое, так как часто использую проверку - какой пришел ответ от сервера. И объявляем переменную. Для GET запросов я всегда использую переменную . Так понятнее для меня. Вы можете называть и обзывать ее как Вам угодно.

Следующая картинка будет из закладки «Дополнительно» того же экшина:

Ставим галочку Редирект, которая означает, что если там есть переход на следующую/другую странице, то он выполнит соответствующий запрос автоматически (по крайней мере я это так понимаю). Иногда нужно отключать! Но так, вообще полезная штука - сокращает кол-во запросов.

В поле UserAgent первой строчкой ставим нашу переменную , так как мы ранее в эту переменную поместили данные нашего ЮзерАгента. Далее вставляем выделенный синим текст. По сути, так делаем всегда, при составлении GET и POST запросов. Дальше там уже появится строка с куками, но ее мы будем помещать в окно Cockie, что ниже. Вообще я всегда делаю так: 1. Выделяю все (в программе HTTP Analyzer в закладке Raw Stream), что слева до первой строки и копирую в ProjectMaker в экшин (POST или GET) в закладку "Дополнительно". 2. Вставляю это все в поле UserAgent в закладке "Дополнительно" экшина. 3. В вставленном тексте нахожу строку начинающуюся с Cookie и вырезаю ее в поле ниже, которое так и называется "Cookie:". 4. Удаляю от туда "Cookie: " из текста и оставляю пока данные куков и возвращаюсь к ЮзерАгенту. 5. Удаляю там строку с ЮзерАгентом, так как вместо него у нас там стоит переменная. 6. Удаляем так же строку Content-Lenght 7. Cтроку с Refferer переносим в первую часть экшина - "Основные" и вставляем в соответствующее поле. 8. Удаляем начало - "Refferer: ". Если в рефферере используются какие либо параметры, то используем соотвествующие этим параметрам наши переменные. Если таковые имеются. Если нет, то нужно найти заранее, взять и объявить такие переменные. Так же поступаем и с Cookie. Все должно быть через переменные.

Теперь нам нужно посмотреть, что пришло в ответ. Смотрим ответ в правой части RawStream:

Как видим, тут мы уже получили наши первые куки.

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

В общем нам тут интересны куки и еще две переменные:

Вот так это будет выглядеть в шаблоне:

Так же делаю простенькую проверку – нашлось ли во ответе на GET запрос ip_h. Если нет, значит что то не то с проксей или просто подзависло. Если нашлось то все в порядке.

В общем там, как правило все хорошо и те данные, что мы ищем, находятся.

Кстати, наличие remixlhk в данных, в свое время и послужило причиной того, что большинство софта работающего с ВК перестало работать. Именно поэтому, лучше иметь открытый шаблон для ЗенноПостера, где такие казусы быстро можно исправить.

Теперь нам нужно отправить на сервер данные для авторизации – логин и пароль. Работаем со следующей строкой:

Как видим, это уже POST запрос и мы будем тогда использовать другой экшин.

Как и в предыдущем примере – копируем ячейку и это будет URL’ом нашего будущего POST запроса:

Все то же самое. Так же проставляем Рефферера обязательно!

Данные берем так же из RawStream:

Content-Type: application/x-www-form-urlencoded определяет тип данных. Именно поэтому urlencoded!

Данные выглядят так (на картинке выше в красном прямоугольнике и с текстовым указанием "ДАННЫЕ"):

Думаю углубляться не стоит как все мы это заменяем? С нашими переменными станет уже так:

Как правило я стараюсь называть переменные как и параметры в запросах - так проще потом вставлять. Переменные начинающиеся с captcha – это то что мы берем, если есть капча.

В дополнительных настройках экшина у нас будет так:

Не ставил галку у редиректа, так как так и не разобрался, почему иногда не происходит корректный редирект в рамках POST запроса именно при авторизации.

Далее я проверяю наличие куков remixq_ Данные куки появляются при авторизации в аккаунте. Если не появились, значит что то пошло не так. Тогда проверяем на капчу. Если и капча не выскочила, то тут уже проблемы с самим аккаунтом.

Пример авторизации прилагаю.

Данный вид токена (при получение его для правильного standalone-приложения) дает доступ к абсолютно всем функциям, которые имеет аккаунт в вк. Этот вид токена я рекомендую всегда получать, что бы потом не сталкиваться с проблемой, когда упрощенного токена не хватает прав для задуманных Вами действий.

Для получения токена, нам необходимо получить куки, что мы уже имеем делать из первой части и всего два GET –запроса! Хотя, упрощенный - всего один экшин. =)

- Это ID приложения, которое Вам нужно найти или самим создать тут: https://vk.com/apps?act=manage Ну или пользуйтесь моим, что я не советую.

Рекомендую создавать сами, так как не везде будут стоять те настройки, что нам нужны. Именно здесь мы делаем открытым приложением и включаем доступ к API, и устанавливаем необходимые права доступа

Настройки приложения можете посмотреть на этом скрине:

Если мы ничего не упустили, то в ответ на GET-запрос придет ссылка для получения токена.

Изначально я всегда проверяю – пришел ли правильный ответ. В данном случае я проверяю есть ли полученном ответе «grant_access_title».

Далее внимательно смотрим, что мы там получили:

И делаем последний запрос, так же без редиректа!

На скрине показан запрос и по вкладкам. Обратите внимание, что у ВК практикуется такая тема, что на определенные действия используются определенные куки и не стоит, все куки пихать в запрос. На некоторых запросах данный момент реально критичен!

Если и в этот раз ничего не упустили и не напутали, то в ответе будет нужный нам токен:

Отсюда мы его и парсим.

НА СКРИНЕ ПРИВЕДЕН ПРИМЕР С ПРАВАМИ НА «постинг без HTTPS»! Отличается он тем, что в конце добавляется параметр – secret. Более подробно прочитать можете тут - https://vk.com/dev/api_nohttps Я же не беру такие токены, так как пока не было необходимости получать такой токен и что бы потом не генерировать переменную sig.

Загрузка фотографии в любое место проходит в три этапа: 1. Запрашиваем сервер, куда будем загружать фотографию. 2. Загружаем фотографию. 3. Постим фотографию.

По сути любые действия с загрузками выглядят именно так – в три этапа. Принцип везде один и тот же. Если разберетесь с одним из самых сложных моментов – загрузкой фотографий, то сможете делать все!

И так вернемся к загрузке

Будем рассматривать на примере загрузки фотографии в фотоальбом какой либо группы. Для этого нам нужно кроме токена еще и

- ID фотоальбома в этой группе.

Где и как Вы их брать будете, я не буду рассматривать. В моем примере, данные переменные я ввожу в шаблон через InputSettings:

Плюс работы с API заключается в том, что для работы нам нет нужды ни в куках ни в юзерагентах.

📎📎📎📎📎📎📎📎📎📎