#!/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)