首先,类似问题的前一个“答案”使用了弃用的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'')
我在这里寻找的频道名称是“各种艺术家 - 主题”。特别是我有一个巨大的列表,我试图消除任何与该频道名称(这是很多)。但是有很多使用该名称的频道ID。 channelTitle没有给我我想要的东西。
答案 0 :(得分:1)
虽然所有这一切都在继续,但我自己试图解决这个问题,并在这个地方合并了一些其他答案,以找出一个有效的解决方案。它可能不是最好的,所以如果你有一个更好的让我知道。但对于那些偶然发现同样事情的人来说,这可能是有用的:
基本上我在视频ID上做了一个URL“Get”请求并解析了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 ......