nht_cntt

Upload video fb

Mar 18th, 2019
629
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.64 KB | None | 0 0
  1. import os
  2. import requests
  3. from requests_toolbelt import MultipartEncoder, MultipartEncoderMonitor
  4. import json
  5. import ntpath
  6. import timeit
  7. import threading
  8.  
  9. def put_unpublishedvideo(pathVideo, pageId, accessToken):
  10.     '''
  11.    Upload video cỡ nhỏ ~ 1GBytes.
  12.    '''
  13.    
  14.     video_file_name = pathVideo.split("\\")[-1]
  15.     urlApi = "https://graph-video.facebook.com/v2.3/%s/videos?access_token=%s" % (pageId, accessToken)
  16.     print fb_url
  17.     # multipart chunked uploads
  18.     m = MultipartEncoder(
  19.         fields={
  20.                 'title': video_file_name,
  21.                 'comment':'postvideo',
  22.                 'privacy': "{'value' : 'SELF'}",
  23.                 'source': (video_file_name, open(pathVideo, 'rb'))}
  24.     )
  25.     r = requests.post(urlApi, headers = {'Content-Type': m.content_type}, data = m)
  26.     if r.status_code == 200:
  27.         j_res = r.json()
  28.         facebook_video_id = j_res.get('id')
  29.         print ("facebook_video_id = {0}".format(facebook_video_id))
  30.     else:
  31.         print ("Facebook upload error: {0}".format(r.text))
  32.  
  33. def put_unpublishedvideoUrl(fileName, videoUrl, pageId, accessToken):
  34.     '''
  35.    Upload video qua url trực tuyến. Ví dụ url video trực tiếp từ máy chủ.
  36.    '''
  37.  
  38.     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;]'
  39.     if pageId == '':
  40.         pageId = 'me'
  41.     urlApi = "https://graph-video.facebook.com/v2.3/%s/videos?access_token=%s" % (pageId, accessToken)
  42.  
  43.     payload = {
  44.                 'title': fileName,
  45.                 'privacy': "{'value' : 'SELF'}",
  46.                 'file_url': '%s' % videoUrl
  47.             }
  48.     headers = {
  49.                 'User-Agent' : userAgent
  50.             }
  51.     r = requests.post(urlApi, headers = headers, data = payload)
  52.     if r.status_code == 200:
  53.         j_res = r.json()
  54.         print (j_res)
  55.         #print ("facebook_video_id = {0}".format(facebook_video_id))
  56.     else:
  57.         print ("Facebook upload error: {0}".format(r.text))
  58.  
  59. def put_unpublishedvideoResumeable(filePath, pageId, accessToken):
  60.     '''
  61.    Upload video cỡ lớn. Bằng cách chia nhỏ thành từng đoạn.
  62.    '''
  63.     #Đ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 :)
  64.     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;]'
  65.     if pageId == '':
  66.         pageId = 'me'
  67.     urlApi = "https://graph-video.facebook.com/v2.3/%s/videos?access_token=%s" % (pageId, accessToken)
  68.     fileSize = os.path.getsize(filePath)
  69.     fileName = pathLeaf(filePath)
  70.     chunk = 2000000
  71.     fd = open(filePath, 'rb')
  72.  
  73.     m = MultipartEncoder(
  74.         fields={'upload_phase': 'start',
  75.                 'file_size': "%s" % fileSize
  76.                 }
  77.     )
  78.  
  79.     # Phase start
  80.     headers = {'Content-Type': m.content_type,
  81.                 'User-Agent' : userAgent,
  82.                 'X-FB-Connection-Bandwidth': '10000000'
  83.             }
  84.     r = requests.post(urlApi, headers = headers, data = m)
  85.     if r.status_code != 200:
  86.         print ('{-} Facebook upload error: %s' % r.text)
  87.         return 1
  88.     print ('{+} Facebook upload End phase start')
  89.  
  90.     result = r.json()
  91.     uploadSessionId = result.get('upload_session_id')
  92.     videoId = result.get('video_id')
  93.     startOffset = int(result.get('start_offset'))
  94.     endOffset = int(result.get('end_offset'))
  95.     bytesRead = 0
  96.    
  97.     # Phase transfer
  98.     while True:
  99.         print('startOffset: %s - endOffset: %s' % (startOffset, endOffset))
  100.         if startOffset == endOffset:
  101.             break
  102.         #t = timeit.default_timer()
  103.         fd.seek(startOffset)
  104.         data = fd.read(endOffset - startOffset)
  105.         if data:
  106.             m = MultipartEncoder(
  107.                 fields = {'upload_phase': 'transfer',
  108.                           'start_offset' : '%s' % startOffset,
  109.                           'upload_session_id' : '%s' % uploadSessionId,
  110.                           'video_file_chunk' : (fileName, data)
  111.                         }
  112.             )
  113.             # Nếu lỗi ngoài ý muốn cố thử lại trong 5 lần.
  114.             for i in xrange(0, 5):
  115.                 try:
  116.                     headers = {'Content-Type': m.content_type,
  117.                                 'User-Agent' : userAgent,
  118.                                 'X-FB-Connection-Bandwidth': '10000000'
  119.                             }
  120.                     r = requests.post(urlApi, headers = headers, data = m)
  121.  
  122.                     if r.status_code != 200:
  123.                         print ('{-} Facebook upload error: %s' % r.text)
  124.                         return 2
  125.                     result = r.json()
  126.                     startOffset = int(result.get('start_offset'))
  127.                     endOffset = int(result.get('end_offset'))
  128.                     bytesRead += len(data)
  129.                     break
  130.                 except Exception as error:
  131.                     print ("Try connect to fb error: %s" % error)
  132.  
  133.         print ("chunk size = %d" % (endOffset - startOffset))
  134.         print (" progress %.2f%%" % (1.0*bytesRead/fileSize*100))
  135.     print ('{+} Facebook upload End phase transfer')
  136.  
  137.     # Phase post
  138.     m = MultipartEncoder(
  139.         fields = {'title': fileName,
  140.                 'comment':'postvideo',
  141.                 '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.
  142.                 'upload_phase': 'finish',
  143.                 'upload_session_id' : '%s' % uploadSessionId,
  144.                 }
  145.     )
  146.     headers = {'Content-Type': m.content_type, 'User-Agent' : userAgent}
  147.     r = requests.post(urlApi, headers = headers, data = m)
  148.     if r.status_code != 200:
  149.         print ('{-} Facebook upload error: %s' % r.text)
  150.         return 3
  151.     result = r.json()
  152.     if result.get('success'):
  153.         print ('{+} Facebook upload success')
  154.         return 0
  155.     return 4
  156.  
  157. def pathLeaf(path):
  158.     '''
  159.    Name..........: pathLeaf
  160.    Description...: get file name from full path
  161.    Parameters....: path - string. Full path
  162.    Return values.: string file name
  163.    Author........: None
  164.    '''
  165.     head, tail = ntpath.split(path)
  166.     return tail or ntpath.basename(head)
  167.  
  168. if __name__ == '__main__':
  169.  
  170.     put_unpublishedvideoResumeable(r'c:\video.mp4', pageId, accessToken)
Advertisement
Add Comment
Please, Sign In to add comment