@@ -51,20 +51,54 @@ def parse_readme(lines):
5151
5252
5353# -----------------------------
54- # 백준 정보 수집
54+ # 백준 정보 수집 (정상 동작)
5555# -----------------------------
5656def fetch_baekjoon_info (number ):
5757 url = f"https://www.acmicpc.net/problem/{ number } "
58- res = requests .get (url , timeout = 10 )
58+ headers = {
59+ "User-Agent" : "Mozilla/5.0"
60+ }
61+
62+ res = requests .get (url , headers = headers , timeout = 10 )
63+ if res .status_code != 200 :
64+ return {
65+ "title" : "UNKNOWN" ,
66+ "level" : "UNKNOWN" ,
67+ "link" : url ,
68+ }
5969
6070 soup = BeautifulSoup (res .text , "html.parser" )
6171
62- title = soup .select_one ("#problem_title" )
63- level = soup .select_one ("#problem-info tbody tr td" )
72+ # 문제 제목
73+ title_tag = soup .select_one ("#problem_title" )
74+ title = title_tag .text .strip () if title_tag else "UNKNOWN"
75+
76+ # solved.ac tier 이미지에서 난이도 추출
77+ tier_img = soup .select_one ("img.solvedac-tier" )
78+ level = "UNKNOWN"
79+
80+ if tier_img and "src" in tier_img .attrs :
81+ src = tier_img ["src" ]
82+ # 예: silver5.svg
83+ tier = src .split ("/" )[- 1 ].replace (".svg" , "" )
84+
85+ tier_map = {
86+ "bronze" : "Bronze" ,
87+ "silver" : "Silver" ,
88+ "gold" : "Gold" ,
89+ "platinum" : "Platinum" ,
90+ "diamond" : "Diamond" ,
91+ "ruby" : "Ruby" ,
92+ }
93+
94+ for k , v in tier_map .items ():
95+ if tier .startswith (k ):
96+ level = f"{ v } { tier [len (k ):].upper ()} "
97+ break
6498
6599 return {
66- "title" : title . text . strip () if title else "UNKNOWN" ,
67- "level" : level . text . strip () if level else "UNKNOWN" ,
100+ "title" : title ,
101+ "level" : level ,
68102 "link" : url ,
69103 }
70104
@@ -93,7 +127,7 @@ def make_row(index, status, platform, number, info):
93127
94128
95129# -----------------------------
96- # 메인 처리
130+ # 디렉토리 처리
97131# -----------------------------
98132def process_directory (dir_path ):
99133 readme_path = os .path .join (dir_path , "README.md" )
@@ -141,6 +175,9 @@ def process_directory(dir_path):
141175 return updated
142176
143177
178+ # -----------------------------
179+ # 메인
180+ # -----------------------------
144181def main ():
145182 any_updated = False
146183
0 commit comments