B站評論區抽獎[python]

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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章