yutto-dev / bilili

:beers: bilibili video (including bangumi) and danmaku downloader | B站视频(含番剧)、弹幕下载器
https://bilili.nyakku.moe
GNU General Public License v3.0
1.17k stars 89 forks source link

✨ 增加批量下载,修改了代码里的一些默认设置 #38

Closed xincheng213618 closed 3 years ago

xincheng213618 commented 4 years ago

特性描述

命令行里 -danmaku 默认修改为ass

增加 cookie 保存,输入一次之后自动保存

cookieFile = "cookie.txt" if(args.sess_data == None): if (os.path.exists(cookieFile)): file = open(cookieFile, mode='r') args.sess_data =file.read() file.close() else: file = open(cookieFile, mode='w') file.write(args.sess_data) file.close()

修改了 tools.py 中的 一些正则,让网址的匹配更容易进行

avid

regex_acg_video_av = re.compile(r".*?av(?P\d+)") regex_acg_video_av_short = re.compile(r"https?://b23.tv/av(?P\d+)")

bvid

regex_acg_video_bv = re.compile(r".*?(?P(bv|BV)\w+)") regex_acg_video_bv_short = re.compile(r"https?://b23.tv/(?P(bv|BV)\w+)")

media id

regex_bangumi_md = re.compile(r".*?/bangumi/media/md(?P\d+)")

episode id

regex_bangumi_ep = re.compile(r".*?/bangumi/play/ep(?P\d+)") regex_bangumi_ep_short = re.compile(r"https?://b23.tv/ep(?P\d+)")

season id

regex_bangumi_ss = re.compile(r".*?/bangumi/play/ss(?P\d+)") regex_bangumi_ss_short = re.compile(r"https?://b23.tv/ss(?P\d+)")

space ID

regex_sapce = re.compile(r".*?space.bilibili.com/(?P\d+)")

增加的space 解析api ,同时为了配合该api 对程序进行了一定的修改 为了下载up视频,参考 番剧,增加了space api 和相关解析

@export_api(route="/space/title") def get_space_title(spaceid: str = "") -> str: if not (spaceid): raise Exception(spaceid +"不存在") home_url = ( "https://space.bilibili.com/{spaceid}/".format(spaceid=spaceid) ) res = spider.get(home_url) regex_title = re.compile(r"(.<em>)的个人空间.</em>?") if regex_title.search(res.text): title = regex_title.search(res.text).group(1) else: title = "呐,我也不知道是什么标题呢~" return title

@export_api(route="/space/title") def get_space_video(mid: str = "" ,pn=1) -> str: if not (mid): raise Exception(mid +"不存在") list_api = "https://api.bilibili.com/x/space/arc/search?mid={mid}&pn={pn}&ps=100&jsonp=jsonp" album_list = [] while True: res = spider.get(list_api.format(mid=mid, pn=pn))

循环获取列表

    album_list.extend(
        [
            {
                "id": i + 1,
                "name": re.sub(r"[\/\\\:\*\?\"\<\>\|]", "", item["title"]),
                "avid": str(item["aid"]),
                "bvid": item["bvid"],
            }
            for i,item in enumerate(res.json()["data"]["list"]["vlist"])
        ]
    )
    if len(album_list) < int(res.json()['data']["page"]['count']):
        pn += 1
    else:
        break

return album_list

详情代码修改,请点击这里进行下载

xincheng213618 commented 4 years ago

不能取消对flv 的支持,有些早期视频,dash解析报错

SigureMo commented 4 years ago

方便提交 pr 吗?下载代码的方式我不太方便 review

SigureMo commented 4 years ago

不能取消对flv 的支持,有些早期视频,dash解析报错

对的 flv 暂时还不能删掉,虽然以前某些不支持 dash 的逐渐支持了,但我永远也不知道是否全部支持 dash,等 flv api 被 B 站删除再说吧

xincheng213618 commented 4 years ago

好的,我试试pr 提交

xincheng213618 commented 4 years ago

已提交