Guest User

Untitled

a guest
Feb 22nd, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.85 KB | None | 0 0
  1. # coding: utf8
  2.  
  3. import time
  4. import os
  5. import sys
  6. import json
  7. import re
  8. import random
  9.  
  10. import requests
  11. requests = requests.Session()
  12.  
  13. # todo
  14. # исправить вложенные спойлеры
  15.  
  16.  
  17. def parse(post):
  18.     all = {
  19.     '<br>': '\n',
  20.     '<em>': '[i]',
  21.     '</em>': '[/i]',
  22.     '<strong>': '[b]',
  23.     '</strong>': '[/b]',
  24.     '<sup>': '[sup]',
  25.     '</sup>': '[/sup]',
  26.     '</sub>': '[/sub]',
  27.     '<sub>': '[sub]',
  28.     '<span class="spoiler">(?P<x>.*)</span>': '[spoiler]\g<x>[/spoiler]',
  29.     '<span class="unkfunc">(?P<x>.*)</span>': '\g<x>', # >quoting
  30.     '<span class="u">(?P<x>.*)</span>': '[u]\g<x>[/u]', # under line
  31.     '<span class="o">(?P<x>.*)</span>': '[o]\g<x>[/o]', # upper line
  32.     '<span class="s">(?P<x>.*)</span>': '[s]\g<x>[/s]', # middle line
  33.     '<a href=".*" class="post-reply-link" data-thread="\d*" data-num="(?P<x>\d*)">>>\d*</a>': '>>\g<x>',
  34.     '<a href="(?P<x>.*)" target="_blank">.*</a>': '\g<x>', # web link
  35.     '<a href="mailto:.*">(?P<x>.*)</a>': 'mailto:\g<x>',
  36.     }
  37.  
  38.     for key, value in all.items():
  39.         post = re.sub(key, value, post)
  40.     return post
  41.  
  42. def accepted_files(folder):
  43.     raw = os.listdir(folder)
  44.     accepted = 'jpg', 'jpeg', 'png', 'gif', 'webm'
  45.     for index, filename in enumerate(raw):
  46.         if not any(filename.endswith('.' + ext) for ext in accepted):
  47.             del raw[index]
  48.     return raw
  49.    
  50.  
  51. class App:
  52.     def __init__(self):
  53.         with open('settings.json') as f:
  54.             setup = json.load(f)
  55.         board, thread = re.findall("/(\w+)/res/(\d+).html", setup['thread'])[0]
  56.         self.apilink = setup['thread'].replace('.html', '.json')
  57.        
  58.         proxy = setup['proxy']
  59.         if proxy:
  60.             requests.proxies = {
  61.                 'http': 'http://' + proxy,
  62.                 'https': 'https://' + proxy,
  63.                 }
  64.         self.data = {
  65.         'task': 'post',
  66.         'board': board,
  67.         'thread': thread,
  68.         'email': setup['email'],
  69.         'name': setup['name'],
  70.         'subject': setup['subject'],
  71.         }
  72.         self.npics = setup['npics']
  73.         self.pause = setup['pause']
  74.         self.proxy = setup['proxy']
  75.        
  76.         self.run()
  77.        
  78.     def build_data(self):
  79.         # посты для репоста из того же треда
  80.         page = requests.get(self.apilink)
  81.         #print(page.text)
  82.         page = page.json()
  83.         all = page['threads'][0]['posts']
  84.         msg = parse(random.choice(all)['comment'])
  85.        
  86.        
  87.         last = all[-1]['hidden_num']
  88.         if '>>' in msg:
  89.             # заменяем ссылки в посе на последний пост в треде
  90.             msg = re.sub('>>\d+', '>>' + last, msg)
  91.         else:
  92.             # если ссылок нет - вставляем ссылку на последний пост в треде
  93.             msg = '>>' + last + '\n' + msg
  94.        
  95.         data = {'comment': msg}
  96.         data.update(self.data)
  97.         return data
  98.    
  99.     def build_files(self):
  100.         # макаба не пропускает одинаковые пикчи в одном посте
  101.         used = []
  102.         files = {}
  103.         for i in range(self.npics):
  104.             filename = random.choice(accepted_files('pics'))
  105.             while filename in used:
  106.                 filename = random.choice(accepted_files('pics'))
  107.             used.append(filename)
  108.             filepath = os.path.join('pics', filename)
  109.             files['image' + str(self.npics + 1)] = open(filepath, 'rb').read()
  110.         return files
  111.  
  112.     def run(self):
  113.         response = requests.post(
  114.             'https://2ch.hk/makaba/posting.fcgi',
  115.             data=self.build_data(),  
  116.             files=self.build_files()
  117.         )
  118.         print(response.status_code)
  119.         time.sleep(self.pause)
  120.         self.run()
  121.    
  122.  
  123. App()
Advertisement
Add Comment
Please, Sign In to add comment