Bili-Luckdog
B站評論區抽獎工具
by - ALKEYSHENG 2020.5.21
第三方庫requests
Blog: i.2017.work
Github項目: Bili-Luckydog
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
'''
@File: Bili-Luckydog.py
@Description: BiliBili評論區抽獎 (僅評論,回覆無效)
@Time: 2020/05/21 11:47:55
@Author: 盛亞琪
@Blog: i.2017.work
'''
import requests
import random
import time
import datetime
# setting 保留""
# ----------------------------------------------------------
bvid = "" # 視頻BV號 如: "BV1NZ4y147X6"
num = "" # 抽獎個數 如: "1"
# ----------------------------------------------------------
# 將B站BV號轉換爲AV號
def getAid(bvid):
root = requests.get(
"https://api.bilibili.com/x/web-interface/view?bvid={}".format(bvid)).json()
aid = root["data"]["aid"]
return aid
# 獲取某一頁JSON
def getJson(aid, page=1):
url = "http://api.bilibili.com/x/v2/reply?jsonp=jsonp&;pn={}&type=1&oid={}"
re = requests.get(url.format(page, aid))
root = re.json()
return root
# 提取JSON中名單添加到列表
def addLi(root, li):
members = root["data"]["replies"]
for member in members:
uname = member["member"]["uname"]
message = member["content"]["message"]
li.append([uname, message])
time.sleep(0.01)
print("{:>3d}: {}".format(len(li), uname))
# 隨機數抽獎
def getDog(n, li):
lucky_indexs = set()
while len(lucky_indexs) < n:
randomNum = random.randint(0, len(li)-1)
lucky_indexs.add(randomNum)
return lucky_indexs
def main(bvid, num):
if bvid == "":
bvid = input("視頻BV號 如: BV1NZ4y147X6\n")
if num == "":
num = input("抽獎個數 如: 1\n")
aid = getAid(bvid)
n = int(num)
li = []
print("members:\n-----------------------------")
page_1 = getJson(aid)
pages = (page_1["data"]["page"]["count"]) // (
page_1["data"]["page"]["size"]) + 1
# print(pages)
for i in range(1, pages+1):
root = getJson(aid, i)
addLi(root, li)
print("-----------------------------")
time.sleep(1)
lucky_indexs = list(getDog(n, li))
for i in range(n):
print("\n", " Luckydog:", li[lucky_indexs[i]][0],
"\n comment:", li[lucky_indexs[i]][1])
time.sleep(1)
print("\nDate-Time:", datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
if __name__ == "__main__":
main(bvid, num)