Поток запуска Oauth 2.0 для Youtube Data Api v3 не работает – проблема с кешем? ⇐ Python
-
Anonymous
Поток запуска Oauth 2.0 для Youtube Data Api v3 не работает – проблема с кешем?
Я хочу загрузить видео на YouTube через командную строку (подсказка), используя следующий код на Python и API Google «Youtube Data Api v3».
Когда код выполняется в первый раз, запускается процесс выполнения Oauth 2.0. В приглашении появится экран с запросом разрешения пользователя на автоматическую загрузку видео на канал.
При предоставлении разрешения создается файл с токеном, который позволяет избежать экрана подтверждения при следующих запусках. Я проделал эти действия с аккаунтом Google Cloud и каналом YouTube, и все сработало.
Но теперь это БОЛЬШЕ не работает.
импортировать ОС импортировать JSON импортировать систему время импорта импортировать http.клиент импортировать httplib2 из сборки импорта apiclient.discovery из apiclient.errors импортировать HttpError из apiclient.http импортировать MediaFileUpload из oauth2client.client import flow_from_clientsecrets из oauth2client.file импорта хранилища из oauth2client.tools импортировать argparser, run_flow # Явно указываю базовой транспортной библиотеке HTTP не повторять попытку, поскольку # мы сами обрабатываем логику повторов. httplib2.RETRIES = 1 # Максимальное количество повторных попыток, прежде чем сдаться. MAX_RETRIES = 10 # Всегда повторяйте попытку при возникновении этих исключений. RETRIABLE_EXCEPTIONS = (httplib2.HttpLib2Error, IOError, http.client.NotConnected, http.client.IncompleteRead, http.client.ImproperConnectionState, http.client.CannotSendRequest, http.client.CannotSendHeader, http.client.ResponseNotReady, http.client.BadStatusLine) # Всегда повторять попытку, если apiclient.errors.HttpError с одним из этих статусов # кода поднято. RETRIABLE_STATUS_CODES = [500, 502, 503, 504] CLIENT_SECRETS_FILE ="api-google/client_secret_xxx.apps.googleusercontent.com.json" # Эта область доступа OAuth 2.0 позволяет приложению загружать файлы в # Канал YouTube пользователя, прошедшего проверку подлинности, но не разрешающий другие типы доступа. YOUTUBE_UPLOAD_SCOPE = "https://www.googleapis.com/auth/youtube.upload" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" # Эта переменная определяет сообщение, которое будет отображаться, если CLIENT_SECRETS_FILE # отсутствующий. MISSING_CLIENT_SECRETS_MESSAGE = """ ВНИМАНИЕ: Пожалуйста, настройте OAuth 2.0. Чтобы запустить этот пример, вам необходимо заполнить файл client_secrets.json. найдено по адресу: %s с информацией из API-консоли https://console.cloud.google.com/ Для получения дополнительной информации о формате файла client_secrets.json посетите: https://developers.google.com/api-clien ... nt_secrets """ % os.path.abspath(os.path.join(os.path.dirname(__file__), CLIENT_SECRETS_FILE)) VALID_PRIVACY_STATUSES = («публичный», «частный», «частный») защита get_authenticated_service (аргументы): поток = flow_from_clientsecrets(CLIENT_SECRETS_FILE, область = YOUTUBE_UPLOAD_SCOPE, сообщение = MISSING_CLIENT_SECRETS_MESSAGE) хранилище = Storage("%s-oauth2.json" % sys.argv[0]) учетные данные = хранилище.get() если учетные данные имеют значение «Нет» или «Учетные данные.недействительны»: учетные данные = run_flow (поток, хранилище, аргументы) вернуть сборку (YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, http=credentials.authorize(httplib2.Http())) def инициализировать_upload(youtube, параметры): теги = Нет если параметры.ключевые слова: теги = options.keywords.split(",") тело=дикт( фрагмент = дикт( заголовок=options.title, описание=options.description, теги = теги, CategoryId=options.category, chennelId="xxx" # идентификатор канала YouTube ), статус=дикт( PrivacyStatus=options.privacyStatus, madeForKids=False, selfDeclaredMadeForKids=False ) ) # Вызовите метод videos.insert API, чтобы создать и загрузить видео. Insert_request = youtube.videos().insert( part=",".join(body.keys()), тело = тело, media_body = MediaFileUpload (options.file, chunksize = -1, возобновляемый = True) ) resumable_upload(insert_request) # Этот метод реализует стратегию экспоненциальной задержки для возобновления # не удалось загрузить. защита resumable_upload(insert_request): ответ = Нет ошибка = нет повтор = 0 пока ответ Нет: пытаться: print("Загрузка файла...") статус, ответ = Insert_request.next_chunk() если ответ не «Нет»: если 'id' в ответ: print("Идентификатор видео '%s' был успешно загружен." % response['id']) еще: exit("Загрузка не удалась, получен неожиданный ответ: ответ %s" %) кроме HttpError как e: если e.resp.status в RETRIABLE_STATUS_CODES: error = "Произошла повторяемая ошибка HTTP %d:\n%s" % (e.resp.status,e.content) еще: поднимать кроме (RETRIABLE_EXCEPTIONS, e): error = «Произошла повторяемая ошибка: %s» % e если ошибка не Нет: печать (ошибка) повторить += 1 если повторить попытку > MAX_RETRIES: exit("Больше не пытаюсь повторить попытку.") max_sleep = 2 ** повторить попытку Sleep_секунды = random.random() * max_sleep print("Сон %f секунд, а затем повторная попытка..." % сна_секунд) time.sleep(sleep_секунды) #загрузить видео def carico_short(path_video,folder_video): percorso_cartella = os.path.join(path_video,folder_video) video_youtube = os.path.join(percorso_cartella, "video_youtube.mp4") класс ArgsNamespace: файл = video_youtube заголовок = "заголовок" описание = "содержание" категория = "24" № 24 в интратенименто, первая эра 22 ключевые слова = "шорты, любопытство" PrivacyStatus = "публичный" args = ArgsNamespace() пытаться: YouTube = get_authenticated_service (args) Initialize_upload(youtube, args) кроме HttpError как e: # Definisci e Come un'eccezione HttpError print("Произошла ошибка HTTP %d:\n%s" % (e.resp.status, e.content)) # код для загрузки видео cartella_output = "C:\\Users\\user\\Desktop\\canale youtube\\video-4-dopo-non-publicati" carico_short(cartella_output, "папка") Теперь у меня есть НОВАЯ учетная запись Cloud Console и новый канал YouTube. Но компьютер тот же.
Если я выполняю код, последовательность выполнения не работает: запрос авторизации не отображается в командной строке (он должен появиться в первый раз)
И у меня такая ошибка:
C:\Users\Giovanni\AppData\Local\Programs\Python\Python310\lib\site-packages\oauth2client\_helpers.py:255: UserWarning: невозможно получить доступ к myscript.py-oauth2.json: Нет такой файл или каталог alerts.warn(_MISSING_FILE_MESSAGE.format(имя файла)) Я подозреваю, что у Google/YouTube есть какой-то кеш.
Может для ютуба комп показывает авторизацию старого аккаунта? Это так? как мне его удалить?
Большое спасибо
Я хочу загрузить видео на YouTube через командную строку (подсказка), используя следующий код на Python и API Google «Youtube Data Api v3».
Когда код выполняется в первый раз, запускается процесс выполнения Oauth 2.0. В приглашении появится экран с запросом разрешения пользователя на автоматическую загрузку видео на канал.
При предоставлении разрешения создается файл с токеном, который позволяет избежать экрана подтверждения при следующих запусках. Я проделал эти действия с аккаунтом Google Cloud и каналом YouTube, и все сработало.
Но теперь это БОЛЬШЕ не работает.
импортировать ОС импортировать JSON импортировать систему время импорта импортировать http.клиент импортировать httplib2 из сборки импорта apiclient.discovery из apiclient.errors импортировать HttpError из apiclient.http импортировать MediaFileUpload из oauth2client.client import flow_from_clientsecrets из oauth2client.file импорта хранилища из oauth2client.tools импортировать argparser, run_flow # Явно указываю базовой транспортной библиотеке HTTP не повторять попытку, поскольку # мы сами обрабатываем логику повторов. httplib2.RETRIES = 1 # Максимальное количество повторных попыток, прежде чем сдаться. MAX_RETRIES = 10 # Всегда повторяйте попытку при возникновении этих исключений. RETRIABLE_EXCEPTIONS = (httplib2.HttpLib2Error, IOError, http.client.NotConnected, http.client.IncompleteRead, http.client.ImproperConnectionState, http.client.CannotSendRequest, http.client.CannotSendHeader, http.client.ResponseNotReady, http.client.BadStatusLine) # Всегда повторять попытку, если apiclient.errors.HttpError с одним из этих статусов # кода поднято. RETRIABLE_STATUS_CODES = [500, 502, 503, 504] CLIENT_SECRETS_FILE ="api-google/client_secret_xxx.apps.googleusercontent.com.json" # Эта область доступа OAuth 2.0 позволяет приложению загружать файлы в # Канал YouTube пользователя, прошедшего проверку подлинности, но не разрешающий другие типы доступа. YOUTUBE_UPLOAD_SCOPE = "https://www.googleapis.com/auth/youtube.upload" YOUTUBE_API_SERVICE_NAME = "youtube" YOUTUBE_API_VERSION = "v3" # Эта переменная определяет сообщение, которое будет отображаться, если CLIENT_SECRETS_FILE # отсутствующий. MISSING_CLIENT_SECRETS_MESSAGE = """ ВНИМАНИЕ: Пожалуйста, настройте OAuth 2.0. Чтобы запустить этот пример, вам необходимо заполнить файл client_secrets.json. найдено по адресу: %s с информацией из API-консоли https://console.cloud.google.com/ Для получения дополнительной информации о формате файла client_secrets.json посетите: https://developers.google.com/api-clien ... nt_secrets """ % os.path.abspath(os.path.join(os.path.dirname(__file__), CLIENT_SECRETS_FILE)) VALID_PRIVACY_STATUSES = («публичный», «частный», «частный») защита get_authenticated_service (аргументы): поток = flow_from_clientsecrets(CLIENT_SECRETS_FILE, область = YOUTUBE_UPLOAD_SCOPE, сообщение = MISSING_CLIENT_SECRETS_MESSAGE) хранилище = Storage("%s-oauth2.json" % sys.argv[0]) учетные данные = хранилище.get() если учетные данные имеют значение «Нет» или «Учетные данные.недействительны»: учетные данные = run_flow (поток, хранилище, аргументы) вернуть сборку (YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, http=credentials.authorize(httplib2.Http())) def инициализировать_upload(youtube, параметры): теги = Нет если параметры.ключевые слова: теги = options.keywords.split(",") тело=дикт( фрагмент = дикт( заголовок=options.title, описание=options.description, теги = теги, CategoryId=options.category, chennelId="xxx" # идентификатор канала YouTube ), статус=дикт( PrivacyStatus=options.privacyStatus, madeForKids=False, selfDeclaredMadeForKids=False ) ) # Вызовите метод videos.insert API, чтобы создать и загрузить видео. Insert_request = youtube.videos().insert( part=",".join(body.keys()), тело = тело, media_body = MediaFileUpload (options.file, chunksize = -1, возобновляемый = True) ) resumable_upload(insert_request) # Этот метод реализует стратегию экспоненциальной задержки для возобновления # не удалось загрузить. защита resumable_upload(insert_request): ответ = Нет ошибка = нет повтор = 0 пока ответ Нет: пытаться: print("Загрузка файла...") статус, ответ = Insert_request.next_chunk() если ответ не «Нет»: если 'id' в ответ: print("Идентификатор видео '%s' был успешно загружен." % response['id']) еще: exit("Загрузка не удалась, получен неожиданный ответ: ответ %s" %) кроме HttpError как e: если e.resp.status в RETRIABLE_STATUS_CODES: error = "Произошла повторяемая ошибка HTTP %d:\n%s" % (e.resp.status,e.content) еще: поднимать кроме (RETRIABLE_EXCEPTIONS, e): error = «Произошла повторяемая ошибка: %s» % e если ошибка не Нет: печать (ошибка) повторить += 1 если повторить попытку > MAX_RETRIES: exit("Больше не пытаюсь повторить попытку.") max_sleep = 2 ** повторить попытку Sleep_секунды = random.random() * max_sleep print("Сон %f секунд, а затем повторная попытка..." % сна_секунд) time.sleep(sleep_секунды) #загрузить видео def carico_short(path_video,folder_video): percorso_cartella = os.path.join(path_video,folder_video) video_youtube = os.path.join(percorso_cartella, "video_youtube.mp4") класс ArgsNamespace: файл = video_youtube заголовок = "заголовок" описание = "содержание" категория = "24" № 24 в интратенименто, первая эра 22 ключевые слова = "шорты, любопытство" PrivacyStatus = "публичный" args = ArgsNamespace() пытаться: YouTube = get_authenticated_service (args) Initialize_upload(youtube, args) кроме HttpError как e: # Definisci e Come un'eccezione HttpError print("Произошла ошибка HTTP %d:\n%s" % (e.resp.status, e.content)) # код для загрузки видео cartella_output = "C:\\Users\\user\\Desktop\\canale youtube\\video-4-dopo-non-publicati" carico_short(cartella_output, "папка") Теперь у меня есть НОВАЯ учетная запись Cloud Console и новый канал YouTube. Но компьютер тот же.
Если я выполняю код, последовательность выполнения не работает: запрос авторизации не отображается в командной строке (он должен появиться в первый раз)
И у меня такая ошибка:
C:\Users\Giovanni\AppData\Local\Programs\Python\Python310\lib\site-packages\oauth2client\_helpers.py:255: UserWarning: невозможно получить доступ к myscript.py-oauth2.json: Нет такой файл или каталог alerts.warn(_MISSING_FILE_MESSAGE.format(имя файла)) Я подозреваю, что у Google/YouTube есть какой-то кеш.
Может для ютуба комп показывает авторизацию старого аккаунта? Это так? как мне его удалить?
Большое спасибо