/
phpbb_poster.py
58 lines (51 loc) · 2.09 KB
/
phpbb_poster.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
import time
import configparser
import requests
from bs4 import BeautifulSoup as BS
from requests_toolbelt import sessions
config = configparser.ConfigParser()
config.read('config.ini')
forum = config.sections()[0]
login = "/ucp.php?mode=login"
forum_number = config[forum]['forum_number'] # 17 == Pull Requests
post = "/posting.php?mode=post&f={}".format(forum_number)
headers = {'User-Agent': 'Mozilla/5.0'}
login_payload = {'redirect': 'index.php',
'sid': '',
'login': 'Login'}
login_payload['username'] = config[forum]['username']
login_payload['password'] = config[forum]['password']
def grab_secrets(soup):
# DEBUG: print(soup)
# DEBUG: print(dir(soup))
form_token = soup.find('input', {'name': 'form_token'})['value']
lastclick = soup.find('input', {'name': 'lastclick'})['value']
creation_time = soup.find('input', {'name': 'creation_time'})['value']
return form_token, lastclick, creation_time
def make_topic(new_topic_request):
soup = BS(new_topic_request.text, "lxml")
form_token, lastclick, creation_time = grab_secrets(soup)
data = {'post': 'Submit',
'lastclick': creation_time,
'creation_time': creation_time,
'form_token': form_token}
return data
def new_topic(subj, msg):
# forum summaries are limited to 120 chars
if len(subj) > 120:
raise RuntimeError("Subject exceeds 120 chars.")
with sessions.BaseUrlSession(base_url=forum) as s:
login_request = s.post(forum + login, headers=headers, data=login_payload)
# DEBUG: print(login_request.text)
soup = BS(login_request.text, "lxml")
time.sleep(2.5)
# DEBUG: print(soup)
new_topic_request = s.get(forum + post, headers=headers)
data = make_topic(new_topic_request)
data['subject'], data['message'] = subj, msg
time.sleep(2.5) # phpbb gives a 302 error if form is submitted immediately
new_topic = s.post(post, headers=headers, data=data)
if __name__ == '__main__':
subj = 'test subject goes here'
msg = 'test message goes here'
new_topic(subj, msg)