首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Flask在Python中每隔5秒更新一次RSS提要

如何使用Flask在Python中每隔5秒更新一次RSS提要
EN

Stack Overflow用户
提问于 2020-07-08 02:15:30
回答 2查看 1K关注 0票数 0

我做了很多研究,但没有相关的东西起作用。基本上,我试图抓取RSS Feed,并在一个使用Python Flask创建的网页上填充表格格式的数据。我已经从字典中抓取了数据。但它不会实时(或每5秒)获取网页上的数据。

下面是使用formfeed,rss_feed.py抓取RSS Feed的代码。

代码语言:javascript
复制
import feedparser
import time

def feed_data():

    RSSFeed = feedparser.parse("https://www.upwork.com/ab/feed/jobs/rss?sort=recency&paging=0%3B10&api_params=1&q=&securityToken=2c2762298fe1b719a51741dbacb7d4f5c1e42965918fbea8d2bf1185644c8ab2907f418fe6b1763d5fca3a9f0e7b34d2047f95b56d12e525bc4ba998ae63f0ff&userUid=424312217100599296&orgUid=424312217104793601")

    feed_dict = {}

    for i in range(len(RSSFeed.entries)):
        feed_list = []
        feed_list.append(RSSFeed.entries[i].title)
        feed_list.append(RSSFeed.entries[i].link)
        feed_list.append(RSSFeed.entries[i].summary)
        published = RSSFeed.entries[i].published
        feed_list.append(published[:len(published)-6])
        feed_dict[i] = feed_list

    return feed_dict


if __name__=='__main__':
    while True:
        feed_dict = feed_data()
        #print(feed_dict)
        #print("==============================")
        time.sleep(5)

在此脚本上使用time.sleep()。但是当我将它导入app.py时,它不能每5秒重新加载一次。下面是运行Flask应用程序app.py的代码:

代码语言:javascript
复制
from flask import Flask, render_template
import rss_feed

feed_dict = rss_feed.feed_data()

app = Flask(__name__)


@app.route("/")
def hello():
    return render_template('home.html', feed_dict=feed_dict)

我也尝试过使用APScheduler中的BackgroundScheduler。似乎什么都不起作用。Formfeed的“etag”和“modified”由于某种原因无法识别(它是否已被弃用?)。我甚至尝试过在meta标签中使用'refresh‘属性。但这只会更新Jinja2模板,而不会更新代码本身:

代码语言:javascript
复制
<meta http-equiv="refresh" content="5">

我真的被困在这个问题上了。

这是一个(半完成)应用程序的链接:https://rss-feed-scraper.herokuapp.com/

EN

回答 2

Stack Overflow用户

发布于 2020-07-08 04:46:12

你的

代码语言:javascript
复制
feed_dict = rss_feed.feed_data()

处于模块级。

当Python启动时,它会执行这些行,直到您重新启动应用程序时才会重新加载它。

如果你对这个话题感兴趣,请在谷歌上搜索runtime vs compile time python

也就是说,我建议您使用JavaScript函数进行轮询,该函数每5秒轮询一次远程RSS。

这看起来像这样

代码语言:javascript
复制
setInterval(function(){ 
    //code goes here that will be run every 5 seconds.    
}, 5000);
票数 0
EN

Stack Overflow用户

发布于 2020-07-08 17:44:17

我尝试了很多方法,但我发现这是解决这个问题的最简单的方法:

代码语言:javascript
复制
from flask import Flask, render_template
import rss_feed

app = Flask(__name__)

feed_dict={}

def update_data(interval):
    Timer(interval, update_data, [interval]).start()
    global feed_dict
    feed_dict = rss_feed.feed_data()

update_data(5)

@app.route("/")
def hello():
    #feed_dict = rss_feed.feed_data()
    #feed_dict=feed_data()
    #   time.sleep(5)
    return render_template('home.html', feed_dict=feed_dict)

一个简单的update_data()就解决了整个问题,不需要任何额外的模块,JavaScript,AJAX等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62781514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档