redesign homepage: 测测-style layout, icon grid for personality/zodiac tests, remove clinical terminology from headers

This commit is contained in:
jackyu66git
2026-08-02 14:25:37 +08:00
parent e6ad46fe87
commit 2686866376
14 changed files with 25369 additions and 168 deletions
+135
View File
@@ -0,0 +1,135 @@
#!/bin/bash
# Scrape all 58 scales from minke8.cn
# Usage: bash scrape_scales.sh
set -e
BASE="https://minke8.cn"
OUT="/www/Project/digital-psychology/scales_data.json"
TMP="/tmp/scales_tmp"
mkdir -p "$TMP"
echo '[' > "$OUT"
first=true
count=0
# Full list of scales
declare -A CATS=(
["xl1"]="心理测试综合" ["xl10"]="心理测试综合" ["xl11"]="心理测试综合"
["xl2"]="心理测试综合" ["xl4"]="心理测试综合" ["xl7"]="心理测试综合"
["xl12"]="心理测试综合" ["xl14"]="心理测试综合"
["mbti"]="人格测试" ["jxrg"]="人格测试" ["xl3"]="人格测试" ["xl6"]="人格测试"
["xl5"]="人格测试" ["xl16"]="人格测试" ["gd7"]="人格测试"
["yyzcs"]="抑郁症测试" ["yyz"]="抑郁症测试" ["yy9"]="抑郁症测试" ["yy4"]="抑郁症测试"
["yy6"]="抑郁症测试" ["yy7"]="抑郁症测试" ["yy8"]="抑郁症测试" ["yy10"]="抑郁症测试"
["yy11"]="抑郁症测试" ["yy12"]="抑郁症测试" ["yy13"]="抑郁症测试"
["jlz"]="焦虑症测试" ["jl1"]="焦虑症测试" ["jl2"]="焦虑症测试" ["jl3"]="焦虑症测试"
["jl5"]="焦虑症测试" ["jl6"]="焦虑症测试" ["jl8"]="焦虑症测试"
["qp1"]="强迫症测试" ["qp3"]="强迫症测试" ["qp4"]="强迫症测试"
["zk1"]="躁狂症测试" ["zk2"]="躁狂症测试" ["zk3"]="躁狂症测试"
["sx1"]="双向情感障碍" ["sx2"]="双向情感障碍"
["sk3"]="恐惧症测试" ["sk4"]="恐惧症测试" ["sk5"]="恐惧症测试" ["sk6"]="恐惧症测试"
["iq2"]="智商测试" ["iq3"]="智商测试"
["eq1"]="情商测试" ["eq2"]="情商测试"
["sm2"]="其它测试" ["sm1"]="其它测试" ["qt1"]="其它测试" ["gd6"]="其它测试"
["xl13"]="其它测试" ["gd4"]="其它测试" ["gd1"]="其它测试" ["gd2"]="其它测试" ["gd3"]="其它测试"
)
declare -A NAMES=(
["xl1"]="症状自评量表(SCL-90)" ["xl10"]="中学生心理健康量表(MSSMHS)"
["xl11"]="小学生心理健康评定量表(MHRSP)" ["xl2"]="明尼苏达多项人格测验(MMPI)"
["xl4"]="艾森克情绪稳定性测验(EES)" ["xl7"]="康奈尔医学指数(CMI)"
["xl12"]="青少年焦虑障碍筛查量表(SCARED)" ["xl14"]="简明精神病评定量表(BPRS)"
["mbti"]="人格测试(MBTI)" ["jxrg"]="九型人格测试" ["xl3"]="艾森克人格问卷(EPQ)"
["xl6"]="卡特尔十六型人格测试(16PF)" ["xl5"]="人格障碍诊断问卷(PDQ4+)"
["xl16"]="大五人格测试(NEO-FFI)" ["gd7"]="霍兰德职业兴趣测试(SDS)"
["yyzcs"]="抑郁自评量表(SDS)" ["yyz"]="贝克抑郁量表(BDI-II)"
["yy9"]="中学生抑郁自评量表" ["yy4"]="流调用抑郁量表(CES-D)"
["yy6"]="抑郁症筛查量表(PHQ-9)" ["yy7"]="儿童青少年抑郁量表(CDI)"
["yy8"]="儿童抑郁障碍自评量表(DSRSC)" ["yy10"]="老年抑郁量表(GDS)"
["yy11"]="爱丁堡产后抑郁量表(EPDS)" ["yy12"]="焦虑抑郁量表(HAD)"
["yy13"]="汉密尔顿抑郁量表(HAMD)" ["jlz"]="贝克焦虑测试量表(BAI)"
["jl1"]="焦虑自评量表(SAS)" ["jl2"]="汉密尔顿焦虑量表(HAMA)"
["jl3"]="状态-特质焦虑问卷(STAI)" ["jl5"]="焦虑症筛查量表(GAD-7)"
["jl6"]="考试焦虑量表(TAS)" ["jl8"]="中学生焦虑自评量表"
["qp1"]="耶鲁布朗强迫标准量表(YBOCS)" ["qp3"]="强迫信念问卷(OBQ-44)"
["qp4"]="强迫量表修订版(OCI-R)" ["zk1"]="贝克-拉范森躁狂量表(BRMS)"
["zk2"]="轻躁狂自评量表(HCL-32)" ["zk3"]="杨氏躁狂评定量表(YMRS)"
["sx1"]="心境障碍问卷(MDQ)" ["sx2"]="双相情感障碍自评量表(BSQ)"
["sk3"]="交往焦虑量表(IAS)" ["sk4"]="社交回避及苦恼量表(SAD)"
["sk5"]="社交焦虑量表(SIAS)" ["sk6"]="社交恐惧量表(SPS)"
["iq2"]="瑞文智商测试(60题)" ["iq3"]="智力测试(增强版)"
["eq1"]="情商测试量表(BARON)" ["eq2"]="情绪智力量表(EIS)"
["sm2"]="匹兹堡睡眠质量指数(PSQI)" ["sm1"]="阿森斯失眠量表(AIS)"
["qt1"]="躯体化症状自评量表(SSS)" ["gd6"]="创伤后应激障碍量表(PCL-C)"
["xl13"]="防御方式自评量表(DSQ)" ["gd4"]="家庭环境量表(FES)"
["gd1"]="婚姻质量问卷(ENRICH)" ["gd2"]="爱情态度测试(LAS)" ["gd3"]="心理压力测试(PSTR)"
)
for slug in "${!NAMES[@]}"; do
name="${NAMES[$slug]}"
cat="${CATS[$slug]}"
url="${BASE}/${slug}.html"
echo ">> [$slug] $name ($cat)"
# First question to learn count
resp0=$(curl -sL -X POST "$url" -d 'action=process&index=0' 2>/dev/null)
qcount=$(echo "$resp0" | python3 -c "import json,sys; print(json.load(sys.stdin).get('length',0))" 2>/dev/null || echo 0)
if [ "$qcount" -eq 0 ] 2>/dev/null; then
echo " SKIP (0 questions or error)"
continue
fi
# Build questions+options arrays as JSON
qjson='['
ojson='['
for i in $(seq 0 $((qcount-1))); do
resp=$(curl -sL -X POST "$url" -d "action=process&index=$i" 2>/dev/null)
q=$(echo "$resp" | python3 -c "
import json,sys
d=json.load(sys.stdin)
print(json.dumps(d.get('tm',''), ensure_ascii=False))
" 2>/dev/null)
o=$(echo "$resp" | python3 -c "
import json,sys
d=json.load(sys.stdin)
xx=d.get('xx',[])
print(json.dumps(xx, ensure_ascii=False))
" 2>/dev/null)
if [ $i -gt 0 ]; then
qjson+=','
ojson+=','
fi
qjson+="$q"
ojson+="$o"
if [ $((i % 20)) -eq 19 ]; then
echo -n "."
fi
done
qjson+=']'
ojson+=']'
# Description from HTML (fast, just first 30 lines)
desc=$(curl -sL "$url" 2>/dev/null | head -30 | grep -oP '(?<=<div class="cs">).*?(?=<hr>)' | sed 's/<[^>]*>//g' | head -1 | python3 -c "import sys; print(json.dumps(sys.stdin.read().strip()[:500], ensure_ascii=False))" 2>/dev/null || echo '""')
# Write entry
[ "$first" = true ] && first=false || echo ',' >> "$OUT"
cat >> "$OUT" << ENTRY
{
"slug": "$slug",
"name": $(echo "$name" | python3 -c "import sys; print(json.dumps(sys.stdin.read().strip(), ensure_ascii=False))"),
"category": "$cat",
"url": "$url",
"description": $desc,
"question_count": $qcount,
"questions": $qjson,
"options": $ojson
}
ENTRY
count=$((count+1))
echo " ✓ ($qcount题)"
done
echo ']' >> "$OUT"
echo "Done! $count scales saved to $OUT"