rssguard/resources/scripts/scrapers/youtube-limit-length.py

46 lines
No EOL
1.3 KiB
Python

# Use this as RSS Guard post-processing script.
#
# Example command line usage:
# curl 'PATH_TO_SOME_YOUTUBE_CHANNEL_RSS_FEED' | python 'youtube-limit-length.py'
import sys
import xml.etree.ElementTree as ET
import requests
import json
import isodate
sys.stdin.reconfigure(encoding="utf-8")
input_data = sys.stdin.read()
api_key = "YOUR_API_KEY_HERE"
min_required_length = 90 # In seconds.
youtube_query = (
"https://www.googleapis.com/youtube/v3/videos?part=contentDetails&id=VIDEO-ID&key="
+ api_key
)
ns = {
"atom": "http://www.w3.org/2005/Atom",
"yt": "http://www.youtube.com/xml/schemas/2015",
}
tree = ET.fromstring(input_data)
entries = tree.findall("atom:entry", ns)
for entry in entries:
video_id = entry.find("yt:videoId", ns).text
youtube_query_specific = youtube_query.replace("VIDEO-ID", video_id)
api_response = requests.get(youtube_query_specific).text
response_json = json.loads(api_response)
try:
length_encoded = str(response_json["items"][0]["contentDetails"]["duration"])
except:
continue
length = isodate.parse_duration(length_encoded)
if length.seconds < min_required_length:
tree.remove(entry)
sys.stdout.buffer.write(ET.tostring(tree, encoding='utf-8', method='xml'))