目的
-
解决跨域问题;
-
减少不必要的对RSS接口的请求, 使用缓存提升前端展示速度.
完整代码
已将注释写入代码中, 实现过程请阅读注释.
from tornado.web import RequestHandler
import requests
import time
import os
class getDevRSS(RequestHandler):
def __init__(self, *args, **kwargs):
super(getDevRSS, self).__init__(*args, **kwargs)
# 解决跨域问题
self.set_header('Access-Control-Allow-Origin', '*')
self.set_header('Access-Control-Allow-Headers',
'Origin, X-Requested-With, Content-type, Accept, connection, User-Agent, Cookie')
self.set_header('Access-Control-Allow-Methods',
'POST, GET, OPTIONS')
async def get(self):
rss_file = 'sofRSS'
with open(rss_file, 'r+') as f:
content = f.read()
# 每次请求该接口, 直接返回读取缓存文件的内容给访问者, 并结束本次请求
self.finish(content)
# 获取缓存文件修改时间, 与当前时间做比较
filemt = time.localtime(os.stat(rss_file).st_mtime)
filemt = time.mktime(filemt)
nowtime = time.mktime(time.localtime())
# 设置 1 分钟内不请求RSS接口
if nowtime - filemt < 60:
return
# 超过 1 分钟, 请求本接口时会请求RSS接口并获取结果
res = await self.get_new_rss_content()
# 清空缓存文件内容
f.seek(0)
f.truncate()
# 写入新的RSS结果内容
f.write(res)
async def get_new_rss_content(self):
# 此处为 stackoverflow 的一个RSS接口
url = "https://stackoverflow.com/feeds/question/7353538"
res = requests.get(url).text
return res
网友评论