def update_rank(event, context):
with application.app_context():
my_kwargs = event.get("kwargs")
date = datetime.datetime.utcnow().strftime('%Y/%m/%d')
for i in range(my_kwargs["start"], my_kwargs["end"]):
url = "https://www.acmicpc.net/ranklist/" + str(i)
soup = get_soup_from_url(url)
table = soup.find(id='ranklist')
trs = table.tbody.find_all('tr')
boj_ids = list()
boj_ranks = list()
for tr in trs:
tds = tr.find_all('td')
if int(tds[3].a.string.strip()) <= 19:
break
boj_ids.append(''.join(tds[1].find_all(text=True, recursive=True)).strip())
boj_ranks.append(int(tds[0].string))
api = request_koo_api("user", boj_ids)
koo_ranks = list(user["ranking"] for user in api)
for _ in range(len(boj_ids)):
boj_id = boj_ids[_]
boj_rank = boj_ranks[_]
if koo_ranks[_] == None:
koo_rank = 0
else:
koo_rank = koo_ranks[_] + 1
data = {date: [boj_rank, koo_rank]}
if not Ranking.query.filter_by(boj_id=boj_id).scalar():
ranking = Ranking(boj_id=boj_id, ranking=data)
db.session.add(ranking)
db.session.commit()
else:
user = Ranking.query.filter_by(boj_id=boj_id)
new_ranking = user.first().ranking
new_ranking.update(data)
user.first().ranking = new_ranking
db.session.commit()
print("{0} {1} {2}".format(boj_id, boj_rank, koo_rank))
return "OK"
评论列表
文章目录