- Отримання новин профілю (кількості нових повідомлень, фотографій, відео, друзів, груп).
- Отримання списку друзів
- Отримання приватних повідомлень
- Написання приватних повідомлень
Я вже писав про те, що домен VK.COM перейшов під контроль соціальної мережі ВКонтакте. Майже з тих самих пір авторизація користувачів на сайті vkontakte.ru відбувається через редірект login.vk.com. Це викликає незручність при авторизації за допомогою WWW::Mechanize.
require 'mechanize'
require 'json'
class Vkontakte
def initialize
@ua = WWW::Mechanize.new{|agent|
agent.user_agent_alias = 'Linux Mozilla'
agent.follow_meta_refresh = true
}
end
# Authorisation by submitting email and password (Login)
#
def login_force(uid, email, pass)
url = "http://login.vk.com/?act=login"
page = @ua.post(url, {'email' => email, 'pass' => pass, 'expire' => '1', 'vk' => 1})
s = page.body.match(/'s' value='(.+?)'/)[1]
@ua.post('http://vkontakte.ru/login.php?op=slogin&redirect=1', {'s' => s})
user_page = @ua.get('http://vkontakte.ru/profile.php')
end
end
if __FILE__ == $0
id = "xxxxxxxx"
email = "user@example.com"
pass = "your_password"
vkontakte_agent = Vkontakte.new
vkontakte_agent.login_force(id, email, pass)
end
Далі можна продовжувати роботу з ВКонтакте як звичайно.
Давайте напишемо скрипт, який буде авторизуватись і працювати з vk.com:
require 'mechanize'
require 'json'
class Vkontakte
def initialize
@ua = WWW::Mechanize.new{|agent|
agent.user_agent_alias = 'Linux Mozilla'
agent.follow_meta_refresh = true
}
end
# Authorisation by submitting email and password (Login)
#
def login_force(uid, email, pass)
url = "http://vk.com"
login_page = @ua.get(url)
login_form = login_page.form_with(:name => 'login')
login_form.email = email
login_form.pass = pass
user_page = login_form.submit # У разі успішної авторизації відбувається перехід на http://login.vk.com.
if user_page.uri.to_s == 'http://login.vk.com/?act=login'
user_page =user_page.forms.first.submit
return true
else
return false
end
end
end
if __FILE__ == $0
id = "xxxxxxxx"
email = "user@example.com"
pass = "your_password"
vkontakte_agent = Vkontakte.new
vkontakte_agent.login_force(id, email, pass)
end
Як ви бачите, авторизація на сайті vk.com відбувається більш прозоро і зрозуміло.
Якщо порівняти сайти vkontakte.ru і vk.com, можна помітити, що крім відмінностей у назві домену вони практично ідентичні.
Для прикладу продемонструю метод для зміни статусу ВКонтакте:
class Vkontakte
# Set status message for current user
#
def set_status(message)
url = 'http://vk.com/profile.php'
page = @ua.get(url)
hash = page.body.match(/id='activityhash' value='(.+?)'/)[1]
query = {"activityhash" => hash, "setactivity" => message}
sleep(1) # http://vk.com/blank.php - Ви намагались завантажити бiльше однiєї однотипної сторiнки за секунду. Повернiться назад i спробуйте ще раз.
page = @ua.post(url, query)
end
end
Ддя того щою цей метод працював з сайтом vkontakte.ru достатньо у змінній url змінити vk.com на vkontakte.ru.
2 коментарі:
Почитал. Пиши еще!
привiт, гарно написано! а можеш навести приклад авторизацii тiльки з використанням бiблiотеки WATIR =) буду дуже вдячний.
Дописати коментар