Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import requests
- from requests_toolbelt import MultipartEncoder, MultipartEncoderMonitor
- import json
- import ntpath
- import timeit
- import threading
- def put_unpublishedvideo(pathVideo, pageId, accessToken):
- '''
- Upload video cỡ nhỏ ~ 1GBytes.
- '''
- video_file_name = pathVideo.split("\\")[-1]
- urlApi = "https://graph-video.facebook.com/v2.3/%s/videos?access_token=%s" % (pageId, accessToken)
- print fb_url
- # multipart chunked uploads
- m = MultipartEncoder(
- fields={
- 'title': video_file_name,
- 'comment':'postvideo',
- 'privacy': "{'value' : 'SELF'}",
- 'source': (video_file_name, open(pathVideo, 'rb'))}
- )
- r = requests.post(urlApi, headers = {'Content-Type': m.content_type}, data = m)
- if r.status_code == 200:
- j_res = r.json()
- facebook_video_id = j_res.get('id')
- print ("facebook_video_id = {0}".format(facebook_video_id))
- else:
- print ("Facebook upload error: {0}".format(r.text))
- def put_unpublishedvideoUrl(fileName, videoUrl, pageId, accessToken):
- '''
- Upload video qua url trực tuyến. Ví dụ url video trực tiếp từ máy chủ.
- '''
- userAgent = '[FBAN/FB4A;FBAV/163.0.0.43.91;FBBV/96845999;FBDM/{density=1.5,width=720,height=1280};FBLC/vi_VN;FBRV/97737839;FBCR/Viettel Telecom;FBMF/samsung;FBBD/samsung;FBPN/com.facebook.katana;FBDV/SM-N9005;FBSV/4.4.2;FBOP/1;FBCA/x86:armeabi-v7a;]'
- if pageId == '':
- pageId = 'me'
- urlApi = "https://graph-video.facebook.com/v2.3/%s/videos?access_token=%s" % (pageId, accessToken)
- payload = {
- 'title': fileName,
- 'privacy': "{'value' : 'SELF'}",
- 'file_url': '%s' % videoUrl
- }
- headers = {
- 'User-Agent' : userAgent
- }
- r = requests.post(urlApi, headers = headers, data = payload)
- if r.status_code == 200:
- j_res = r.json()
- print (j_res)
- #print ("facebook_video_id = {0}".format(facebook_video_id))
- else:
- print ("Facebook upload error: {0}".format(r.text))
- def put_unpublishedvideoResumeable(filePath, pageId, accessToken):
- '''
- Upload video cỡ lớn. Bằng cách chia nhỏ thành từng đoạn.
- '''
- #Đoạn userAgent dưới đây không nên đổi. Nếu đổi thì tốc độ tải lên sẽ chậm. Thử đi :)
- userAgent = '[FBAN/FB4A;FBAV/163.0.0.43.91;FBBV/96845999;FBDM/{density=1.5,width=720,height=1280};FBLC/vi_VN;FBRV/97737839;FBCR/Viettel Telecom;FBMF/samsung;FBBD/samsung;FBPN/com.facebook.katana;FBDV/SM-N9005;FBSV/4.4.2;FBOP/1;FBCA/x86:armeabi-v7a;]'
- if pageId == '':
- pageId = 'me'
- urlApi = "https://graph-video.facebook.com/v2.3/%s/videos?access_token=%s" % (pageId, accessToken)
- fileSize = os.path.getsize(filePath)
- fileName = pathLeaf(filePath)
- chunk = 2000000
- fd = open(filePath, 'rb')
- m = MultipartEncoder(
- fields={'upload_phase': 'start',
- 'file_size': "%s" % fileSize
- }
- )
- # Phase start
- headers = {'Content-Type': m.content_type,
- 'User-Agent' : userAgent,
- 'X-FB-Connection-Bandwidth': '10000000'
- }
- r = requests.post(urlApi, headers = headers, data = m)
- if r.status_code != 200:
- print ('{-} Facebook upload error: %s' % r.text)
- return 1
- print ('{+} Facebook upload End phase start')
- result = r.json()
- uploadSessionId = result.get('upload_session_id')
- videoId = result.get('video_id')
- startOffset = int(result.get('start_offset'))
- endOffset = int(result.get('end_offset'))
- bytesRead = 0
- # Phase transfer
- while True:
- print('startOffset: %s - endOffset: %s' % (startOffset, endOffset))
- if startOffset == endOffset:
- break
- #t = timeit.default_timer()
- fd.seek(startOffset)
- data = fd.read(endOffset - startOffset)
- if data:
- m = MultipartEncoder(
- fields = {'upload_phase': 'transfer',
- 'start_offset' : '%s' % startOffset,
- 'upload_session_id' : '%s' % uploadSessionId,
- 'video_file_chunk' : (fileName, data)
- }
- )
- # Nếu lỗi ngoài ý muốn cố thử lại trong 5 lần.
- for i in xrange(0, 5):
- try:
- headers = {'Content-Type': m.content_type,
- 'User-Agent' : userAgent,
- 'X-FB-Connection-Bandwidth': '10000000'
- }
- r = requests.post(urlApi, headers = headers, data = m)
- if r.status_code != 200:
- print ('{-} Facebook upload error: %s' % r.text)
- return 2
- result = r.json()
- startOffset = int(result.get('start_offset'))
- endOffset = int(result.get('end_offset'))
- bytesRead += len(data)
- break
- except Exception as error:
- print ("Try connect to fb error: %s" % error)
- print ("chunk size = %d" % (endOffset - startOffset))
- print (" progress %.2f%%" % (1.0*bytesRead/fileSize*100))
- print ('{+} Facebook upload End phase transfer')
- # Phase post
- m = MultipartEncoder(
- fields = {'title': fileName,
- 'comment':'postvideo',
- 'privacy': "{'value' : 'SELF'}", # Xóa dòng này khi muốn để video công khai hoặc thay Value: EVERYONE, ALL_FRIENDS, FRIENDS_OF_FRIENDS, SELF, CUSTOM.
- 'upload_phase': 'finish',
- 'upload_session_id' : '%s' % uploadSessionId,
- }
- )
- headers = {'Content-Type': m.content_type, 'User-Agent' : userAgent}
- r = requests.post(urlApi, headers = headers, data = m)
- if r.status_code != 200:
- print ('{-} Facebook upload error: %s' % r.text)
- return 3
- result = r.json()
- if result.get('success'):
- print ('{+} Facebook upload success')
- return 0
- return 4
- def pathLeaf(path):
- '''
- Name..........: pathLeaf
- Description...: get file name from full path
- Parameters....: path - string. Full path
- Return values.: string file name
- Author........: None
- '''
- head, tail = ntpath.split(path)
- return tail or ntpath.basename(head)
- if __name__ == '__main__':
- put_unpublishedvideoResumeable(r'c:\video.mp4', pageId, accessToken)
Advertisement
Add Comment
Please, Sign In to add comment