Здесь очень новичок. В настоящее время я работаю над проектом, в котором пользователь может ввести поисковый запрос и с помощью API данных YouTube v3 получить идентификатор видео. Этот идентификатор видео затем используется для создания URL-адреса, который я затем использую для загрузки видео на свой компьютер. Вот что я использую для этого. (Игнорируйте библиотеки, которые я импортировал, я почищу их позже)
from __future__ import print_function
import pathlib
from pathlib import Path
import pytube
import os
import os.path
import googleapiclient
import google_auth_httplib2
import google_auth_oauthlib
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from pytube import YouTube
import os
import google_auth_oauthlib.flow
import googleapiclient.discovery
import googleapiclient.errors
scopes = ["https://www.googleapis.com/auth/youtube.force-ssl"]
userVideoChoice=input("Please enter the title of the song you want to use. ")
def main():
os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
api_service_name = "youtube"
api_version = "v3"
client_secrets_file = ("CLIENT SECRET FILE HERE")
# Get credentials and create an API client
flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
client_secrets_file, scopes)
credentials = flow.run_console()
youtube = googleapiclient.discovery.build(
api_service_name, api_version, credentials=credentials)
request = youtube.search().list(
part="snippet",
maxResults=1,
q=userVideoChoice
)
response = request.execute()
print(response)
if __name__ == "__main__":
main()
Итак, для поискового запроса Youtube Rewind 2018 API Youtube вернет следующее:
{‘kind’: ‘youtube # searchListResponse’, ‘etag’: ‘HEbvpHREbTpRzcvryx2ubH2tnDo’, ‘nextPageToken’: ‘CAEQAA’, ‘regionCode’: ‘US’, ‘pageInfo’: {‘totalResults’: 1000000, ‘: результаты 1}, ‘items’: [{‘kind’: ‘youtube # searchResult’, ‘etag’: ‘VX4FEWIWXekE8cUP4SCMNhGl7Ek’, ‘id’: {‘kind’: ‘youtube # video’, ‘videoId’: ‘ YbJOTdZBX1g ‘},’ snippet ‘: {‘ publishedAt ‘:’ 2018-12-06T17: 58: 29Z ‘,’ channelId ‘:’ UCBR8-60-B28hp2BmDPdntcQ ‘,’ title ‘:’ YouTube Rewind 2018: Все контролируют перемотку | #YouTubeRewind ‘,’ description ‘: YouTube Rewind 2018. Празднование видео, людей, музыки и моментов, которые определили 2018 год. #YouTubeRewind Это не было бы Rewind без создателей: …,’ thumbnail ‘: {‘ default ‘: {‘url’: ‘https://i.ytimg.com/vi/YbJOTdZBX1g/default.jpg’, ‘width’: 120, ‘height’: 90}, ‘medium’: {‘url’: ‘https: //i.ytimg.com/vi/YbJOTdZBX1g/mqdefault.jpg ‘,’ width ‘: 320,’ height ‘: 180},’ high ‘: {‘ url ‘:’ https://i.ytimg.com/ vi / YbJOTdZBX1g / hqdefault.jpg ‘,’ width ‘: 480,’ height ‘: 360}},’ channelTitle ‘:’ YouTube ‘,’ liveBroadcastContent ‘:’ none ‘,’ publishTime ‘:’ 2018-12-06T17: 58: 29Z ‘}}]}
Что я пытаюсь сделать, так это выделить строку videoId, которую я затем использую для сборки URL-адреса. Я чувствую, что есть довольно простое решение, которое я не вижу как начинающий программист. Могу ли я получить помощь в выделении этой части, которая мне нужна для продолжения моего проекта?
Заранее благодарю вас за вашу помощь.
Можете ли вы добавить печать (введите (ответ)) и сказать мне, что он выводит — person AFL0831 schedule 18.06.2021
Он у меня уже внизу, строка 53. print (response). — person AFL0831 schedule 18.06.2021
Нет, мне нужен тип ответа, а не его содержание. Другими словами, вывод print(type(response))
, а не только print(response)
— person AFL0831 schedule 18.06.2021
В дополнение к обычному выводу я также вижу в конце ‹class dict
›. Извините за путаницу. — person AFL0831 schedule 18.06.2021
Поскольку
response
является словарем, вы можете получить доступ к его элементам через индексы.response[items]
— это список, поэтому лучше всего перебрать все элементы в этом списке. С его помощью мы можем сгенерировать список video_ids следующим образом:Этот код находится в request.execute ()
Кстати, словари намного легче понять с помощью PrettyPrinter. Я бы добавил что-то вроде
в конце импорта и используйте
pp(response)
вместоprint(response)
.Это работает. Спасибо большое за вашу помощь! — person AFL0831; 18.06.2021