вівторок, 3 липня 2012 р.

ВКонтакте → Авторизація додатків з Ruby і Net::HTTP

На днях виникло бажання переписати код своєї бібліотеки для для авторизації ВКонтакте і здійснення запитів до API, використовуючи тільки стандартні модулі Ruby.

Для того, щоб прикинутися справжнім браузером, просто завантажувати потрібні сторінки недостатньо. Як мінімум, потрібно коректно обробляти куки і редіректи. Для цього у попередній статі я використовував чудову бібліотеку Mechanize.

Спочатку встановимо необхідні параметри.

Детально про параметри звернення можна прочитати в документації.
client_id - ідентифікатор вашого додатку.
Тут слід зазначити, що ми будемо використовувати параметр display із значенням wap, так в цьому варіанті сторінки практично відсутній JavaScript.
scope являє собою список прав, до яких ми хочемо отримати доступ.

Звертаємося до сторінки авторизації




Парсимо відповідь


Подивимося на код сторінки авторизації. Найбільше нас буде цікавити наступна частина:


Для подальшої відправки форми необхідно розпарсити всі input'и (и тому числі і приховані), а також URL, на який сабмітиться форма.


Авторизуємось


Підставляємо в параметри запиту електронну пошту та пароль користувача і відправляємо форму:


Отримуємо куку




Встановлюємо куку




Отримуємо код


Наступним етапом, якщо користувач цього ще не робив, треба дати додатку ті права, які ми запитували в параметрі scope. Для цього нам буде запропонована сторінка з формою.

В результаті отримуємо відповідь наступного вигляду:
http://oauth.vk.com/blank.html#code=xxxxxxxxxxxxxxxxxx



Даний метод авторизації не є офіційним і може змінитися.