一部分照搬了acupload的代码,但是也重写了很多地方。不代表acupload就不能用了。。。
不用requests真不行。
前面按理说应该都用requests重写,懒了。
https://github.com/cnbeining/bilidirectuploader
代码扔下面。
#!/usr/bin/env python3
#coding:utf-8
# Author: Beining --<ACICFG>
# Purpose: Upload to Bilibili via Bilibili's internal uploading method
# Created: 10/01/2014
#python3 bilidirectuploader.py 0.flv 1.flv
import urllib.request
import sys
import os
import json
import subprocess
import hashlib
import requests
global cookiepath
cookiepath = './bilicookies'
global video_list
video_list = ''
#----------------------------------------------------------------------
def upload(file2Upload):
""""""
#Read Cookie.....Damn it I didn't have my supper!
try:
cookies = open(cookiepath, 'r').readline()
#print(cookies)
except:
print('I am hungry, please give me your Cookie!')
exit()
#Get filename
if not os.path.isfile(file2Upload):
print('Not file!')
pass
if os.path.splitext(file2Upload)[1] != '.flv':
print('ERROR: You can only upload .flv file(s)!')
exit()
filename = os.path.basename(file2Upload)
#print(filename)
#Calculate Filesize, since there s 1.4GiB limit
filesize = os.path.getsize(file2Upload)
print('Size of file: ' + str(filesize))
if filesize > (1.4 * 1024 * 1024 * 1024):
print('File larger than 1.4 GiB, unable to upload!')
exit()
#Fetch UploadUrl
request_full = urllib.request.Request('http://member.bilibili.com/get_vupload_url', headers={ 'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36', 'Cache-Control': 'no-cache', 'Pragma': 'no-cache' , 'Cookie': cookies,})
try:
response = urllib.request.urlopen(request_full)
except Exception:
print('Cannot get response from server!')
pass
data = response.read()
uploadresponse = json.loads(data.decode('utf-8'))
try: # if error happens...
uploadresponse["error_code"]
except KeyError:
pass
except:
print('ERROR: '+ uploadresponse['error_msg'] + ', ' + str(uploadresponse["error_code"]))
sys.exit() # exit the program
#print(uploadresponse['url'])
#make filename
server_ip = str(uploadresponse['server_ip'])
remote_file_name = str(uploadresponse['file_name'])
#start upload
upload_url = str(uploadresponse['url'])
#print(upload_url)
f = open(file2Upload, 'rb')
c = 0
for piece in read_in_chunks(f):
headers_post = {'content-type': 'multipart/form-data', 'Content-Length': '524288', 'Content-Range': 'bytes ' + str(c * 524288) + '-' + str((c + 1) * 524288) + '/' + str(filesize),}
requests.options(upload_url) #dont really know why
files = {'file': piece}
r = requests.post(upload_url, files=files, headers = headers_post)
c = c + 1
print(str(c * 524288) + '/' + str(filesize) + ' done...')
#video_list = video_list + (str('[vupload]' + remote_file_name + ';' + filename + ';' + server_ip + ';[/vupload]\n'))
print('\n'+'Hope everything is fine. '+ '\n' + '[vupload]' + remote_file_name + ';' + filename + ';' + server_ip + ';[/vupload]')
#----------------------------------------------------------------------
def read_in_chunks(file_object, chunk_size=524288):
"""Lazy function (generator) to read a file piece by piece.
Default chunk size: 524288."""
while True:
data = file_object.read(chunk_size)
if not data:
break
yield data
#----------------------------------------------------------------------
if __name__=='__main__':
#Test sys encoding
if not sys.getdefaultencoding() is 'utf-8':
os.system('export LC_ALL="en_US.UTF-8"')
total_file_num = len(sys.argv[1:])
i = 0
if len(sys.argv[1:]) == 0:
print('''
Author: Beining http://www.cnbeining.com https://github.com/cnbeining
Require: requests
Usage:
python3 bilidirectuploader.py [file1] [file2] [file3]...
You can only upload .flv file(s) under 1.4 GiB.
If network is bad, change chunk size at L85, and display at L78.
''')
for name in sys.argv[1:]:
#print(name)
i = i + 1
print('Uploading '+ str(i)+' in '+str(total_file_num)+' files...')
upload(name)
if len(video_list) != 0:
print(video_list)
bishi终于要用借来的证了吗。。
看起来乐视云比他不知高到哪里去了
估计是钱的问题吧。
但是政策风险不得不防。。。。
其实做视频网站是最赔本的买卖 但是B站又不能不做。
A站就不触这个霉头了。。。