Compare commits

..

No commits in common. "ad3a2fb64ed987d4cc5b0593d0be36bc2070c879" and "c9fdf31745f20849805f766494160d16f1318c37" have entirely different histories.

1 changed files with 23 additions and 29 deletions

52
main.py
View File

@ -27,43 +27,36 @@ def add_downloaded_video(video_id):
with open(downloaded_videos_file, 'a') as file: with open(downloaded_videos_file, 'a') as file:
file.write(video_id + '\n') file.write(video_id + '\n')
def get_all_videos(channel_id): def get_latest_video_url(channel_id):
rss_url = f"https://www.youtube.com/feeds/videos.xml?channel_id={channel_id}" rss_url = f"https://www.youtube.com/feeds/videos.xml?channel_id={channel_id}"
feed = feedparser.parse(rss_url) feed = feedparser.parse(rss_url)
return [ latest_entry = feed.entries[0] if feed.entries else None
(entry.link, entry.yt_videoid, entry.published_parsed) return latest_entry.link, latest_entry.yt_videoid if latest_entry else (None, None)
for entry in feed.entries
]
@tasks.loop(minutes=5) @tasks.loop(minutes=5)
async def check_new_videos(): async def check_new_videos():
downloaded_videos = get_downloaded_videos() downloaded_videos = get_downloaded_videos()
max_videos_to_download = 9
for channel_id in YOUTUBE_CHANNEL_IDS: for channel_id in YOUTUBE_CHANNEL_IDS:
print(f"Checking new videos for channel: {channel_id}") print(f"Checking new videos for channel: {channel_id}")
try: try:
videos = get_all_videos(channel_id) video_url, video_id = get_latest_video_url(channel_id)
videos.sort(key=lambda x: x[2]) if video_url and video_id not in downloaded_videos:
undownloaded_videos = [(video_url, video_id) for video_url, video_id, _ in videos if video_id not in downloaded_videos] channel_download_dir = os.path.join(download_dir, channel_id)
videos_to_download = undownloaded_videos[-max_videos_to_download:] os.makedirs(channel_download_dir, exist_ok=True)
for video_url, video_id in videos_to_download:
if video_url and video_id: ydl_opts = {
channel_download_dir = os.path.join(download_dir, channel_id) 'format': 'best',
os.makedirs(channel_download_dir, exist_ok=True) 'outtmpl': f'{channel_download_dir}/%(title)s [%(id)s].%(ext)s',
ydl_opts = { }
'format': 'bestvideo+bestaudio/best',
'outtmpl': f'{channel_download_dir}/%(title)s [%(id)s].%(ext)s', with youtube_dl.YoutubeDL(ydl_opts) as ydl:
'cookiefile': 'cookies.txt', ydl.download([video_url])
} add_downloaded_video(video_id)
with youtube_dl.YoutubeDL(ydl_opts) as ydl: channel = bot.get_channel(int(DISCORD_CHANNEL_ID))
ydl.download([video_url]) await channel.send(f"@everyone New tard video dropped and has been archived: {video_url}")
add_downloaded_video(video_id) print(f"Downloaded and notified for channel: {channel_id}")
channel = bot.get_channel(int(DISCORD_CHANNEL_ID)) else:
await channel.send(f"@everyone New video dropped and has been archived: {video_url}") print(f"No new videos or already downloaded for channel: {channel_id}")
print(f"Downloaded and notified for video {video_id} from channel: {channel_id}")
else:
print(f"Video URL or ID missing for video ID {video_id} from channel: {channel_id}")
except Exception as e: except Exception as e:
print(f"Error processing channel {channel_id}: {e}") print(f"Error processing channel {channel_id}: {e}")
await asyncio.sleep(5) await asyncio.sleep(5)
@ -73,4 +66,5 @@ async def on_ready():
print(f'{bot.user.name} has connected to Discord!') print(f'{bot.user.name} has connected to Discord!')
check_new_videos.start() check_new_videos.start()
bot.run(DISCORD_BOT_TOKEN) bot.run(DISCORD_BOT_TOKEN)