0

我正在尝试获取最近上传的视频。有一个标准的提要- 它被称为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 个)。这是正常的吗?我预计提要会更大一些。

4

1 回答 1

1

关于“Most-Recent-Feed”-主题:这里有一张票。不幸的是,到目前为止,YouTube-API-Teams 没有回应或解决问题。

关于条目的数量:这取决于标准提要的类型,但对于最近的提要,它通常在 100 左右。

注意:您可以尝试使用“orderby=published”参数来获取最近的视频,尽管我不知道它们有多“最近”。

https://gdata.youtube.com/feeds/api/videos?orderby=published&prettyprint=True

您可以将此查询与“类别”参数或其他参数结合使用(特定于区域的查询 - 如标准提要 - 是不可能的,afaik)。

于 2013-08-21T13:01:40.213 回答