[V2] 백준 문제 풀고 Notion에 자동으로 커밋

차승준·2023년 7월 8일
2

Projects

목록 보기
4/6
post-thumbnail


일주일 전쯤, 백준 문제를 풀고 자동으로 노션에 커밋하게 해주는 프로그램을 만들었다. 프로그램 자체는 나쁘지 않았지만 아직 한계점이 많아서 개선해봤다.

우선, 원래 코드를 컴퓨터에 따로 저장하지 않는 나같은 사람에게는 꽤 귀찮은 과정을 거쳐야 하기 때문에 이를 해결하였다.

하지만 이 버전은 따로 코드 링크를 가져와야 되기 때문에, 원래 코드를 저장하는 이전 버전이 편한 분들을 위해 이전 버전도 유지하고, 새 버전을 만들었다.

제출 코드 웹에서 가져오기

Selenium도 써보고, bs4 쿠키로 로그인해서 가져오기도 해봤지만 결국엔 백준에서 원격 로그인해 코드를 다운로드하는건 거의 불가능하다는 것을 깨우쳤다..

헤매다 결국 찾아낸 건, 백준에는 코드 공유 기능이 있다.

제출한 코드 오른쪽 아래에 있는데, 이걸 클릭해서 나오는 링크로는 로그인 없이도 본인의 제출 코드를 가져올 수 있다!

이를 이용해 더 간단하게 두번째 버전 프로그램을 만들었다.

완성 코드

1️⃣ 사용법

1. 초기 설정

초기 설정은 첫 번째 프로그램과 비슷하지만, 코드 경로는 필요없어진다.

프로그램 실행을 위해 아래 세 가지 key를 받아온다.

1) OpenAI API Key

*OpenAI API 요청은 유료이므로 돈까지 써가면서 본인 코드에 GPT의 설명을 업로드 하고 싶지 않다면 Line 94, 95을 주석 처리 하고 2번으로 넘어가면 된다. (이정도 API 요청은 가격이 몇십원 밖에 안하긴 하다)

-> OpenAI API Key 발급

2) Notion Token

1) 웹 페이지로 노션을 접속한다
2) 코드를 업로드할 Notion 상위 Page를 만든다

3) 페이지를 우클릭 한 후, 아래 "검사"를 선택한다

상단 메뉴에서 맨 우측 화살표를 클릭하고, Application을 선택해 들어간다.


좌측 Cookies 에서 www.notion.so를 선택하고, token_v2를 찾는다

바로 옆 박스를 클릭하면 아래에 박스에 본인의 token이 나온다

3) Notion Page ID

1) 코드를 Post할 노션 페이지로 가서 우측 상단 공유 버튼을 누른다
2) "공유" 와 "게시"이 있는데, 우선 "공유" 탭에서 다음과 같이 모든 사용자가 편집을 할 수 있도록 체크되있는지 확인한다.

만약 이렇게 [모든 사용자]를 체크하는 탭이 없다면, 워크스페이스를 새로 생성하면 아마 뜰 것이다. (여러 계정으로 해본 결과, 거의 다 되는데 안되는 계정도 있어서 정확한 해결 방법은 못 찾았다...)

3) "게시" 탭으로 가 웹에 게시 후, 웹 링크를 복사한다.

링크에서 아래 부분을 복사한다. (- 다음부터 ? 전까지)

이게 본인의 page id 이다.

2. 프로그램 실행하기

0) 환경 Setup

  1. 터미널 실행

  2. git clone으로 프로젝트 다운로드

git clone https://github.com/chaseungjoon/Baekjoon-Auto-Notion-V2.git
cd Baekjoon-Auto-Notion-V2
  1. 필요 패키지 다운로드

우선 본인의 urllib3 버전을 확인해본다.

pip uninstall urllib3

1.26.15보다 높은 버전이라면, Notion Client 오류가 나므로 삭제해준다.
아래 requirements 패키지에서 다시 다운할 것이다.

pip install -r requirements.txt
  1. 위에서 얻은 key 값들 지정 (OpenAI API Key, Token, Page ID)

🪟Windows

notepad keys.py

🍎Mac

open keys.py

1) 백준 문제를 푼다

멍멍이를 쓰다듬었다

2) 본인의 제출 코드로 들어가, 아래 공유 버튼을 누른다

그럼 백준이 이렇게 겁을 주는데,

실제로 나만 링크를 사용할 것이므로 딴 사람이 링크를 얻지 않는 이상 내 코드를 여전히 볼 수 없으니까 안심하자.

확인을 누르면 코드 위에 이렇게 링크가 뜨는데, 이걸 복사하자

3) 프로그램을 실행한다

cd Baekjoon-Auto-Notion-V2
python main.py

여기다 위에 복사한 코드 링크를 붙여넣으면 Notion에 커밋이 자동으로 이루어진다.

3. 오류 핸들링

이전 프로그램과 같으므로 참고하길 바랍니다.
백준 Notion 커밋 V1

profile
cau cse

3개의 댓글

comment-user-thumbnail
2024년 4월 16일

안녕하세요! 우연히 해당 프로그램을 발견하고 사용하려고 하는데, 아래와 같은 오류가 발생해서 댓글 드립니다.
참고로 token_v2값과 urllib3 버전 모두 확인 결과 이상은 없는 상태인데, 어떻게 해결하면 좋을까요?

python main.py
소스 코드 링크 >> http://boj.kr/eaa4b758afde46238c82f45a6cb3f357
Traceback (most recent call last):
File "/Users/sallyride/Baekjoon-Auto-Notion-V2/main.py", line 151, in
post_page(problem_info, submit_info[1], submit_info[2],submit_info[3])
File "/Users/sallyride/Baekjoon-Auto-Notion-V2/main.py", line 101, in post_page
page = client.get_block(notion_page_id)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/notion/client.py", line 169, in get_block
block = self.get_record_data("block", block_id, force_refresh=force_refresh)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/notion/client.py", line 162, in get_record_data
return self._store.get(table, id, force_refresh=force_refresh)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/notion/store.py", line 184, in get
self.call_load_page_chunk(id)
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/notion/store.py", line 286, in call_load_page_chunk
recordmap = self._client.post("loadPageChunk", data).json()["recordMap"]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.12/lib/python3.12/site-packages/notion/client.py", line 260, in post
raise HTTPError(
requests.exceptions.HTTPError: Something went wrong. (400)

1개의 답글