Срок действия токена API YouTube истекает через несколько днейPython

Программы на Python
Ответить
Anonymous
 Срок действия токена API YouTube истекает через несколько дней

Сообщение Anonymous »

Я написал небольшое приложение на Python, которое будет останавливать и создавать трансляцию через API YouTube в определенное время.
Все работает нормально, но токен создается при первом запуске или когда токен не существует, когда приложение срок действия start истекает через несколько дней.
Токен обновления включен, но через несколько дней его не удается обновить.
Мне хотелось бы войти в систему только один раз и просто разрешите обновить токен.
Вот моя функция входа
SCOPES = ["https://www.googleapis.com/auth/youtube"]

...
...

def _authenticate(self, create_new_token: bool = False):
try:
credentials = None
dirname = os.path.dirname(__file__)
token_filename = os.path.join(dirname, self.TOKEN_FILE)
if os.path.exists(token_filename): # do we have a token file allready?
credentials = Credentials.from_authorized_user_file(
token_filename, self.SCOPES
)

if create_new_token:
credentials = None # will force to have to login again and create a new token file

if (
not credentials or not credentials.valid
): # do we have no token or is the token no longer valid?
if (
credentials and credentials.expired and credentials.refresh_token
): # is the token expired?
try:
self.logger.debug("Token expired. Attempting to refresh...")
credentials.refresh(Request())
self.logger.debug("Token successfully refreshed.")
except Exception as e:
self.logger.error(f"Error renewing token: {e}")
raise e
else:
try:
dirname = os.path.dirname(__file__)
filename = os.path.join(
dirname,
self.config[self.CONF_YOUTUBE_SETTINGS][
self.CONF_CREDENTIALS_FILE
],
)
flow = InstalledAppFlow.from_client_secrets_file(
filename,
self.SCOPES,
)
credentials = flow.run_local_server(
port=0, access_type="offline", prompt="consent"
)
except Exception as e:
self.logger.error(
f"Failed to login, maybe the credentials file does not exist? `{filename}` Error was: {e}"
)
raise e
try:
with open(token_filename, "w") as token:
token.write(credentials.to_json())
self.logger.info(
f"Token was succefully writen to token file `{token_filename}`"
)
except Exception as e:
self.logger.error(
f"Failed to login, maybe the credentials file does not exist? `{token_filename}` Error was: {e}"
)
raise e

self.youtube = build("youtube", "v3", credentials=credentials)
return self.youtube
except Exception as e:
self.logger.error(f"Failed to authenticate: {str(e)}")
return None

Вот несколько журналов моего скрипта Python:
Успешное обновление токена
2025-01-13 23:59:02,157 - DEBUG - Token expired. Attempting to refresh...
2025-01-13 23:59:02,157 - DEBUG - Making request: POST https://oauth2.googleapis.com/token
2025-01-13 23:59:02,159 - DEBUG - Starting new HTTPS connection (1): oauth2.googleapis.com:443
2025-01-13 23:59:02,584 - DEBUG - https://oauth2.googleapis.com:443 "POST /token HTTP/1.1" 200 None
2025-01-13 23:59:02,584 - DEBUG - Token successfully refreshed.
2025-01-13 23:59:02,585 - INFO - Token was succefully writen to token file `/home/My/youtube-manager/token.secret`
2025-01-13 23:59:02,587 - INFO - file_cache is only supported with oauth2client

Подробнее здесь: https://stackoverflow.com/questions/793 ... a-few-days
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»