вторник, 21 июня 2011 г.

Python. Авторизация на сайт Vkontakte.ru или Vk.com без API

Сайт Vkontakte.ru - это одна из самых популярных  соц сетей России.
Большая известность, повлекла за собой программистов. Появилось много программ, для этого сайта. Например клиент-серверы.

Специально для этого Администраторы сайта создали API, через который зарегистрированные приложения могут совершать различные действия, такие как отправка сообщения, просмотр списка друзей и т.д

Но для тех кто не хочет регистрировать, вот скрипт для авторизации:


import urllib
import urllib2
import re
import sys
import math
import os
import time

class Vkontakte:
    def __init__(self, email, password):
        self.email = email
        self.password = password
        self.cookie = None

    def get_s_value(self):        
        #Возвращает уникальный идентификатор, который выдается на домене login.vk.com
        host = 'http://login.vk.com/?act=login'
        post = urllib.urlencode({'email' : self.email,
                                 'expire' : '',
                                 'pass' : self.password,
                                 'vk' : ''})

        headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13 (.NET CLR 3.5.30729)',
                   'Host' : 'login.vk.com',
                   'Referer' : 'http://vkontakte.ru/index.php',
                   'Connection' : 'close',
                   'Pragma' : 'no-cache',
                   'Cache-Control' : 'no-cache',
                  }

        conn = urllib2.Request(host, post, headers)
        data = urllib2.urlopen(conn)
        my_crack = str(data.read())[350:410]        
        return my_crack  

    def get_cookie(self):
        #Возвращает remixsid из куки
        if self.cookie: return self.cookie

        host = 'http://vkontakte.ru/login.php?op=slogin'
        post = urllib.urlencode({'s' : self.get_s_value()})
        headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13',
                   'Host' : 'vkontakte.ru',
                   'Referer' : 'http://login.vk.com/?act=login',
                   'Connection' : 'close',
                   'Cookie' : 'remixchk=5; remixsid=nonenone',
                   'Pragma' : 'no-cache',
                   'Cache-Control' : 'no-cache'
                  }
        conn = urllib2.Request(host, post, headers)
        data = urllib2.urlopen(conn)
        cookie_src = data.info().get('Set-Cookie')
        self.cookie = re.sub(r'(expires=.*?;\s|path=\/;\s|domain=\.vkontakte\.ru(?:,\s)?)', '', cookie_src)        
        return self.cookie
        
    def friends(self):    
        cook = self.get_cookie()
        host = 'http://vkontakte.ru/friends_ajax.php'
        post = urllib.urlencode({'s' : self.get_s_value()})
        headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.13) Gecko/2009073022 Firefox/3.0.13','Host' : 'vkontakte.ru','Referer' : 'http://login.vk.com/?act=login','Connection' : 'close','Cookie' : 'remixchk=5; '+cook,'Pragma' : 'no-cache','Cache-Control' : 'no-cache'}        
        conn = urllib2.Request(host, post, headers)
        data = urllib2.urlopen(conn)
        my_fr = str(data.read())
        return my_fr

Пример использования:

vk = Vkontakte(ваш email,ваш пароль)
print vk.get_cookie()

7 комментариев:

  1. Подскажите, почему не запускается? при клике питон файла окно мигает и проподает. Пользуюсь windows px

    ОтветитьУдалить
  2. А вы запускайте через терминал. Там в файле питона значит ошибка имеется.

    ОтветитьУдалить
  3. nemohu zajty v kontakty,pry tom vso vahu pravelno

    ОтветитьУдалить
  4. А как ето на ubuntu запустить

    ОтветитьУдалить
  5. Авторизация ВКонтакте, с помощью библиотеки mechanize(установка: pip install mechanize)

    import mechanize
    def vk_login(login, password):
    browser = mechanize.Browser()
    browser.addheaders = [('User-agent', 'Firefox')]
    browser.set_handle_robots(False)
    url = 'http://vk.com/login.php?email=' + login + '&pass=' + password
    browser.open(url)
    return browser

    browser = vk_login('my_email', 'my_login')
    # далее делаем с browser что нам хочется

    ОтветитьУдалить
  6. Ищу web разработчика со знаниями Python,Django (опыт работы с ними 2-3 года) для работы в крутом интернет-портале.Все вопросы,отклики в личку. http://vk.com/katrinburtseva

    ОтветитьУдалить
  7. Это велосипед использовать регулярные выражения и urllib2. Какой смысл? Вы ведь пишите не на С++, а на Python. У питона давно организовано кучу модулей, для подобных целей. Один из прекрасных grablib например. Авторизация в три строчки. К тому же urllib2 не поддерживает socks прокси не 4-ку не 5-ку, приходится привязывать socksiPy, и зачем парсить регулярками, когда давно уже существует lxml к примеру. пример использования grablib: http://seo.ndcoders.ru статья про парсинг прокси.

    ОтветитьУдалить