Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- import mechanize, cookielib, urllib2, urllib, re
- #
- consts = {
- 'user_agent': 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1) Gecko/2008071615 Fedora/3.0.1-1.fc9 Firefox/3.0.1',
- 'vk_host': 'http://vkontakte.ru',
- 'vk_host_clear': 'vkontakte.ru',
- 'wall_url': 'al_wall.php',
- }
- settings = {
- 'vk_login': 'xxx@xxx.xxx',
- 'vk_password': 'xxx',
- 'target': 'wall', # wall
- 'target_name': 'koteblog',
- }
- debug = True
- class VKPost():
- def __init__(self, settings):
- """
- быдлокод
- """
- self.__settings = settings
- self.__consts = consts
- self.__debug = debug
- self.__login = settings['vk_login']
- self.__pass = settings['vk_password']
- self.__vars = self.get_vars()
- self.get_cookie()
- self.get_hash_and_ids()
- def get_vars(self):
- """
- Получаем две переменные,
- первая = кука,
- вторая = экземпляр объекта "браузер"
- """
- br = mechanize.Browser()
- cj = cookielib.LWPCookieJar()
- br.set_cookiejar(cj)
- br.set_handle_equiv(True)
- br.set_handle_gzip(True)
- br.set_handle_redirect(True)
- br.set_handle_referer(True)
- br.set_handle_robots(False)
- br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
- br.addheaders = [('User-agent', consts['user_agent'])]
- br.open(consts['vk_host'])
- br.select_form(nr=0)
- br.form['email'] = self.__login
- br.form['pass'] = self.__pass
- br.submit()
- response = br.response()
- headers = response.info()
- cookie = headers['Set-Cookie']
- cookie = re.sub("expires=(.*?);|path=(.*?);|domain=(.*?)$", "", cookie)
- cookie = "%s remixchk=5; remixseenads=2" % cookie
- return {'cookie': cookie, 'content': br}
- def get_cookie(self):
- """
- Эта та самая кука, которая получается при логине в уютный контактик.
- """
- if 'cookie' in self.__vars:
- self.__cookie = self.__vars['cookie']
- else:
- raise Exception, "Can't parse cookie"
- if debug:
- print self.__cookie
- return True
- def get_hash_and_ids(self):
- """
- Для поста чего-либо нужно получить хэш.
- Он берется со страницы приложения.
- Далее будут дописаны посты на личную страницу и прочие плюшки.
- """
- if self.__settings['target'] == 'wall':
- url = '%s/%s' % (consts['vk_host'], settings['target_name'])
- br = self.__vars['content'].open(url)
- html = br.read()
- h = re.findall("\"post_hash\":\"(.*?)\"", html)
- if h and h[0]:
- self.__target_hash = h[0]
- else:
- raise Exception, "Can't parse target hash"
- gid = re.findall("club(\d+)\?act=photo", html)
- if gid and gid[0]:
- self.__group_id = gid[0]
- else:
- raise Exception, "Can't parse group id"
- if self.__debug:
- print "Found: groupId: %s, post hash: %s" % (self.__group_id, self.__target_hash)
- return True
- def post(self, message):
- """
- Общая функция поста чего-либо.
- Будет дополняться.
- """
- if 'wall' == self.__settings['target']:
- url = '%s/%s' % (consts['vk_host'], consts['wall_url'])
- values = {'act': 'post',
- 'al': '1',
- 'message': message,
- 'official': '1',
- 'to_id': '-%s' % self.__group_id,
- 'type': 'all',
- 'facebook_export': '',
- 'friends_only': '',
- 'note_title': '',
- 'status_export': '',
- 'hash': self.__target_hash
- }
- headers = {'User-Agent': consts['user_agent'],
- 'Cookie': self.__cookie,
- 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
- 'X-Requested-With': 'XMLHttpRequest',
- 'Referer': '%s/%s' % (consts['vk_host'], settings['target_name']),
- 'Host': '%s' % consts['vk_host_clear']}
- data = urllib.urlencode(values)
- req = urllib2.Request(url, data, headers)
- try:
- urllib2.urlopen(req)
- except Exception: "Error while posting data"
- return True
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement