aboutsummaryrefslogtreecommitdiff
path: root/redditor.py
diff options
context:
space:
mode:
authorjaseg <git@jaseg.net>2019-04-03 00:35:23 +0900
committerjaseg <git@jaseg.net>2019-04-03 00:35:23 +0900
commit989a175fa5eadd2cf36fd27dce105cedbaa514a7 (patch)
tree3aee0842a597b92383ae223977888a6ec11a490a /redditor.py
parent38de96de6d3820d5301491598bc21153cee715de (diff)
downloadclippy-989a175fa5eadd2cf36fd27dce105cedbaa514a7.tar.gz
clippy-989a175fa5eadd2cf36fd27dce105cedbaa514a7.tar.bz2
clippy-989a175fa5eadd2cf36fd27dce105cedbaa514a7.zip
Foo.
Diffstat (limited to 'redditor.py')
-rwxr-xr-xredditor.py103
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)
+