Skip to content

Commit 5bfe0ca

Browse files
authored
Merge pull request #183 from BCSDLab/develop
fix: 식단 크롤링 멀티 쿠키 구조 적용 및 Redis 연동 수정
2 parents e547108 + 570a7fc commit 5bfe0ca

2 files changed

Lines changed: 26 additions & 12 deletions

File tree

crawling/koreatech_portal/dining.py

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,16 @@
3232
mysql_connection = None
3333
KST = pytz.timezone('Asia/Seoul')
3434

35+
LOGIN_COOKIES = [
36+
{
37+
'name': 'JSESSIONID',
38+
'domain': 'kut90.koreatech.ac.kr',
39+
},
40+
{
41+
'name': '__KSMSID__',
42+
'domain': '.koreatech.ac.kr',
43+
}
44+
]
3545

3646
# 식단 메뉴 정보를 담는 클래스
3747
class MenuEntity:
@@ -75,9 +85,9 @@ def print_flush(target):
7585

7686

7787
# 아우누리 포탈에 식단 정보 요청
78-
def send_request(login_cookie, eat_date, eat_type, restaurant, campus):
88+
def send_request(login_cookies, eat_date, eat_type, restaurant, campus):
7989
headers = {"Content-Type": "text/xml; charset=utf-8"}
80-
cookies = {"JSESSIONID": f"{login_cookie};Domain=kut90.koreatech.ac.kr;"}
90+
cookies = {cookie['name']: f"{login_cookies[cookie['name']]};Domain={cookie['domain']}" for cookie in LOGIN_COOKIES}
8191
body = f"""<?xml version="1.0" encoding="UTF-8"?>
8292
<Root xmlns="http://www.nexacroplatform.com/platform/dataset">
8393
<Parameters>
@@ -151,18 +161,21 @@ def connect_mysql():
151161
def get_cookie():
152162
# redis 캐시 조회
153163
global redis_client
154-
login_cookie = redis_client.get('JSESSIONID')
155-
if login_cookie:
156-
login_cookie = login_cookie.decode("utf-8")
157-
try:
158-
send_request(login_cookie, datetime.today().strftime("%Y-%m-%d"), "lunch", "한식", "Campus1")
159-
return login_cookie
160-
except ConnectionError:
161-
pass
164+
login_cookie = {cookie['name']: redis_client.get(cookie['name']) for cookie in LOGIN_COOKIES}
165+
for name in login_cookie:
166+
if not login_cookie[name]: continue
167+
login_cookie[name] = login_cookie[name].decode("utf-8")
168+
try:
169+
send_request(login_cookie, datetime.today().strftime("%Y-%m-%d"), "lunch", "한식", "Campus1")
170+
return login_cookie
171+
except ConnectionError:
172+
pass
162173

163174
# 아우누리 로그인하여 쿠키 취득
164-
login_cookie = portal_login().get('JSESSIONID', domain='kut90.koreatech.ac.kr')
165-
redis_client.set('JSESSIONID', login_cookie)
175+
cookies = portal_login()
176+
login_cookie = {cookie['name']: cookies.get(cookie['name'], domain=cookie['domain']) for cookie in LOGIN_COOKIES}
177+
for cookie in LOGIN_COOKIES:
178+
redis_client.set(cookie['name'], login_cookie[cookie['name']])
166179
return login_cookie
167180

168181

crawling/koreatech_portal/login_v2.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,4 @@ def portal_login():
5151

5252
if __name__ == '__main__':
5353
print(portal_login().get("JSESSIONID", domain="kut90.koreatech.ac.kr"))
54+
print(portal_login().get("__KSMSID__", domain=".koreatech.ac.kr"))

0 commit comments

Comments
 (0)