从 iTunes API 抓取播客提要 URL 的最佳方法是什么?

问题描述 投票:0回答:1

我正在编写一个脚本,使用搜索和查找端点从 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。任何帮助或指导将不胜感激。谢谢!

python api itunes podcast
1个回答
0
投票

Apple Podcasts 允许节目提供商使用 Podcasts Connect 隐藏他们的 RSS 提要。相关文档位于此支持页面上的“分发”标题下:https://podcasters.apple.com/support/900-availability-rights-and-release-date

© www.soinside.com 2019 - 2024. All rights reserved.