Skip to content

Commit 0d45731

Browse files
HarryXin0919claude
andcommitted
Scrub real creator names from all source/config (pre-public)
creators.py: real list -> name-free template; your real 18 move to creators_local.py (git-ignored, auto-overrides). Stopword lists (compare_meme/05_comments) drop hardcoded creator names. Legacy script docstrings/comments (01_/02_/compare_form/fetch_youtube) genericize name examples. Result: zero real creator account names in any tracked file (verified by grep). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent f1bc018 commit 0d45731

9 files changed

Lines changed: 34 additions & 41 deletions

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# 私密凭证 —— 绝不上传(SESSDATA 是登录令牌)
22
config_local.py
33

4+
# 你自己的私有创作者清单(含真实账号/UID)—— 不进 git;仓库只带 creators.py 的示例
5+
creators_local.py
6+
47
# 中间数据(体积大、含抓取内容,demo 用 reports/ 而非 data/)
58
data/
69

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ cp scripts/config_local.example.py scripts/config_local.py
144144

145145
# 2. list the creators you want — any zone, any platform, mix freely
146146
# edit scripts/creators.py (one line per creator: name + platform + id + zone)
147+
# prefer to keep your list private? put it in scripts/creators_local.py — git-ignored, auto-overrides the examples
147148

148149
# 3a. JUST THE DATA — auto-calls the APIs, then hands you a clean table
149150
python scripts/viralens.py

scripts/01_fetch_videos.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
"""
22
viralens · 01_fetch_videos.py
33
抓一个 B 站 UP 主最近 N 个视频的元数据,输出 JSON 给后续分析用。
4-
5-
毕导 UID = 254463269
4+
(这是早期单人脚本;多创作者请用 fetch_multi.py。)
65
76
依赖:
87
python -m pip install bilibili-api-python aiohttp
@@ -14,7 +13,7 @@
1413
3. 把 Value 粘贴到下方 SESSDATA 变量(引号内)
1514
4. 跑: python 01_fetch_videos.py
1615
17-
输出: ../data/bidao_videos.json
16+
输出: ../data/<alias>_videos.json
1817
"""
1918
import asyncio
2019
import json
@@ -25,7 +24,7 @@
2524
from bilibili_api import user, Credential
2625

2726
# ============ 配置 ============
28-
UID = 254463269 # 毕导
27+
UID = 0 # 换成你要抓的 UP 主 UID(00_resolve_creators.py 可按名字查)
2928
NUM_VIDEOS = 30 # 抓最近多少个
3029
try:
3130
from config_local import SESSDATA # ← SESSDATA 统一放 config_local.py(已 gitignore,不进 git)

scripts/02_classify_and_stats.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def classify(v):
3737
return "新发布(数据未成熟)"
3838
if tid != 201:
3939
return "官方活动/其他分区"
40-
if "×" in title: # 【毕导×品牌】格式
40+
if "×" in title: # 【UP主×品牌】格式
4141
return "商单合作"
4242
if "科研大赏" in desc:
4343
return "论文盘点(搞笑科研大赏)"

scripts/05_comments.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,11 @@
3333

3434
PER_VIDEO = 40 # 每视频抓多少条热评
3535

36-
# 停用词:虚词 + 太通用的口水词 + 创作者名(否则"毕导"霸榜)
36+
# 停用词:虚词 + 太通用的口水词(创作者自己的名字建议按需加,否则会在词频里霸榜)
3737
STOP = set((
3838
"的 了 是 我 你 他 她 它 们 在 也 都 和 与 就 不 没 有 这 那 个 啊 吧 吗 呢 嘛 哦 噢 "
3939
"把 被 给 让 对 跟 还 又 很 太 真 哈 一个 这个 那个 什么 怎么 这样 就是 但是 而且 "
40-
"所以 因为 如果 视频 毕导 一下 知道 觉得 感觉 现在 已经 一直 还是 可能 这种 自己 "
40+
"所以 因为 如果 视频 一下 知道 觉得 感觉 现在 已经 一直 还是 可能 这种 自己 "
4141
"然后 其实 真的 这么 那么 一样 时候 看到 出来 起来 一点 不是 没有 这里 那里 我们 "
4242
"你们 他们 一种 不能 可以 这些 那些 的话 一定 应该 已经"
4343
).split())

scripts/compare_form.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@
2525
"访谈": ["专访", "对谈", "采访", "对话"],
2626
"音乐": ["翻唱", "弹唱", "音乐区"],
2727
# 英文(给 YouTube 等英文标题用;只用多字符安全词,绝不误伤中文标题)
28-
# 不包含 "livestream"/"live stream":Entertainment 创作者大量用 "secretly in X livestream"
29-
# 作为招牌挑战(Airrack 等),误伤太大。真正的直播录像偏题标题通常含 "(Live)"/"VOD"/"Live Recording"。
28+
# 不包含 "livestream"/"live stream":有些 Entertainment 创作者把 "secretly in X livestream"
29+
# 当招牌挑战在用,误伤太大。真正的直播录像偏题标题通常含 "(Live)"/"VOD"/"Live Recording"。
3030
"EN": ["sponsored", "#ad", "(ad)", "[ad]", "paid promotion",
3131
"podcast", "q&a", "interview"],
3232
}

scripts/compare_meme.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"把 被 给 让 对 跟 还 又 很 太 真 哈 一个 这个 那个 什么 怎么 这样 就是 但是 而且 "
5151
"所以 因为 如果 视频 一下 知道 觉得 感觉 现在 已经 一直 还是 可能 这种 自己 然后 "
5252
"其实 真的 这么 那么 一样 时候 看到 出来 起来 一点 不是 没有 这里 那里 我们 你们 "
53-
"他们 一种 不能 可以 这些 那些 的话 一定 应该 毕导 妈咪 妈咪说 李永乐 永乐 老师"
53+
"他们 一种 不能 可以 这些 那些 的话 一定 应该"
5454
).split())
5555

5656

scripts/creators.py

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
viralens 创作者配置(可提交,无密钥)。
33
任意平台 / 任意分区 / 任意创作者 —— 想对比谁,就在这里加一行。
44
5+
⚠️ 想保留自己的私有清单又不进 git?把它放进同目录的 creators_local.py(已 gitignore),
6+
在里面定义同样的 CREATORS 列表,它会自动覆盖下面的示例(见文件末尾)。
7+
58
每条字段:
69
name 显示名
710
platform "bilibili"(默认,可省略)或 "youtube"
@@ -13,37 +16,24 @@
1316
uid B站用户 UID(数字)。留 None 由 00_resolve_creators.py 按 name 搜索补全
1417
—— YouTube 专用 ——
1518
channel "@handle"(推荐,稳定可核对) / "UCxxxx频道ID" / 频道名(兜底搜索)
19+
min_duration_sec 可选:过滤短视频(同时发 Shorts 的频道建议 180,排除 Shorts)
1620
"""
21+
# 下面是示例 —— 换成你想分析的创作者。
22+
# B站 UID:用 00_resolve_creators.py 按名字搜;YouTube @handle:在频道主页地址栏能看到。
1723
CREATORS = [
18-
# ———————————————————————— Bilibili ————————————————————————
19-
{"name": "毕导", "platform": "bilibili", "uid": 254463269, "alias": "bidao", "zone": "知识"},
20-
{"name": "妈咪说MommyTalk", "platform": "bilibili", "uid": 223146252, "alias": "mommytalk", "zone": "知识"},
21-
{"name": "李永乐老师官方", "platform": "bilibili", "uid": 9458053, "alias": "liyongle", "zone": "知识"},
22-
{"name": "无穷小亮的科普日常", "platform": "bilibili", "uid": 14804670, "alias": "xiaoliang", "zone": "知识"},
23-
{"name": "影视飓风", "platform": "bilibili", "uid": 946974, "alias": "yingshijufeng", "zone": "知识"},
24-
{"name": "老师好我叫何同学", "platform": "bilibili", "uid": 163637592, "alias": "hetongxue", "zone": "知识"},
25-
{"name": "钟文泽", "platform": "bilibili", "uid": 25910292, "alias": "zhongwenze", "zone": "数码"},
26-
{"name": "极客湾Geekerwan", "platform": "bilibili", "uid": 25876945, "alias": "geekerwan", "zone": "数码"},
27-
{"name": "itsRae", "platform": "bilibili", "uid": 26770204, "alias": "itsrae", "zone": "生活"},
28-
{"name": "房琪kiki", "platform": "bilibili", "uid": 263223596, "alias": "fangqi", "zone": "生活"},
29-
{"name": "美食作家王刚R", "platform": "bilibili", "uid": 290526283, "alias": "wanggang", "zone": "美食"},
30-
{"name": "盗月社食遇记", "platform": "bilibili", "uid": 99157282, "alias": "daoyueshe", "zone": "美食"},
31-
{"name": "老番茄", "platform": "bilibili", "uid": 546195, "alias": "laofanqie", "zone": "游戏"},
32-
{"name": "中国boy超级大猩猩", "platform": "bilibili", "uid": 562197, "alias": "chinaboy", "zone": "游戏"},
33-
34-
# ——————————————— YouTube ———————————————
35-
# 已填 YOUTUBE_API_KEY,跑 fetch_multi.py 会抓下面未注释的。
24+
# —— Bilibili(uid 留 None 会自动按 name 搜索补全)——
25+
{"name": "示例UP主A", "platform": "bilibili", "uid": None, "alias": "demo_b1", "zone": "知识"},
26+
{"name": "示例UP主B", "platform": "bilibili", "uid": None, "alias": "demo_b2", "zone": "游戏"},
3627

37-
# —— Entertainment-YT(挑战 / 真人秀) ——
38-
# min_duration_sec=180:这些频道都同时发 Shorts 和长视频,Shorts 是另一套算法+广告体系,form
39-
# 测试必须排除。设 180s 把"Long Shorts"(1-2 分钟)也排掉,只留 3min+ 真长视频。
40-
{"name": "MrBeast", "platform": "youtube", "channel": "@MrBeast", "alias": "mrbeast", "zone": "Entertainment-YT", "min_duration_sec": 180},
41-
{"name": "Dude Perfect", "platform": "youtube", "channel": "@DudePerfect", "alias": "dudeperfect","zone": "Entertainment-YT", "min_duration_sec": 180},
42-
{"name": "Airrack", "platform": "youtube", "channel": "@airrack", "alias": "airrack", "zone": "Entertainment-YT", "min_duration_sec": 180},
43-
{"name": "Ryan Trahan", "platform": "youtube", "channel": "@ryan", "alias": "ryantrahan", "zone": "Entertainment-YT", "min_duration_sec": 180},
44-
45-
# —— STEM-YT(待启用:第一次跑专注 MrBeast,以后做"中美 STEM 跨平台比较"再放开)——
46-
# {"name": "Veritasium", "platform": "youtube", "channel": "@veritasium", "alias": "veritasium", "zone": "STEM-YT"},
47-
# {"name": "3Blue1Brown", "platform": "youtube", "channel": "@3blue1brown", "alias": "3b1b", "zone": "STEM-YT"},
48-
# {"name": "Mark Rober", "platform": "youtube", "channel": "@MarkRober", "alias": "markrober", "zone": "STEM-YT"},
28+
# —— YouTube(同时发 Shorts 的频道,min_duration_sec=180 排除 Shorts)——
29+
{"name": "Example Channel", "platform": "youtube", "channel": "@example", "alias": "demo_y1",
30+
"zone": "Entertainment-YT", "min_duration_sec": 180},
4931
]
32+
33+
# —— 你自己的私有清单 —— 放在 creators_local.py(已 gitignore,不进 git);存在就用它覆盖上面的示例。
34+
try:
35+
from creators_local import CREATORS as _LOCAL_CREATORS
36+
if _LOCAL_CREATORS:
37+
CREATORS = _LOCAL_CREATORS
38+
except Exception:
39+
pass

scripts/fetch_youtube.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
拿 key:https://console.cloud.google.com → 新建项目 → 启用 "YouTube Data API v3" → 凭据 → API 密钥。
99
1010
creators.py 里 YouTube 创作者写法(platform 必须是 "youtube"):
11-
{"name": "Veritasium", "platform": "youtube", "channel": "@veritasium", "alias": "veritasium", "zone": "STEM-YT"}
11+
{"name": "Example Channel", "platform": "youtube", "channel": "@example", "alias": "demo_yt", "zone": "STEM-YT"}
1212
channel 支持三种写法:
1313
- "@handle" (推荐,稳定、你能直接核对)
1414
- "UCxxxx..." (频道 ID,以 UC 开头)

0 commit comments

Comments
 (0)