-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy paththeme_reply.py
More file actions
168 lines (150 loc) · 5.66 KB
/
theme_reply.py
File metadata and controls
168 lines (150 loc) · 5.66 KB
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
import re
from requests import RequestException
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import os
import json
import time
from random import choice
class ThemeReply:
def __init__(self):
self.session = requests.Session()
self.ua = UserAgent()
self.session.headers.update({'user-agent': self.ua.random})
self.themes = None
self.themes = None
self.message = None
self.delay = None
self.xftoken = None
self.username = None
self.cookie_load()
def data_load(self):
self.themes = input('Ссылка(и) на тему:')
self.themes = re.sub(r'page-\d+#post-\d+', '', self.themes)
self.themes = re.sub(r'page-\d+', '', self.themes)
self.themes = self.themes.replace(' ', '').split(',')
self.message = input('Сообщение(я):')
self.message = self.message.replace(' ', '').split(',')
self.delay = input('Задержка в секундах:')
def cookie_load(self):
if not os.path.isfile('cookie.txt'):
os.mkdir('cookie.txt')
print('Edit cookie.txt')
input()
exit()
with open('cookie.txt') as f:
cookies_lines = json.load(f)
for line in cookies_lines:
if 'name' in line:
self.session.cookies[line['name']] = line['value']
def is_login(self):
response = self.session.get(f'https://mistaua.com/')
req_bs = BeautifulSoup(response.text, 'lxml')
if not req_bs.select_one('img[class="navTab--visitorAvatar"]'):
return False
return True
def get_xftoken(self):
try:
response = self.session.get(self.themes[0])
token_bs = BeautifulSoup(response.content, 'lxml')
token = token_bs.find('input', {'name': '_xfToken'})['value']
self.xftoken = token
except RequestException as e:
raise e
else:
return token
@staticmethod
def get_last_date(soup_content):
try:
last_date = soup_content.select_one('input[name="last_date"]').get('value')
return last_date
except Exception as e:
raise e
@staticmethod
def get_last_known_date(soup_content):
try:
last_known_date = soup_content.select_one('input[name="last_known_date"]').get('value')
return last_known_date
except Exception as e:
print(e)
return False
def get_username(self):
try:
response = self.session.get('https://mistaua.com')
soup = BeautifulSoup(response.content, 'lxml')
try:
self.username = soup.select_one('b[id="NavigationAccountUsername"]').text
except Exception as e:
raise e
except RequestException as e:
raise e
def reply_theme(self):
try:
self.data_load()
self.get_username()
self.get_xftoken()
data = {
'message_html': '',
'last_date': '',
'last_known_date': '',
'_xfToken': self.xftoken,
'_xfRequestUri': '',
'_xfNoRedirect': 1,
'_xfResponseType': 'json'
}
while True:
for link in self.themes:
print(link)
response = self.session.get(link)
soup = BeautifulSoup(response.content, 'lxml')
last_page = self.get_last_theme_page(soup)
if not last_page:
last_page = 1
response = self.session.get(f'{link}page-{last_page}')
soup = BeautifulSoup(response.content, 'lxml')
if self.check_last_reply(soup):
last_known_date = self.get_last_known_date(soup)
if not last_known_date:
self.themes.remove(link)
continue
last_date = self.get_last_date(soup)
data['last_date'] = last_date
data['last_known_date'] = last_known_date
_xf_request_uri = response.url.replace('https://mistaua.com/', '')
data['_xfRequestUri'] = _xf_request_uri
data['message_html'] = f'<p>{choice(self.message)}</p>'
response = self.session.post(f'{link}add-reply', data=data)
print(response.text)
time.sleep(10)
time.sleep(int(self.delay))
except RequestException as e:
raise e
def check_last_reply(self, soup_content):
try:
last_reply = soup_content.select('li[class="message"]')
last_reply_name = last_reply[-1].get('data-author')
if self.username in last_reply_name:
return False
else:
return True
except Exception as e:
raise e
@staticmethod
def get_last_theme_page(soup_content):
try:
last_theme_data = soup_content.select_one('div[class="PageNav"]').get('data-last')
return last_theme_data
except Exception as e:
print(e)
return False
def main():
print('Ссылки\\Сообщения вводить через запятую.')
reply = ThemeReply()
if reply.is_login():
print('Login successful')
reply.reply_theme()
else:
print('Login fail')
if __name__ == '__main__':
main()