【发布时间】:2020-07-06 17:15:25
【问题描述】:
我正在尝试通过 twitter API 从我的网站上传视频。我为大文件抓取了他们的 github 库代码的异步上传文件。我正在分块上传数据。这是代码: (请注意,我使用静态文件大小和块进行测试肯定会感谢动态方法建议)
MEDIA_ENDPOINT_URL = 'https://upload.twitter.com/1.1/media/upload.json'
POST_TWEET_URL = 'https://api.twitter.com/1.1/statuses/update.json'
CONSUMER_KEY = 'xxx'
CONSUMER_SECRET = 'xxx'
ACCESS_TOKEN = 'xxx-xxx'
ACCESS_TOKEN_SECRET = 'xxx'
VIDEO_FILENAME = request.FILES['video']
VIDEO_SIZE = 59467
oauth = OAuth1(CONSUMER_KEY,
client_secret=CONSUMER_SECRET,
resource_owner_key=ACCESS_TOKEN,
resource_owner_secret=ACCESS_TOKEN_SECRET)
request_data = {
'command': 'INIT',
'media_type': 'video/mp4',
'total_bytes': VIDEO_SIZE,
'media_category': 'tweet_video'
}
req = requests.post(url=MEDIA_ENDPOINT_URL, data=request_data, auth=oauth)
print req
media_id = req.json()['media_id']
print('Media ID: %s' % str(media_id))
segment_id = 0
bytes_sent = 0
vid_file = VIDEO_FILENAME
while bytes_sent < VIDEO_SIZE:
chunk = vid_file.read(59467)
print('APPEND')
request_data = {
'command': 'APPEND',
'media_id': media_id,
'segment_index': segment_id
}
files = {
'media': chunk
}
req = requests.post(url=MEDIA_ENDPOINT_URL, data=request_data, files=files, auth=oauth)
if req.status_code < 200 or req.status_code > 299:
print(req.status_code)
print(req.text)
segment_id = segment_id + 1
bytes_sent = vid_file.tell()
print('%s of %s bytes uploaded' % (str(bytes_sent), str(VIDEO_SIZE)))
print('Upload chunks complete.')
request_data = {
'command': 'FINALIZE',
'media_id': media_id,
'media_category': 'tweet_video'
}
req = requests.post(url=MEDIA_ENDPOINT_URL, data=request_data, auth=oauth)
print(req.json())
processing_info = req.json().get('processing_info', None)
print(req.status_code)
time.sleep(5)
request_data = {
'status': 'I just uploaded a video with the @TwitterAPI.',
'media_ids': req.json()['media_id_string'],
'media_category': 'tweet_video'
}
req = requests.post(url=POST_TWEET_URL, data=request_data, auth=oauth)
print(req.json())
context = {
'r': req
}
return render_to_response('dashboard/manage_content/display.html', context)
我遇到以下错误:
{"errors":[{"code":324,"message":"无效视频"}]} 我正在上传 1.6 mb 大小的 mp4 文件。如果您需要更多信息,请告诉我。
【问题讨论】:
-
你说 mp4 是 1.6MB - 但你的代码说它是 59467 字节。如果您使用正确的尺寸,它会起作用吗?另外,你可以直接在推特网站上上传视频吗?如果不是,则可能是文件已损坏。
-
当我尝试使用正确的大小时,APPEND 命令在 59467 字节后抛出错误。所以我想也许我可以在尺寸上妥协一点来测试它。是的,我尝试在 Twitter 上上传相同的视频,效果很好。
-
您对视频大小处理的怀疑是正确的。发布了对我有用的内容,感谢您的时间。
标签: django twitter twitter-oauth