我正在编写一个脚本,使用搜索和查找端点从 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 能够一致地提供所有播客的提要 URL。但是,某些播客无法通过 API 获取此信息。因此,我需要找到一种解决方案,使用替代方法来检索丢失的提要 URL。
实际结果: 对于 iTunes API 响应中缺少提要 URL 的播客,我目前无法获取必要的信息。这个限制阻碍了我有效抓取播客提要 URL 的进度。
鉴于这种情况,我遇到了 getrssfeed.com,即使 iTunes API 不提供提要 URL,该网站也能找到提要 URL。我正在寻找建议、见解或替代方法来克服此问题并可靠地检索丢失的提要 URL。任何帮助或指导将不胜感激。谢谢!
Apple Podcasts 允许节目提供商使用 Podcasts Connect 隐藏他们的 RSS 提要。相关文档位于此支持页面上的“分发”标题下:https://podcasters.apple.com/support/900-availability-rights-and-release-date