Как стать автором
Обновить

Статус-чекер для mail.ru agent

На пути самосовершенствования решил я как-то на работе вместо просмотра фильмов заняться чем-нибудь более полезным. Хотел сделать что-то нелепое и которое было бы в какой-то степени полезным. С этой целью я написал класс на php, проверяющий статусы аккаунтов в mail-агенте. Более подробно об этом написано здесь.
Вдохновленный идеей, я решил немного усовершенствовать скрипт. Чтобы было намного интересней, я, по совету друга, решил переписать и улучшить его. Причем использовать ruby, на котором я не писал даже helloworld.

Что же у меня получилось?

Я решил убрать главный недостаток: список проверяемых email-ов приходилось вручную вбивать в программу или в файл. Можно взять список друзей с my.mail.ru, думаю он не будет сильно различаться от контакт-листа в агенте. Взять список друзей можно, используя удобный API, но как оказалось там надо зарегистрировать сайт, откуда планируется обращаться к сервисам. Отсутствие такого сайта и желание сделать все как можно более грубым способом заставили меня вспомнить, что можно:
  • программно отправить POST-запрос и авторизоваться
  • также программным путем шарить по странице «мои друзья», выдергивая из них нужные данные

Статуса (онлайн, оффлайн) извлеченных таким путем email-ов можно проверить этим путем. Я лишь переписал этот код из php в ruby.
Надеюсь моя кривая реализация будет работать хотя бы некоторое время, так как regexp-ы опираются на генерируемый html-код, который, понятно, может часто меняться.

Код класса выложил сюда.

Небольшие пояснения: для авторизации посылается POST-запрос на auth.mail.ru, при успешной авторизации в ответе идут cookie, далее они посылаются на win.mail.ru. После этого можно посещать страницы как авторизованный пользователь, нужно лишь посылать правильные cookie. На странице друзей в цикле сканируется каждая страница, начиная с первой.
Для опознания (не)успешной авторизации, вытаскивания списка друзей используются регулярные выражения. Составить их было нетрудно, если внимательно изучить HTML-код каждой страницы.
Замечу, что изучать язык очень интересно, если решать какую-нибудь если не реальную, то близкую к ней задачу. Думаю, для моей первой программы на ruby этого достаточно.

Использование как-то так:
require 'status_checker'

checker = StatusChecker.new('email', 'password')
checker.get_statuses.each { |email, status| puts email + ': ' + status }


P.S.: я не пытался сделать что-то серьезное, для меня это лишь полезное провождение времени
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.