_IT

Avengers Assemble! Notion API + Kakao API +Github Actions.

zingozing 2022. 5. 11. 22:45

https://github.com/1pha/please-read

 

GitHub - 1pha/please-read: Send unread-papers with priorities with Kakao API & Notion API

Send unread-papers with priorities with Kakao API & Notion API - GitHub - 1pha/please-read: Send unread-papers with priorities with Kakao API & Notion API

github.com

심심...하기보단 일하기 싫어서 자동화 툴을 하나 만들었다. 아래처럼 생긴 내 Paper database가 Notion에 있다.

뭐 여러 property가 있긴한데 그 중에 Status가 있다. 여기에는 (내 기준) 읽었는지 안 읽었는지, 이 논문의 중요도 등이 담겨져 있다. 읽지 않았고 중요하다고 판단되는 논문들이 꽤 많은데 빨리 읽어야지 뭐...

그래서 이 중요한데 안 읽은 논문들을 매일 아침 12시마다 알림을 주는 시스템을 만들면 재밌겠다 생각했다. 사실 일하기 싫어서 진행했다. README에도 써있지만파이프라인은 아래와 같다

  • Notion API를 통해 내 Papers Database를 가져온다.
  • 얘를 Pandas로 정리한다. 사실 SQL로 하는 게 더 좋을 것 같은데 이건 추후에 생각해봐야겠다. (애초에 양이 많지는 않아서 그냥 메모리에서 충분히 핸들링 가능. 애초에 .db를 만들면 이거 매번 무결성 관리하는 게 더 힘들다. 그 때 그 때 Notion에서 불러오는 게 낫다... 나의 경우는-)
  • 노티시킬 논문을 고른다. 여기에 "중요도"와 "읽지 않았음"을 상위 우선순위로 두고 논문을 top-3개를 뽑는다.
  • Kakao API를 사용해서 위에서 정리한 논문을 카톡으로 보낸다. List Object 사용했다.
  • Github Actions를 사용해서 주기적으로 보낸다.

결과는 아래와 같다.

제법 성공적이다. 참고로 thumbnail 이미지는 자동이 아니고... 내가 도메인 별로 등록한 거다 ㅅㅂ. Kakao API에서는 아무 링크나 보낼 수 없다. 내가 세팅한 최대 10개의 도메인 내에 있는 링크들만 보낼 수 있는데 내가 자주 보는 도메인들 (arxiv, pubmed 등) 10개 엄선해서 정리했다. 그리고 얘네 로고 링크를 하나하나 정리해서 업로드한 것.


자세한 사항은 그냥 깃헙 가서 코드 보자. 어차피 회고 쓰려고 시작한 거;

  • 어차피 API가 있다는 건 HTTP GET/POST로 모든 걸 수행할 수 있게 만들어뒀다는 거다. 겁먹을 필요가 없는데 notion python package 누가 만든 거 쓰려고 절절댔던게 좀 쪽팔린 수준. 사실상 모든 API는 requests 모듈 하나로 다 해결할 수 있다. 앞으로도 겁먹지 말고 해봐야지
  • 연구 아니고 개발은... 정말 다른 영역이라는 걸 많이 깨닫는다. 일단 레포 보면 알겠지만 코드 개판임 ㅋㅋ; 나중에 정리할 거 생각하니까 귀찮네.
    • 연구에서는 edge case를 고려할 게 사실은 별로 없다. 근데 일단 API 사용하는 것부터가 edge case를 죄다 고려해놔서 이거 맞추는 게 힘들었다. 가령 텍스트별로 이미지 URL을 넣어줘야한다거나, URL도 PC용이랑 Mobile용을 따로 key-value로 넣어줘야 한다거나 등 참... 귀찮았다. 하지만 이런 무결성이 있어야 프로그램이 돌아가겠지ㅠ;
    • 애초에 연구는 숨길 게 없긴한데 이건 confidential한 정보가 너무 많다. TOKEN이랑 id랑 등등 숨길게 많아서 github.secrets 사용해서 넣었다. 이런 개인정보나 외부유출되지 않아야할 정보 처리하는 것도... 다르다. 아니 연구는 애초에 지들 개인데이터 빼고 숨기면안됨.
  • 데이터베이스 정리 잘해야한다. 저 데이터베이스 구축한 건 2020년 말인데 봤던 모든 paper를 넣은 것도 아니고, 스키마도 천천히 바뀌고 안 쓰는 column도 생겨서 이거 빨리 정리해줘야겠다. 그러면 쓰는 column은 잘 정리되어있냐? 그건 아님 ㅋㅋ; 우선 도메인도 10개 한정으로 잘 정리해보고 안 쓰는 column도 빨리 내다버려야겠다. 역시 인생은 실전.

#TODO

  1. 일단 코드 분할. 목적이 명확하지 않다보니 함수가 좀 뭉쳐있다. 계획하고 만든 프로젝트가 아니라서 좀 막 짜긴했다;
  2. 토큰 주기적으로 업데이트해주기
  3. 주기적으로 데이터베이스 처리 코드 잘 돌아가는지 확인하기.

'_IT' 카테고리의 다른 글

Zotero: 곰국 정리하기  (0) 2023.02.27
os.path.join  (0) 2022.05.10