Foo.
This commit is contained in:
parent
38de96de6d
commit
989a175fa5
5 changed files with 173 additions and 2 deletions
103
redditor.py
Executable file
103
redditor.py
Executable file
|
|
@ -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)
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue