동기
만들게된 계기..
오늘 Git을 열심히 꾸며주었다. 😊
꾸미면서 엄청난 사람들의 Git을 많이 구경하였는데 TIL이 눈에 들어왔다. 나도 TIL쓰고 싶다는 생각에 바로 Repository부터 만들었다.
Tistory에 공부한 자료도 올리고 TIL로 깃헙에 까지 매일 작성하면, 너무 귀찮다고 생각하여 생산성있게 Tistory로 올리면 자동으로 깃헙으로 넘어가는 프로그램을 만들어보자고 생각했다.
구현 방법
사용한 방법은 rss와 git Actions를 사용하는 것이다.
rss란? 쉽게 말하면 최근의 작성된 기사 혹은 블로그 글을 하나의 파일로 모아둔 것이다.
rss는 비교적 옛날 글과 같은 것들은 따로 모아두지 않는다.
git Actions를 사용하면 git에서의 간단한 동작을 처리할 수 있다.
Python의 feedparser를 사용하여 rss를 크롤링하고 해당 링크를 만들어 넣어주면 된다.
TiStory blog는 자신의 웹페이지 url/rss를 하면 rss를 구할 수 있다.
(필자의 웹페이지 rss는 https://cnu-jinseop.tistory.com/rss다)
우선 pip를 활용해 feedparser 라이브러리를 설치를 한다.
그 뒤 feedparser 라이브러리로 나의 rss를 파싱한다.
import feedparser
with open("README.md", "r", encoding='utf-8') as f:
content = f.read()
rss = feedparser.parse("https://cnu-jinseop.tistory.com/rss" )
여기서 content에 README.md 값을 넣어주는 이유는 과거 TIL을 유지하고, 동일한 TIL을 추가하지 않기 위함이다.
다음으로 rss의 데이터를 활용해 새로운 post를 만든다.
post = ""
for i, feed in enumerate(rss['entries']):
date = feed['published_parsed']
check = f"{date.tm_year}.{date.tm_mon}.{date.tm_mday} : {feed['title']}"
if(content.find(check)) == -1:
post = f"[{date.tm_year}.{date.tm_mon}.{date.tm_mday} : {feed['title']}]({feed['link']}) <br>\n" + post
text = f"{content}{post}"
with open("README.md", 'w', encoding='utf-8') as f:
f.write(text)
README.md에 날짜, 제목, 블로그링크를 통해 넣어줄 것으로 'entries'에서만 확인하도록 한다.
check를 사용하는 이유는 과거에 내가 작성한 적이 있는지 확인하기 위함이다.
반복문을 돌며 '[날짜 : 이름](링크) <br>'의 형태로 만들어주어 README.md파일을 작성한다.
Python을 활용하는 코드는 위에서 보는 것처럼 간단하게 구현할 수 있다.
다음으로 Actions에서 workflow를 작성한다.
# This is a basic workflow to help you get started with Actions
name: Python
# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [ main ]
pull_request:
branches: [ main ]
schedule:
- cron: "0 0 */1 * *"
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.9
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install feedparser
- name: Run Update Python
run: |
python updateReadMeAuto.py
- name: Update README.md
run: |
git pull
git add .
git diff
git config --local user.email "tjq2702@naver.com"
git config --local user.name "kim-jin-seop"
git commit -m "Update README.md"
git push
schedule의 cron을 활용하여 적절히 반복할 시간을 정해주고
세팅, python실행, git 실행 순서로 구현하여 주기적으로 작업을 할 수 있게 구현하면 끝.
포스팅을 마치며
아쉬운점은 글을 삭제하면 자동으로 해당 글을 삭제할 수 없는 문제점이 있다.
다음에 기회가 되면 rss 트리 구조를 익히고 python의 태그를 읽어오는 방식으로 글과 제목을 크롤링하고 카테고리별로 묶어서 md파일을 자동으로 만드는 프로그램을 만들어보도록 하겠다.
'Etc > odds and ends' 카테고리의 다른 글
URI? URL? URN? (0) | 2021.12.07 |
---|---|
www.google.com url을 검색하면 일어나는 일 (0) | 2021.12.06 |
마크다운(Markdown) 문법 정리 (0) | 2021.07.15 |
Git Blog에 이미지 업로드 Tip (1) | 2021.07.15 |
uArm 예제를 응용해 바둑돌 두는 동작 구현 (2) | 2019.01.10 |