如何以正确的YouTube上传格式获取日期?

时间:2018-05-12 08:47:22

标签: python datetime youtube-api datetime-format

我在OSX上运行python脚本将视频文件(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 :(得分:4)

您在问题中分享的链接清楚地说明了格式

  

该值在ISO 8601(YYYY-MM-DDThh:mm:ss.sZ)格式中指定。

所以你的问题是,当微秒信息不可用时,isoformat将不会有微秒。下面的代码显示了差异

>>> 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