想法诞生
- 最近在学习喜马拉雅项目,才看到第一部分的篇p24,由于现代人的心态浮躁,所以想要知道观看视频后,看看自己的进度如何,便开始想写一小段python来查询自己的进度,话说好久没用python了
想法实现
- 先用浏览器打开B站,找到返回全部视频信息的API

- 使用python的requests库发起请求,获取数据
- 数据为文本,因此要用json库加载为json类型即字典类型
- 观察字段信息,获取每个视频的时长
- 对应求和,计算进度
结果展示

代码展示
import requests
import json
def printTime(time, msg):
hour = int(time / 3600)
minute = int(time % 3600 / 60)
second = int(time / 3600 % 60)
print(msg + "{:0>2d}:{:0>2d}:{:0>2d}".format(hour, minute, second))
def printProgress(mcurrentTotalTime, mtotalTime):
print("视频观看进度:{:<.2%}".format(mcurrentTotalTime/mtotalTime))
def getInfo(currentVideo):
toatlTime = 0
currentToatalTime = 0
url1 = "https://api.bilibili.com/x/web-interface/view?aid=69452769&cid=120163469"
url2 = "https://api.bilibili.com/x/web-interface/view?aid=69500751&cid=120416011"
urls = [url1, url2]
for tag, url in enumerate(urls):
r = requests.get(url)
if r.status_code == 200:
data = r.text
jData = json.loads(data)
videoData = jData["data"]["pages"]
for index, item in enumerate(videoData):
if index < currentVideo and tag == 0:
currentToatalTime += int(item["duration"])
toatlTime += int(item["duration"])
printTime(currentToatalTime, "已观看时间:")
printTime(toatlTime, "总时长:")
printTime(toatlTime-currentToatalTime, "剩余时长:")
printProgress(currentToatalTime, toatlTime)
if __name__ == '__main__':
currentVideo = int(input("请输入你观看到的视频数:"))
getInfo(currentVideo)
input("<<<按任意键退出>>>")