测试开发实践

Tornado - 写一个缓存RSS的接口

2018-04-13  本文已影响7人  严北

目的

  1. 解决跨域问题;

  2. 减少不必要的对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
上一篇下一篇

猜你喜欢

热点阅读