Как получить дату в правильном формате для загрузки на YouTube? - PullRequest
0 голосов
/ 12 мая 2018

Я запускаю скрипт Python на OSX для загрузки видеофайла (single_file) на YouTube:

# define recording date as date of file modification
# https://developers.google.com/youtube/v3/docs/videos#resource
recordingDate = datetime.fromtimestamp(os.path.getctime(single_file)).isoformat("T")+"Z"

# define video title as file name
filename, file_extension = os.path.splitext(os.path.basename(single_file)) 

try:
  initialize_upload(youtube, args, single_file, title, recordingDate)
except HttpError, e:
  print "  An HTTP error %d occurred:\n%s" % (e.resp.status, e.content)

в некоторых случаях это работает хорошо, но в других Google возвращает следующую ошибку -

Invalid value for: Invalid format: \"2017-09-22T22:50:55Z\" is malformed at \"Z\"

Как это исправить, чтобы получить правильную дату из файла?YouTube ожидает значение в формате ISO 8601 (YYYY-MM-DDThh: mm: ss.sZ).

1 Ответ

0 голосов
/ 20 мая 2018

Ссылка, которой вы поделились в своем вопросе, четко указывает формат

Значение указывается в формате ISO 8601 (ГГГГ-ММ-ДДЧч: мм: сс.сZ).

Таким образом, ваша проблема в том, что когда информация о микросекундах недоступна, изоформат не будет иметь микросекунды.Ниже код показывает разницу

>>> current_date = datetime.now()
>>> current_date.isoformat()
'2018-05-20T10:18:26.785085'
>>> current_date.replace(microsecond=0).isoformat()
'2018-05-20T10:18:26'

Так что для файлов, с которыми он работает, microsecond будет ненулевым.Таким образом, решение простое

recordingDate = datetime.fromtimestamp(os.path.getctime(single_file)).replace(microsecond=0).isoformat("T")+".0Z"

Это обеспечит усечение микросекунды и установит .0 позже

...