עזרה בקוד פייתון
-
אני כותב סקריפט שמוריד פודקאסטים מפיד RSS
הוספתי בסקריפט דילוג על פרקים שכבר הורדו בעבר - כל קישור לפרק נכתב לקובץ לוג ואז לפני כל הורדה של פרק יש בדיקה אם הקישור אליו מופיע בלוג
משום מה החלק הזה לא עובד לי והסקריפט מוריד בכל אופן (הוא אפילו לא נכנס ל if)
הקטע הלא תקין הוא בשורות 36 - 41#imports required libraries import feedparser import requests import os #get user inputs pod_link = input("rss feed link : ") max_loop = input("The maximum number of podcasts to download : ") #parsing the rss file print("parsing the rss file...") feed = feedparser.parse(pod_link) #validating the feed if feed['feed'] == {}: raise RuntimeError("Something bad happened") #initialize the counter loop = 0 #preparing the log file pod_list = open("pod_list.lst", 'w') pod_list.write("list of all podcasts links" + '\n') #starts working for entry in feed.entries: if loop == int(max_loop): break else: print("downloading podcast number " + str(loop+1)) link = entry.links[0] pod_title = entry.title link1 = link["href"] #check the log for existing podcasts with open("pod_list.lst", 'r') as f: content = f.read() if link1 in content: print("skipping podcast number " + str(loop+1)) continue else: pod_list = open("pod_list.lst", 'a') pod_list.write(link1 + '\n') podcast = requests.get(link1) open(pod_title + ".mp3", 'wb').write(podcast.content) loop += 1 #closing the log file pod_list.close()
-
@אף-אחד-3 כתב בעזרה בקוד פייתון:
pod_list = open("pod_list.lst", 'w')
אתה פותח את הקובץ כל ריצה במצב כתיבה וכותב לתוכו, זה אומר שהוא נדרס בכל ריצה מחדש.
סתם הצעה לשיפור, אין עניין לפתוח את הקובץ מחדש בכל פרק, תקרא את כל המידע בהתחלה.
תכניס את כל הלולאת פור לתוך הבלוק של הפתיחת קובץ -
@aaron היו בקוד הזה כמה וכמה בעיות, זה הקוד הסופי
#imports required libraries import feedparser import requests import os #get user inputs pod_link = input("rss feed link : ") max_loop = input("The maximum number of podcasts to download : ") #parsing the rss file print("parsing the rss file...") feed = feedparser.parse(pod_link) #validating the feed if feed['feed'] == {}: raise RuntimeError("Something bad happened") #initialize the counter loop = 0 #preparing the log file if not os.path.exists("pod_list.lst"): f = open("pod_list.lst", 'w') f.close() pod_list = open("pod_list.lst", 'r+') pod_list.write("new session" + '\n') content = pod_list.read() current_pods = [] #starts working for entry in feed.entries: link = entry.links[0] link1 = link["href"] pod_title = entry.title if not loop == int(max_loop): if link1 in content: print("skipping podcast number" + str(loop+1)) loop += 1 continue else: print("downloading podcast number " + str(loop+1)) podcast = requests.get(link1) open(pod_title + ".mp3", 'wb').write(podcast.content) current_pods += link1+'\n' else: break loop += 1 with open("pod_list.lst", 'a') as f: for line in current_pods: f.write(f"{line}")