【问题标题】:How to get Channel Name for Video, youtubeAPI, Python如何获取视频、youtubeAPI、Python 的频道名称
【发布时间】:2015-02-02 23:52:03
【问题描述】:

首先,之前对类似问题的“答案”使用了已弃用的 Youtube Api V2。此外,没有一个答案显示您如何使用 Python 来做到这一点。

我的代码是:

def youtube_search(item):


  youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,
    developerKey=DEVELOPER_KEY)

  # Call the search.list method to retrieve results matching the specified
  # query term.
  search_response = youtube.search().list(
    q=item,
    part="id,snippet",
    maxResults=6
  ).execute()


  videoCount = 0;
  title = ""
  channelId = ""
  channelName = ""
  # Add each result to the appropriate list, and then display the lists of
  # matching videos, channels, and playlists.
  for search_result in search_response.get("items", []):
    if search_result["id"]["kind"] == "youtube#video":
      videoCount += 1
      if videoCount == 1:
         snippet = search_result["snippet"]
         title = snippet["title"]
         channelId = snippet["channelId"]
         channelName = snippet["channelTitle"] 

#  print "Videos:\n", "\n".join(videos), "\n"
  print( item, videoCount, title, channelId, channelName )

所以基本上从第一个返回的视频开始,我想知道视频的标题和频道的名称。这是我特别要找的名字。对于这个搜索字符串:

r'''"Joe Keegan" "Pick Myself Up"'''

我的结果是:

('"Joe Keegan" "Pick Myself Up"', 1, u'Pick Myself Up', u'UCThUpINg-JADDOHdkz_4-jw', u'')

我在这里寻找的频道名称是“Various Artists - Topic”。特别是我有一个巨大的列表,并试图消除具有该频道名称的任何内容(很多)。然而,有很多频道 ID 使用该名称。 channelTitle 没有给我我想要的东西。

【问题讨论】:

    标签: python youtube-api


    【解决方案1】:

    虽然这一切都在发生,但我试图自己解决它,并在这个地方合并了一些其他答案,以提出一个可行的解决方案。它可能不是最好的,所以如果你有更好的请告诉我。但它可能对其他偶然尝试做同样事情的人有用:

    基本上我对视频 ID 做了一个 URL“获取”请求并解析了 JSON 响应。哦,Python 有时是一种很容易使用的语言……

      for search_result in search_response.get("items", []):
        if search_result["id"]["kind"] == "youtube#video":
          videoCount += 1
          if videoCount == 1:
             snippet = search_result["snippet"]
             title = snippet["title"]
             videoId = search_result["id"]["videoId"] 
             channelId = snippet["channelId"]
    
      urlBase = "https://gdata.youtube.com/feeds/api/videos/"
      if videoCount > 0:
         url = urlBase + videoId + "?v=2&alt=json"
         r = requests.get(url)
         metadata = r.json()
         channelName = metadata["entry"]["author"][0]["name"]["$t"]
    
    print( item, videoCount, title, channelId, channelName )
    

    当然我真的不需要 channelId...

    【讨论】:

    • 目前对我有用。我发现 v3 的文档很差。如果这正是您想要做的事情,那么一些代码示例很好,但是当您想做一些稍微不同的事情时,它不会告诉您从哪里获取数据。 http 请求/JSON 响应的好处在于,只需打印您获得的 JSON 并查看它是否包含您要查找的内容,这很容易。因此,一旦您知道要提出什么请求,您就可以找到您想要的。 youtube 遇到了一个历史问题并且没有解决,因为它没有适当的元数据标签。
    • 当您将视频上传到 youtube 时,如果您在选择音乐视频类别时填写了艺术家姓名、标题的适当字段,并且理想情况下您还可以指出它是否是动态视频或音频,但可以自动检测到。
    • 我同意 - 我采用不同的方式从用户的所有视频中提取信息并获取元数据,尤其是观看次数:但我仍然使用您的代码作为使用 v2 的指南。所以你的业力!
    • 我使用 opencv 来尝试检测它是视频还是音频,虽然并不完美,但它做得很合理。
    猜你喜欢
    • 2014-08-16
    • 2022-07-16
    • 2013-07-22
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 2020-06-27
    相关资源
    最近更新 更多