diff options
Diffstat (limited to 'redditor.py')
-rwxr-xr-x | redditor.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/redditor.py b/redditor.py new file mode 100755 index 0000000..2372962 --- /dev/null +++ b/redditor.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 + +import json +import random +import socket +import struct +import time +import bz2 +import os +import functools +import contextlib +import math +import ctypes +import io +from urllib.parse import * + +import numpy as np +from PIL import Image +import praw +import bs4 +import requests + +from pixelterm import pixelterm + +import pxf + +def lesearchiter(term): + last = None + print('Searching term="{}", [initial]'.format(term)) + for s in r.search(term): + last = s + yield s + while True: + print('Searching term="{}", after={}'.format(term, last.fullname)) + for s in r.search(term, limit=100, after=last.fullname): + last = s + yield s + +if __name__ == '__main__': + import argparse, pathlib, sys + + parser = argparse.ArgumentParser() + parser.add_argument('-p', '--pixelflut', type=str, default='94.45.232.225:1234') + parser.add_argument('term') + args = parser.parse_args() + + target, *params = args.pixelflut.split('@') + host, port = target.split(':') + port = int(port) + x, y, *_r = params[0].split(',') if params else (0, 0, None) + w, h, reps = _r if _r else (320, 240) + x, y, w, h, reps = map(int, (x, y, w, h, reps)) + pf = pxf.Pixelflut(host, port, x, y, w, h, reps) if args.pixelflut else None + + r = praw.Reddit('Pixelflut search test by /u/jaseg') + r.refresh_access_information() + + terms = args.term.split(',') + print('Search terms:', terms) + + imgnum = 0 + for s in lesearchiter(random.choice(terms)): + try: + url = s.url +# print(url) + if s.stickied: +# print(' → stickied') + continue + if s.is_self: +# print(' → self') + continue + stripped_down = urlunparse(urlparse(url)[:3] + (None,None,None)) + l = stripped_down.lower() + if any(l.endswith(e) for e in ('.gif')): +# print(' → GIF filter') + continue + rq = requests.get(url) + if not rq.headers.get('content-type', '').startswith('image/'): + soup = bs4.BeautifulSoup(rq.text, 'lxml') + img = soup.find('img') + newurl = img.attrs['src'] + if newurl.startswith('//'): + newurl = 'http:'+newurl +# print('Fetching', newurl) + rq = requests.get(newurl) + if not rq.headers.get('content-type', '').startswith('image/'): +# print(' → image filter:', rq.headers.get('content-type')) + continue + + with open('/tmp/testdir/img_{}'.format(imgnum), 'wb') as f: + f.write(rq.content) + imgnum += 1 + if imgnum >= 20: + sys.exit(0) +# bio = io.BytesIO() +# bio.write(rq.content) +# bio.seek(0) +# pimg = Image.open(bio) +# pf.encode_image(pimg, idx=0) +# pf.sendframe(0) + except Exception as e: + print(' → Exception:', e) + |