프로젝트 시작 계기
개발자라면 깃허브 README.md, 일명 리드미를 최소 한 번은 마주하게 된다.
특히 프로필 리드미는 그냥 두자니 허전해서 꾸며놓으면 기분이 좋다.
티스토리 블로그를 운영하다 보니 깃허브 리드미에 내 최신 블로그 포스팅을 게시하고 싶어졌다.
토이프로젝트로 바로 실행에 옮겼다.
기간
2023/03/31 (1일)
기술 스택
Python
feedparser
Github Actions
전체 소스코드
github repository: https://github.com/busymidnight/latest-blog-posts
개발 과정 소개
1. Python의 feedparser 라이브러리로 블로그 피드(RSS) 크롤링
2. Github Actions의 Workflow를 생성하여 매일 정해진 시간 동작
3. 내 프로필 README.md 아래에 블로그 포스트 보여주기
Python의 feedparser 라이브러리로 블로그 피드(RSS) 크롤링한다
README.md와 같은 폴더에 아래와 같은 main.py를 작성한다.
markdown_text는 취향에 따라 자유롭게 작성하면 된다.
참고: feedparser 공식 문서
https://feedparser.readthedocs.io/en/latest/
import feedparser,time
URL="블로그 주소/rss"
RSS_FEED = feedparser.parse(URL)
MAX_NUM = 5
latest_posts = ""
markdown_text="""
## Latest Blog Posts
"""
for idx, feed in enumerate(RSS_FEED['entries']):
if idx > MAX_NUM:
break
feed_date = feed['published_parsed']
markdown_text += f"[{time.strftime('%Y/%m/%d', feed_date)} - {feed['title']}]({feed['link']}) <br/>\n"
f = open("README.md", mode="w", encoding="utf-8")
f.write(markdown_text)
f.close()
Github Actions에서 Workflow를 생성하자
(1) Actions 탭을 누르고 set up a workflow yourself 클릭
(2) main.yml 작성 후 Start Commit
(3) main.yml 내용은 아래와 같이 작성한다.
# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions
name: Python application
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
schedule:
- cron: '0 0 * * *' #이 경우 매일 정각 00:00에 실행됩니다.
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v3
with:
python-version: "3.10"
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
pip install feedparser
- name: Run Update Python Script
run: |
python3 main.py
- name: Update README.md file
run: |
git pull
git add .
git diff
git config --local user.email "깃허브계정"
git config --local user.name "사용자이름"
git commit -m "Updating Blog Posts"
git push
(4) 해당 Repository의 README.md에 최신 블로그 포스트 6개가 올라와있다.
제대로 동작하는지 확인했으니 이제 프로필에도 적용해보려 한다.
해당 main.py를 프로필 README.md가 있는 Repository에도 위와 같은 과정을 반복해 주면 된다.
단, markdown_text에 기존 프로필이 작성된 코드를 전부 넣어줘야 한다.
(그렇지 않으면.. 내 기존 프로필에 불러온 블로그 포스트가 덮어씌워진다.)
완성된 내 프로필 REAME.md 공개!
아쉬운 점 및 개선할 점
- 현재는 프로필의 README.md를 업데이트할 때마다 위 고정 내용을 작성해 주기 때문에 python 코드 안에 마크다운 텍스트가 들어가 있다. 이 부분이 보기에 좋지 않아서 코드를 개선해야 할 필요가 있다.