提问人:Elliot Moreau 提问时间:6/11/2023 更新时间:6/11/2023 访问量:116
从 iTunes API 抓取 Podcast Feed URL 的最佳方法是什么?
What is the Best Approach for Scraping Podcast Feed URLs from the iTunes API?
问:
我正在编写一个脚本,使用搜索和查找端点从 iTunes API 抓取播客提要 URL。但是,我注意到对于某些播客,API 不提供提要 URL。此限制使我无法获取这些播客的必要信息。
我尝试过什么: 在我的代码中,我使用播客 ID 向 iTunes API 的查找端点发出请求,并检索大多数播客的源 URL。但是,对于某些播客,API 响应中缺少 feedUrl 字段。为了解决这个问题,我想探索其他方法来获取缺少的 Feed URL。
我差点忘了,这是我的代码:
import re
import requests
import json
import sqlite3
import time
def getrss(url):
feed_url = ''
genres = ''
match = re.search(r'id(\d+)', url)
if match:
podID = match.group(1)
else:
match = re.search(r'\d+', url)
if match:
podID = match.group()
else:
print("Aucun identifiant de podcast trouvé")
return
params = {
'id': int(podID),
'entity': 'podcast'
}
response = requests.get('https://itunes.apple.com/lookup', params=params)
data = response.json()
results = data.get('results', [])
if results:
for result in results:
if 'feedUrl' in result and 'genres' in result:
feed_url = result['feedUrl']
genres = result.get('genres', [])
genres = ', '.join(genres)
break
rss_feed = feed_url
return rss_feed, genres
# Connexion à la base de données SQLite
conn = sqlite3.connect("podcasts.db")
cursor = conn.cursor()
# Création d'une table pour stocker les données des podcasts
cursor.execute("CREATE TABLE IF NOT EXISTS podcasts (name TEXT, genres TEXT, rss_feed TEXT, UNIQUE(name, genres))")
url = "https://itunes.apple.com/fr/rss/toppodcasts/limit=200/json"
response = requests.get(url)
data = response.json()
if "feed" in data and "entry" in data["feed"]:
podcasts = data["feed"]["entry"]
for podcast in podcasts:
name = podcast.get("im:name", {}).get("label")
href = podcast.get("id", {}).get("label")
genres = ""
if name and href:
rss_feed, genres = getrss(href)
if rss_feed:
try:
# Insertion des données du podcast dans la base de données, en ignorant les doublons
cursor.execute("INSERT OR IGNORE INTO podcasts (name, genres, rss_feed) VALUES (?, ?, ?)", (name, genres, rss_feed))
if cursor.rowcount > 0:
time.sleep(0.1)
conn.commit()
except sqlite3.IntegrityError:
print("Ignorer l'entrée en double :", name, "-", genres)
else:
print("Ignorer l'entrée en raison d'un flux rss caché :", name, "-", genres)
else:
print("Ignorer l'entrée en raison de champs manquants :", podcast)
print("Podcasts enregistrés dans la base de données.")
else:
print("Aucun podcast trouvé.")
# Fermeture de la connexion à la base de données
conn.close()
期望值: 我希望 iTunes API 能够始终如一地为所有播客提供 Feed URL。但是,某些播客没有通过 API 提供的此信息。因此,我需要找到一种解决方案,使用替代方法检索丢失的 Feed URL。
实际结果: 对于 iTunes API 响应中缺少 Feed URL 的播客,我目前无法获取必要的信息。这个限制阻碍了我有效地抓取播客提要 URL 的进展。
鉴于这种情况,我遇到了 getrssfeed.com,这是一个即使 iTunes API 不提供 URL 也能设法找到 Feed URL 的网站。我正在寻找建议、见解或其他方法来克服这个问题并可靠地检索丢失的 Feed URL。任何帮助或指导将不胜感激。谢谢!
答: 暂无答案
评论