Получение идентификатора видео YouTube из пользовательского поискового запроса с помощью YouTube API

Здесь очень новичок. В настоящее время я работаю над проектом, в котором пользователь может ввести поисковый запрос и с помощью 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 ‘}}]}

См. также:  Компоновщик платформы бота не может опубликовать в Azure LUIS ошибка

Что я пытаюсь сделать, так это выделить строку 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

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. AFL0831

    Поскольку response является словарем, вы можете получить доступ к его элементам через индексы. response[items] — это список, поэтому лучше всего перебрать все элементы в этом списке. С его помощью мы можем сгенерировать список video_ids следующим образом:

    video_ids = []
    for item in response['items']:
        video_ids.append(item['id']['videoId'])
    
    print(video_ids)
    

    Этот код находится в request.execute ()

    Кстати, словари намного легче понять с помощью PrettyPrinter. Я бы добавил что-то вроде

    import pprint
    pp = pprint.PrettyPrinter(indent=2).pprint
    

    в конце импорта и используйте pp(response) вместо print(response).

    Это работает. Спасибо большое за вашу помощь! person AFL0831; 18.06.2021

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: