Answers

Is there an API for Bilibili's popular (热门) board?

Short answer

Yes. Bilibili popular board on okdata returns the current 综合热门 list with rank, video title, view count and link, about 50 rows a page, for $0.002 a call. Three snapshots a day for a month cost $0.18. It needs no parameters, no login and no cookie.

A content team that checks Bilibili's popular board every morning learns fast which formats are breaking out this week: a new meme, a game patch, a kind of explainer everyone suddenly copies. Doing that by scrolling the site works until you want it in a spreadsheet, compared week over week, or summarised by a model before the stand-up. Then you want the board as data.

The endpoint

Bilibili popular board takes no parameters. Each row has:

  • rank, the position on the board
  • name, the video title
  • heat, the video's view count at the moment of fetching
  • url, the video link, which contains the BV id

The board is longer than one page. Pass page.next_cursor back as cursor to go further down; each page is a separate call.

Want likes, coins or the uploader for a row? Hand its link to Bilibili video detail for $0.002 each.

Cost

Routine Calls Cost
One snapshot, first page 1 $0.002
Three snapshots a day for 30 days 90 $0.18
Same, three pages deep each time 270 $0.54
Daily snapshot plus detail on the top 10 30 + 300 {{cost:bilibili.trends.list30+bilibili.videos.get300}}

Morning snapshot in Python

import json, os, datetime, requests

API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}

board = requests.get(API + "/v1/bilibili/trends/list", headers=H, timeout=60).json()
rows = board["data"]["items"]

top = []
for row in rows[:10]:
    bv = row["url"].rstrip("/").split("/")[-1]
    d = requests.get(API + "/v1/bilibili/videos/get", headers=H,
                     params={"id": bv, "view": "full"}, timeout=60).json()["data"]["item"]
    top.append({"rank": row["rank"], "title": row["name"], "views": row["heat"],
                "coins": d["ext"]["coins"], "section": d["ext"]["section"], "up": d["author"]["name"]})

stamp = datetime.date.today().isoformat()
json.dump(top, open(f"bili-popular-{stamp}.json", "w", encoding="utf-8"), ensure_ascii=False, indent=1)

What the board does not include

  • heat is plain view count, not Bilibili's internal ranking score. A video can sit above one with more views.
  • Only the current 综合热门 board is available. Section rankings, the weekly 每周必看 list and the 入站必刷 collection are not in the catalog.
  • There is no history endpoint. If you want last month's boards, start saving snapshots now; a file per day, as above, is enough.

Other ways

Open-source projects such as DailyHotApi and RSSHub include a Bilibili popular route you can host yourself for free, and they are a good fit if you already run one of them. For a quick look, the 热门 tab on bilibili.com is the source itself. The trend research guide shows how to put this board next to Weibo and Douyin hot lists.

Updated