我正在尝试获取最近上传的视频。有一个标准的提要,叫做most_recent
。我在抓取提要时没有任何问题,但当我看到里面的条目时,它们都是半年前的,这几乎不是最近的。
这是我正在使用的代码:
import requests
import os.path as P
import sys
from lxml import etree
import datetime
namespaces = {"a": "http://www.w3.org/2005/Atom", "yt": "http://gdata.youtube.com/schemas/2007"}
fmt = "%Y-%m-%dT%H:%M:%S.000Z"
class VideoEntry:
"""Data holder for the video."""
def __init__(self, node):
self.entry_id = node.find("./a:id", namespaces=namespaces).text
published = node.find("./a:published", namespaces=namespaces).text
self.published = datetime.datetime.strptime(published, fmt)
def __str__(self):
return "VideoEntry[id='%s']" % self.entry_id
def paginate(xml):
root = etree.fromstring(xml)
next_page = root.find("./a:link[@rel='next']", namespaces=namespaces)
if next_page == None:
next_link = None
else:
next_link = next_page.get("href")
entries = [VideoEntry(e) for e in root.xpath("/a:feed/a:entry", namespaces=namespaces)]
return entries, next_link
prefix = "https://gdata.youtube.com/feeds/api/standardfeeds/"
standard_feeds = set("top_rated top_favorites most_shared most_popular most_recent most_discussed most_responded recently_featured on_the_web most_viewed".split(" "))
feed_name = sys.argv[1]
assert feed_name in standard_feeds
feed_url = prefix + feed_name
all_video_ids = []
while feed_url is not None:
r = requests.get(feed_url)
if r.status_code != 200:
break
text = r.text.encode("utf-8")
video_ids, feed_url = paginate(text)
all_video_ids += video_ids
all_upload_times = [e.published for e in all_video_ids]
print min(all_upload_times), max(all_upload_times)
正如您所看到的,它打印整个提要的最小和最大时间戳。
misha@misha-antec$ python get_standard_feed.py most_recent
2013-02-02 14:40:02 2013-02-02 14:54:00
misha@misha-antec$ python get_standard_feed.py top_rated
2006-04-06 21:30:53 2013-07-28 22:22:38
我浏览了一下下载的XML,它似乎与输出相匹配。我做错什么了吗?
此外,在一个无关的问题上,我得到的提要都是大约100个条目(我一次分页25个)。这正常吗?我原以为提要会大一点。
关于"最近的提要"-主题:这里有一张票。不幸的是,到目前为止,YouTube-API-Teams没有回应或解决问题。
关于条目数量:这取决于标准提要的类型,但对于最近的提要,通常在100左右。
注意:您可以尝试使用"orderby=published"参数来获取最近的视频,尽管我不知道它们有多"最近"。
https://gdata.youtube.com/feeds/api/videos?orderby=published&prettyprint=True
您可以将此查询与"category"参数或其他参数组合在一起(特定于地区的查询(如标准提要)是不可能的,afaik)。