-
Notifications
You must be signed in to change notification settings - Fork 2
/
main.py
93 lines (80 loc) · 4.51 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# -*- coding: utf-8 -*-
import pycurl
import StringIO
import lxml.html
################################################################################
################################################################################
################################################################################
###
###
### Прокся может быть HTTP, SOCKS4, SOCKS5. При использовании прокси, при
### создании контруктора надо передаватьего списком из нескольких значений:
### proxy = ['HTTP', 'ip', 'port', 'login', 'password'], в случае если прокся
### анонимная, поля login и password дожны быть None. Все поля обязательны к
### заполнению. Работоспособность с проксей не проверял.
###
################################################################################
################################################################################
################################################################################
class vk_bot():
def __init__(self, email, password, myid, proxy):
# Первоначальные данные начального объекта
self.email = email
self.password = password
self.myid = myid
self.proxy = proxy
# Пустая куки изначально.
self.cookie = ''
# Создание объекта curl'a
self.curlobj = pycurl.Curl()
# --- Авторизация вконтакте ----
def login(self):
self.curlobj.setopt(pycurl.URL, 'http://vk.com/login.php?email='+email+'&pass='+password)
self.curlobj.setopt(pycurl.HTTPHEADER, ["Accept:"])
self.output = StringIO.StringIO() # Выходящий поток. Значение == код страницы.
self.curlobj.setopt(pycurl.WRITEFUNCTION, self.output.write) # Пишем в поток.
if self.proxy is None:
print 'No use proxy!'
else:
if self.proxy[0] == 'HTTP':
self.curlobj.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_HTTP)
elif self.proxy[0] == 'SOCKS4':
self.curlobj.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS4)
elif self.proxy[0] == 'SOCKS5':
self.curlobj.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)
if self.proxy[3] is not None:
self.curlobj.setopt(pycurl.PROXY, '%s:%s' % self.proxy[1], self.proxy[2])
self.curlobj.setopt(pycurl.PROXYUSERPWD, '%s:%s' % self.proxy[3], self.proxy[4])
else:
self.curlobj.setopt(pycurl.PROXY, '%s:%s' % self.proxy[1], self.proxy[2])
self.curlobj.setopt(pycurl.FOLLOWLOCATION, 1)
# self.curlobj.setopt(pycurl.MAXREDIRS, 5) # При условии редиректов, ограничение позволит попасть на нужную страницу если она скрыта.
self.curlobj.setopt(pycurl.COOKIEFILE, self.cookie) # cookie файл, без него не возможно получение второй и последюущих страниц, контакт считает что мы не авторизованы + ошибка SSL
self.curlobj.perform()
self.friends_page()
#loginpage = self.outputgetvalue()
# --- Получение страницы друзей ---
def friends_page(self):
self.curlobj.setopt(pycurl.URL, 'http://m.vk.com/friends?id=105719996')
self.curlobj.setopt(pycurl.HTTPHEADER, ["Accept:"])
self.curlobj.setopt(pycurl.WRITEFUNCTION, self.output.write)
self.curlobj.setopt(pycurl.FOLLOWLOCATION, 1)
self.curlobj.setopt(pycurl.MAXREDIRS, 5)
self.curlobj.setopt(pycurl.COOKIEFILE, self.cookie)
self.curlobj.perform()
friendspage = self.output.getvalue()
allfriends = friendspage.find('</html><!DOCTYPE html>')
self.allfriends = friendspage[allfriends:]
self.ids()
def ids(self):
listofid = []
doc = lxml.html.document_fromstring('%s' % self.allfriends)
self.frofid = doc.xpath('/html/body/div/div/div[@class="friend"]/a')
for idi in self.frofid:
listofid.append(idi.get('href'))
print listofid
email = '+79165709948'
password = '*'
myid = '164266801'
proxy = None
vk_bot(email, password, myid, proxy).login()