import json import os.path import random import time import requests from flask import Flask, render_template from flask_apscheduler import APScheduler URL = "https://www.reddit.com/r/InterdimensionalCable/top.json?limit=100&t=week" scheduler = APScheduler() v = [] def getRedditData(url): resp = requests.get(url) text = resp.text code = resp.status_code while code == 429: print("waiting for timeout to end ...") time.sleep(2) resp = requests.get(url) text = resp.text code = resp.status_code data = json.loads(text) token = data["data"]["after"] ret = [] for post in data["data"]["children"]: turl = post["data"]["url_overridden_by_dest"] if "youtu.be" in turl: turl = turl.replace("https://youtu.be/", "https://www.youtube.com/watch?v=") if "m.youtube.com" in turl: turl = turl.replace( "https://m.youtube.com/embed", "https://www.youtube.com/watch?v=" ) turl = turl.replace("watch?v=", "embed/") turl = turl + "?autoplay=1&enablejsapi=1" ret.append(turl) return ret, token def doPages(numPages): token = "" vids = [] for i in range(numPages): if i == 0: v, t = getRedditData(URL) vids = vids + v token = t time.sleep(2) v, t = getRedditData(URL + f"&after={token}") vids = vids + v print(f"got page {i}...") return vids @scheduler.task("interval", id="do_job_1", minutes=60, misfire_grace_time=900) def job1(): global v doFetch = False pexist = os.path.exists("temp.json") if pexist: print("temp.json exists") sec = os.path.getmtime("temp.json") now = time.time() if now - sec > 600: doFetch = True else: doFetch = True if doFetch: print("stale or no file, fetching...") v = doPages(2) with open("temp.json", "w") as f: json.dump(v, f) else: print("fresh file, not fetching...") with open("temp.json", "r") as f: v = json.load(f) app = Flask(__name__) scheduler.init_app(app) scheduler.start() job1() @app.route("/") def hello_world(): global v random.shuffle(v) return render_template("index.html", vids=json.dumps(v)) if __name__ == "__main__": app.run(host="0.0.0.0", port=8080)