初版自动投稿工具 to Bilibili

直播缓存完就直接上传了,正在测试中,感谢bilibili.py原代码作者:comwrg
This commit is contained in:
Jerry Yan 2019-01-25 14:26:07 +08:00
parent 33739d21b3
commit d290c89345
2 changed files with 150 additions and 8 deletions

View File

@ -7,6 +7,8 @@
import os import os
import re import re
from datetime import datetime
import rsa import rsa
import math import math
import base64 import base64
@ -253,7 +255,7 @@ class Bilibili:
), ),
chunks_data, chunks_data,
) )
print('{}/{}'.format(chunks_index, chunks_num), r.text) print('{} : {}/{}'.format(datetime.strftime(datetime.now(), "%y%m%d %H%M") ,chunks_index, chunks_num), r.text)
# NOT DELETE! Refer to https://github.com/comwrg/bilibiliupload/issues/15#issuecomment-424379769 # NOT DELETE! Refer to https://github.com/comwrg/bilibiliupload/issues/15#issuecomment-424379769
self.session.post('https:{endpoint}/{upos_uri}?' self.session.post('https:{endpoint}/{upos_uri}?'
@ -355,10 +357,3 @@ class Bilibili:
# {"code":0,"data":{"url":"http://i0.hdslb.com/bfs/archive/67db4a6eae398c309244e74f6e85ae8d813bd7c9.jpg"},"message":"","ttl":1} # {"code":0,"data":{"url":"http://i0.hdslb.com/bfs/archive/67db4a6eae398c309244e74f6e85ae8d813bd7c9.jpg"},"message":"","ttl":1}
return r.json()['data']['url'] return r.json()['data']['url']
def main():
pass
if __name__ == '__main__':
main()

147
liveDownloader.py Normal file
View File

@ -0,0 +1,147 @@
import sys
import time
from datetime import datetime
import dotenv
import m3u8
import queue
import threading
from api import XiGuaLiveApi
from bilibili import *
q = queue.Queue()
base_uri = ""
isUpload = False
OutFileName = []
env = dotenv.main.DotEnv(".env")
class downloader(XiGuaLiveApi):
files = []
playlist: str = None
def updRoomInfo(self):
super(downloader, self).updRoomInfo()
self.updPlayList()
def updPlayList(self):
if "playInfo" not in self._rawRoomInfo or "Main" not in self._rawRoomInfo["playInfo"]:
if self.playlist is None:
self.apiChangedError("无法获取直播链接")
self.playlist = False
else:
self.playlist = self._rawRoomInfo["playInfo"]["Main"]["1"]["Url"]["HlsUrl"]
def onLike(self, user):
pass
def onAd(self, i):
pass
def onChat(self, chat):
pass
def onEnter(self, msg):
pass
def onJoin(self, user):
pass
def onLeave(self, json):
self.updRoomInfo()
def onMessage(self, msg):
pass
def onPresent(self, gift):
pass
def onPresentEnd(self, gift):
pass
def onSubscribe(self, user):
pass
def preDownload(self):
global base_uri
if self.playlist:
try:
p = m3u8.load(self.playlist)
except:
self.updRoomInfo()
return
base_uri = p.base_uri
for i in p.files:
if i not in self.files:
self.files.append(i)
q.put(i)
self.genNewName()
def genNewName(self):
if len(self.files) > 1500:
q.put(False)
self.files.clear()
return True
else:
return False
def download(path=datetime.strftime(datetime.now(),"%Y%m%d_%H%M.ts")):
print("Download Daemon Starting")
OutFileName.append(path)
while True:
i = q.get()
if isinstance(i, bool):
print("Recive Command {}".format(i))
break
_p = requests.get("{}{}".format(base_uri,i))
print("Download : {}".format(i))
f = open(path, "ab")
f.write(_p.content)
f.close()
if __name__ == "__main__":
room = 97621754276 # 永恒
# room = 75366565294
# room = 83940182312 #Dae
# room = 5947850784 #⑦
# room = 58649240617 #戏
if len(sys.argv) > 1:
try:
room = int(sys.argv[1])
except ValueError:
pass
print("西瓜直播录播助手 by JerryYan")
api = downloader(room)
print("进入", api.roomLiver, "的直播间")
if not api.isValidRoom:
input("房间不存在")
sys.exit()
print("=" * 30)
_preT = datetime.strftime(datetime.now(), "%Y%m%d_%H.ts")
t = threading.Thread(target=download, args=(_preT,))
t.setDaemon(True)
t.start()
while True:
if api.isLive:
if not t.is_alive():
_preT = datetime.strftime(datetime.now(), "%Y%m%d_%H.ts")
t = threading.Thread(target=download, args=(_preT,))
t.setDaemon(True)
t.start()
api.preDownload()
isUpload = True
time.sleep(3)
else:
q.put(False)
if isUpload:
print("自动投稿中,请稍后")
b = Bilibili()
b.login(env.get("b_u"), env.get("b_p"))
u = threading.Thread(target=b.upload,args=([VideoPart(n) for n in OutFileName],
"【永恒de草薙直播的录播】三国战记 live at {} 自动投递实际测试".format(OutFileName[0]),
17, ["永恒de草薙", "三国", "三国战记", "自动投递", "直播", "录播"],
"自动投递实际测试\n原主播永恒de草薙\n直播时间晚上6点多到白天6点左右",),
kwargs={"source": "https://live.ixigua.com/userlive/97621754276", "no_reprint": 0})
u.setDaemon(True)
u.start()
u.join()
# reset all for long time running
OutFileName = []
api.files = []
isUpload = False
else:
pass
# print("主播未开播等待1分钟后重试")
time.sleep(60)
api.updRoomInfo()