Tornado - 写一个缓存RSS的接口
Posted DevinTest测试开发实践
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tornado - 写一个缓存RSS的接口相关的知识,希望对你有一定的参考价值。
目的
解决跨域问题;
减少不必要的对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
点击“阅读原文”,简书版查看更方便!
以上是关于Tornado - 写一个缓存RSS的接口的主要内容,如果未能解决你的问题,请参考以下文章
text Wordpress - 创建自定义RSS源 - 显示RSS源 - 设置RSS缓存到期/缓存生命周期