깃허브 탐방을 하던 중,
TIL 레포지토리를 아주 멋지게 만들어놓으신 분들을 봤다.
나는 주로 티스토리 블로그에 포스팅을 하는데,
사실 개발하시는 분들은 블로그보다 깃허브 주소를 더 궁금해하시고, 더욱 시간을 들여서 보시기 때문에
어떻게 하면 티스토리 포스팅을 하면서도 깃허브와 연동을 시킬 수 있을까 고민했다.
그렇다고 이제부터 깃에 공부한 것들을 올리기도 귀찮고,
글을 쓸 때마다 하나하나 복붙하는건 너무 비효율적인 것 같아 더욱 싫었다.
그러던 도중에 CI/CD 툴들을 이용하면 특정한 시간에 파이썬코드를 실행시켜서
깃허브 이슈에 올릴 수 있지않을까, 생각이 들었다.
물론 내가 직접 클라우드 서버를 올려두고 자동화시켜도 되겠지만,
이왕 만드는거 Github Action(CI/CD 도구 중 하나)을 가지고 공부해보면서 자동화를 시켜놓으면
좀 더 의미있지않을까 싶었다.
마침 자동배포를 알아보며 찾아둔 좋은 자료도 있어서
곧바로 제작에 돌입했다.
아래 코드는 오늘 쓰여진 포스팅의 제목과 태그, 링크를 가져오는 코드이다.
import requests
from bs4 import BeautifulSoup
urls = ["https://ffoorreeuunn.tistory.com"]
def deco_parsing(function):
def parsing(*args):
data = requests.get(urls[-1])
html = data.text
soup = BeautifulSoup(html, 'html.parser')
return function(soup)
return parsing
@deco_parsing
def extract_post_title(soup):
today_contents = ''
today_posts = soup.select(".item_category")
url_prefix = "https://ffoorreeuunn.tistory.com"
# 포스팅은 항상 최신순으로 정렬되어 있기때문에 조건문에 맞지 않는것이 생기면 바로 반복 탈출.
for today_post in today_posts:
post_date = today_post.select(".date")[0].text
if ":" in post_date:
post_title = today_post.select("strong")[0].text
url_suffix = today_post.select("a")[0].attrs['href']
url = url_prefix + url_suffix
urls.append(url)
tags = extract_post_tag(urls)
today_contents += f"<h2><a href={url}>{post_title}</a></h2>\n\n"
for tag in tags:
today_contents += f"#{tag}\n"
break
return today_contents
@deco_parsing
def extract_post_tag(soup):
tags = soup.select(".tag_content")[0].text.split(',\r\n')
return tags
print(extract_post_title(urls))
실행하면 이런식으로 나오게 된다.
이제 깃허브에 이슈를 남길 수 있게 설정을 해줘야하는데,
그전에 깃허브 액세스 토큰을 발급받아야 한다.
깃헙 우측 자신의 아이콘의 Settings 에 들어가보면
이렇게 Developer settings 가 나온다.
거기서 Personal access tokens - Generate new token 을 통해 새로운 토큰을 발급받자.
여러가지 권한이 있는데, 나는 repo 와 workflow 에 체크해줬다.
이렇게 만들어진 토큰의 값을 이제 우리가 원하는 레포지토리의 Setting 의 Secrets 값으로 넣어주면 된다.
이렇게 생성해주면 된다.
나는 TIL_TOKEN 이라는 이름으로 Secret을 생성했다.
이제 본격적으로 설정을 해줄 건데,
이것까지 한번에 포스팅하면 글이 너무 길어질 것 같아 다음 포스팅에서 소개하도록 하겠다.
'Archive > Develop' 카테고리의 다른 글
[ Error / 해결됨 ] RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods (0) | 2021.12.06 |
---|---|
[ GitHub ] TIL(Today I Learned) 자동 업로드 프로젝트 구현하기 #2 (0) | 2021.12.03 |
[ CI/CD ] Github Action | yml 파일 뜯어보기 (0) | 2021.12.03 |
개발 프로세스 모델 (0) | 2021.12.02 |
[ Django ] Admin 페이지에 모델 등록하기 (0) | 2021.11.22 |