#!/usr/bin/env python3 from flask import Flask, request, redirect, make_response from wsgiref.handlers import CGIHandler import os import time from diskcache import Cache linkbase = 'https://rf.dobrochan.net/' requestbase = 'https://rf.dobrochan.net/' cache_directory = '/tmp/rfdobrochan2rss' directcache_time = 300 app = Flask(__name__) if os.environ.get("PATH_INFO") is None: os.environ["PATH_INFO"] = "" def update_page(thread, cache): if (cache[thread + 'time'] > 0): cache[thread + 'time'] = time.time() import requests ret = requests.get(requestbase + thread, headers={'If-Modified-Since':cache[thread + 'Last-Modified']}) if (ret.status_code == 304): return True if (ret.status_code > 399): return ret import bs4 page='' html = bs4.BeautifulSoup(ret.content, 'lxml') page = page + '\n \n \n' page = page + thread + '\n' page = page + ' \n' page = page + ' ' + linkbase + '/' + thread + '\n' #page = page + linkbase + '/' + thread + ';' posts = html.find_all('div', attrs={'class':'post reply'}) for post in posts: postTitle = str(post.a['id']) postLink = linkbase + '/' + thread + '#' + postTitle for i in post.find_all('span', attrs={'class':'quote'}): font = html.new_tag('font') font['color'] = 'green' i.wrap(font) page = page + ' \n' page = page + ' ' + postTitle + '\n' page = page + ' ' + str(post.find('time')['datetime']) + '\n' page = page + ' \n' page = page + '

' + postLink + '

\n' page = page + str(post) page = page + '
\n' page = page + ' ' + postLink + '\n' page = page + '
\n' page = page + '
\n
' cache[thread + 'feed'] = page cache[thread + 'Last-Modified'] = ret.headers['Last-Modified'] cache[thread + 'time'] = time.time() return True @app.route('/', methods=['GET']) def mainpage(thread): cache = Cache(directory=cache_directory) try: test = cache[thread+'time'] except KeyError: cache[thread + 'time'] = 0 cache[thread + 'Last-Modified'] = 'Thu, 01 Jan 1970 00:00:00 GMT' if ( (time.time() - cache[thread + 'time']) > directcache_time): ret = update_page(thread, cache) if ( ret != True ): response = make_response(ret.content, ret.status_code) return response response = make_response(cache[thread + 'feed'], 200) response.mimetype = "application/rss+xml" return response CGIHandler().run(app)