На пути самосовершенствования решил я как-то на работе вместо просмотра фильмов заняться чем-нибудь более полезным. Хотел сделать что-то нелепое и которое было бы в какой-то степени полезным. С этой целью я написал класс на php, проверяющий статусы аккаунтов в mail-агенте. Более подробно об этом написано здесь.
Вдохновленный идеей, я решил немного усовершенствовать скрипт. Чтобы было намного интересней, я, по совету друга, решил переписать и улучшить его. Причем использовать ruby, на котором я не писал даже helloworld.
Что же у меня получилось?
Я решил убрать главный недостаток: список проверяемых email-ов приходилось вручную вбивать в программу или в файл. Можно взять список друзей с my.mail.ru, думаю он не будет сильно различаться от контакт-листа в агенте. Взять список друзей можно, используя удобный API, но как оказалось там надо зарегистрировать сайт, откуда планируется обращаться к сервисам. Отсутствие такого сайта и желание сделать все как можно более грубым способом заставили меня вспомнить, что можно:
Статуса (онлайн, оффлайн) извлеченных таким путем email-ов можно проверить этим путем. Я лишь переписал этот код из php в ruby.
Надеюсь моя кривая реализация будет работать хотя бы некоторое время, так как regexp-ы опираются на генерируемый html-код, который, понятно, может часто меняться.
Код класса выложил сюда.
Небольшие пояснения: для авторизации посылается POST-запрос на auth.mail.ru, при успешной авторизации в ответе идут cookie, далее они посылаются на win.mail.ru. После этого можно посещать страницы как авторизованный пользователь, нужно лишь посылать правильные cookie. На странице друзей в цикле сканируется каждая страница, начиная с первой.
Для опознания (не)успешной авторизации, вытаскивания списка друзей используются регулярные выражения. Составить их было нетрудно, если внимательно изучить HTML-код каждой страницы.
Замечу, что изучать язык очень интересно, если решать какую-нибудь если не реальную, то близкую к ней задачу. Думаю, для моей первой программы на ruby этого достаточно.
Использование как-то так:
P.S.: я не пытался сделать что-то серьезное, для меня это лишь полезное провождение времени
Вдохновленный идеей, я решил немного усовершенствовать скрипт. Чтобы было намного интересней, я, по совету друга, решил переписать и улучшить его. Причем использовать 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.: я не пытался сделать что-то серьезное, для меня это лишь полезное провождение времени