Tornado - 写一个缓存RSS的接口

Posted DevinTest测试开发实践

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tornado - 写一个缓存RSS的接口相关的知识,希望对你有一定的参考价值。

目的

  1. 解决跨域问题;

  2. 减少不必要的对RSS接口的请求, 使用缓存提升前端展示速度.

完整代码

已将注释写入代码中, 实现过程请阅读注释.

 
   
   
 
  1. from tornado.web import RequestHandler

  2. import requests

  3. import time

  4. import os

  5. class getDevRSS(RequestHandler):

  6.    def __init__(self, *args, **kwargs):

  7.        super(getDevRSS, self).__init__(*args, **kwargs)

  8.        # 解决跨域问题

  9.        self.set_header('Access-Control-Allow-Origin', '*')

  10.        self.set_header('Access-Control-Allow-Headers',

  11.                        'Origin, X-Requested-With, Content-type, Accept, connection, User-Agent, Cookie')

  12.        self.set_header('Access-Control-Allow-Methods',

  13.                        'POST, GET, OPTIONS')

  14.    async def get(self):

  15.        rss_file = 'sofRSS'

  16.        with open(rss_file, 'r+') as f:

  17.            content = f.read()

  18.            # 每次请求该接口, 直接返回读取缓存文件的内容给访问者, 并结束本次请求

  19.            self.finish(content)

  20.            # 获取缓存文件修改时间, 与当前时间做比较

  21.            filemt = time.localtime(os.stat(rss_file).st_mtime)

  22.            filemt = time.mktime(filemt)

  23.            nowtime = time.mktime(time.localtime())

  24.            # 设置 1 分钟内不请求RSS接口

  25.            if nowtime - filemt < 60:

  26.                return

  27.            # 超过 1 分钟, 请求本接口时会请求RSS接口并获取结果

  28.            res = await self.get_new_rss_content()

  29.            # 清空缓存文件内容

  30.            f.seek(0)

  31.            f.truncate()

  32.            # 写入新的RSS结果内容

  33.            f.write(res)

  34.    async def get_new_rss_content(self):

  35.        # 此处为 stackoverflow 的一个RSS接口

  36.        url = "https://stackoverflow.com/feeds/question/7353538"

  37.        res = requests.get(url).text

  38. return res

点击“阅读原文”,简书版查看更方便!

以上是关于Tornado - 写一个缓存RSS的接口的主要内容,如果未能解决你的问题,请参考以下文章

RSS Feed Generator缓存使用清漆

text Wordpress - 创建自定义RSS源 - 显示RSS源 - 设置RSS缓存到期/缓存生命周期

从Node.js Stream写入多个文件

tornado中使用异步(tornado底层是使用协程写异步代码!)

Python Tornado初学笔记之表单与模板

iOS:缓存下载的 RSS 消息的最佳方式