मैंने बहुत शोध किया और कुछ भी प्रासंगिक काम नहीं किया। मूल रूप से मैं आरएसएस फ़ीड को परिमार्जन करने और पायथन फ्लास्क का उपयोग करके बनाए गए वेबपेज पर तालिका प्रारूप में डेटा को पॉप्युलेट करने का प्रयास कर रहा हूं। मैंने डेटा को डिक्शनरी फॉर्म में स्क्रैप कर दिया है। लेकिन यह वेबपेज पर वास्तविक समय (या हर 5 सेकंड) में डेटा नहीं लाता है।

फॉर्मफीड, rss_feed.py का उपयोग करके आरएसएस फ़ीड को स्क्रैप करने के लिए कोड यहां दिया गया है।

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 सेकंड में पुनः लोड करने में विफल रहता है। फ्लास्क ऐप को चलाने के लिए यहां कोड है, app.py:

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 का उपयोग करने का प्रयास किया। कुछ भी काम का नहीं लगता। फॉर्मफीड का 'ईटैग' और 'संशोधित' किसी कारण से पहचाना नहीं जा रहा है (क्या इसे बहिष्कृत किया गया है?) मैंने मेटा टैग में 'रीफ्रेश' विशेषता का उपयोग करने का भी प्रयास किया। लेकिन वह निश्चित रूप से केवल Jinja2 टेम्प्लेट को अपडेट करता है, न कि कोड को ही:

<meta http-equiv="refresh" content="5">

मैं वास्तव में इस पर अटका हुआ हूं।

यहां (आधा पूर्ण) ऐप का लिंक दिया गया है: https://rss-feed-scraper.herokuapp .com/

0
Sebanti 7 जुलाई 2020, 21:15

2 जवाब

आपका

feed_dict = rss_feed.feed_data()

मॉड्यूल स्तर पर है।

जब पायथन शुरू होता है, तो यह इन पंक्तियों को निष्पादित करता है और जब तक आप अपने ऐप को पुनरारंभ नहीं करते तब तक इसे पुनः लोड नहीं करेंगे।

यदि आप इस विषय में रुचि रखते हैं, तो कृपया runtime vs compile time python के लिए गूगल करें।

उस ने कहा, मेरा सुझाव है कि आप एक जावास्क्रिप्ट फ़ंक्शन के साथ मतदान करें जो दूरस्थ आरएसएस फ़ीड को हर 5 सेकंड में मतदान करता है।

यह कुछ इस तरह दिखेगा

setInterval(function(){ 
    //code goes here that will be run every 5 seconds.    
}, 5000);
0
J.G. 7 जुलाई 2020, 23:46
धन्यवाद.. हालाँकि, मुझे एक संदेह है..मैं फ्लास्क के लिए नया हूँ। मैं पूरी पायथन लिपि को Javascript setInterval () के अंदर कैसे रख सकता हूं?
 – 
Sebanti
8 जुलाई 2020, 07:17
आप नहीं करते - इसके बजाय आप अपने जावास्क्रिप्ट स्निपेट को फ्लास्क एंडपॉइंट/रूट पर इंगित करते हैं जहां आप आरएसएस डेटा लाते हैं। देखें developer.mozilla.org/en-US/docs /जानें/जावास्क्रिप्ट/…
 – 
J.G.
8 जुलाई 2020, 07:59
हम्म, मुझे अभी यह लेख मिला है css- ट्रिक्स.com/how-to-fetch-and-parse-rss-feeds-in-javascript आप पूरी तरह से जावास्क्रिप्ट के साथ आरएसएस को ला सकते हैं और पार्स कर सकते हैं, और फिर इसे फ्लास्क / जिंजा टेम्पलेट में प्रस्तुत कर सकते हैं - इतने सारे विकल्प !
 – 
J.G.
8 जुलाई 2020, 08:08

मैंने चीजों का एक गुच्छा करने की कोशिश की लेकिन मैंने जो पाया वह इस समस्या का सबसे आसान समाधान था:

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)

एक साधारण अपडेट_डेटा () ने पूरी समस्या को हल कर दिया, किसी अतिरिक्त मॉड्यूल, जावास्क्रिप्ट, AJAX आदि की आवश्यकता नहीं थी।

0
Sebanti 8 जुलाई 2020, 12:44