Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # coding: utf8
- import time
- import os
- import sys
- import json
- import re
- import random
- import requests
- requests = requests.Session()
- # todo
- # исправить вложенные спойлеры
- def parse(post):
- all = {
- '<br>': '\n',
- '<em>': '[i]',
- '</em>': '[/i]',
- '<strong>': '[b]',
- '</strong>': '[/b]',
- '<sup>': '[sup]',
- '</sup>': '[/sup]',
- '</sub>': '[/sub]',
- '<sub>': '[sub]',
- '<span class="spoiler">(?P<x>.*)</span>': '[spoiler]\g<x>[/spoiler]',
- '<span class="unkfunc">(?P<x>.*)</span>': '\g<x>', # >quoting
- '<span class="u">(?P<x>.*)</span>': '[u]\g<x>[/u]', # under line
- '<span class="o">(?P<x>.*)</span>': '[o]\g<x>[/o]', # upper line
- '<span class="s">(?P<x>.*)</span>': '[s]\g<x>[/s]', # middle line
- '<a href=".*" class="post-reply-link" data-thread="\d*" data-num="(?P<x>\d*)">>>\d*</a>': '>>\g<x>',
- '<a href="(?P<x>.*)" target="_blank">.*</a>': '\g<x>', # web link
- '<a href="mailto:.*">(?P<x>.*)</a>': 'mailto:\g<x>',
- }
- for key, value in all.items():
- post = re.sub(key, value, post)
- return post
- def accepted_files(folder):
- raw = os.listdir(folder)
- accepted = 'jpg', 'jpeg', 'png', 'gif', 'webm'
- for index, filename in enumerate(raw):
- if not any(filename.endswith('.' + ext) for ext in accepted):
- del raw[index]
- return raw
- class App:
- def __init__(self):
- with open('settings.json') as f:
- setup = json.load(f)
- board, thread = re.findall("/(\w+)/res/(\d+).html", setup['thread'])[0]
- self.apilink = setup['thread'].replace('.html', '.json')
- proxy = setup['proxy']
- if proxy:
- requests.proxies = {
- 'http': 'http://' + proxy,
- 'https': 'https://' + proxy,
- }
- self.data = {
- 'task': 'post',
- 'board': board,
- 'thread': thread,
- 'email': setup['email'],
- 'name': setup['name'],
- 'subject': setup['subject'],
- }
- self.npics = setup['npics']
- self.pause = setup['pause']
- self.proxy = setup['proxy']
- self.run()
- def build_data(self):
- # посты для репоста из того же треда
- page = requests.get(self.apilink)
- #print(page.text)
- page = page.json()
- all = page['threads'][0]['posts']
- msg = parse(random.choice(all)['comment'])
- last = all[-1]['hidden_num']
- if '>>' in msg:
- # заменяем ссылки в посе на последний пост в треде
- msg = re.sub('>>\d+', '>>' + last, msg)
- else:
- # если ссылок нет - вставляем ссылку на последний пост в треде
- msg = '>>' + last + '\n' + msg
- data = {'comment': msg}
- data.update(self.data)
- return data
- def build_files(self):
- # макаба не пропускает одинаковые пикчи в одном посте
- used = []
- files = {}
- for i in range(self.npics):
- filename = random.choice(accepted_files('pics'))
- while filename in used:
- filename = random.choice(accepted_files('pics'))
- used.append(filename)
- filepath = os.path.join('pics', filename)
- files['image' + str(self.npics + 1)] = open(filepath, 'rb').read()
- return files
- def run(self):
- response = requests.post(
- 'https://2ch.hk/makaba/posting.fcgi',
- data=self.build_data(),
- files=self.build_files()
- )
- print(response.status_code)
- time.sleep(self.pause)
- self.run()
- App()
Advertisement
Add Comment
Please, Sign In to add comment