美文网首页测试开发实践
Tornado - 写一个缓存RSS的接口

Tornado - 写一个缓存RSS的接口

作者: 严北 | 来源:发表于2018-04-13 15:43 被阅读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
    

    相关文章

      网友评论

        本文标题:Tornado - 写一个缓存RSS的接口

        本文链接:https://www.haomeiwen.com/subject/glockftx.html