はてなブログの記事一覧をMarkdown形式で取得しgitで管理
目次
script
import os
import requests
import xmltodict as XTD
from dotenv import load_dotenv
# .envの読み込み
load_dotenv()
# .envに記載してある設定の読み込み
HATENA_ID = os.environ.get("HATENA_ID")
PASSWORD = os.environ.get("PASSWORD")
BLOG_ID = os.environ.get("BLOG_ID")
# urlの定義
url = f"https://blog.hatena.ne.jp/{HATENA_ID}/{BLOG_ID}/atom/entry"
# リクエストの送信
response = requests.get(url, auth=(HATENA_ID, PASSWORD))
# response.textでボディが取得できるので、それをxmlからdictに変換するライブラリでdictに変換
xml = XTD.parse(response.text)
# dictをイテレートし必要な情報を取得し書き込む
for entry in xml["feed"]["entry"]:
title = entry["title"].replace(" ", "")
fname = "blog/" + title +".md"
with open(fname, "w") as f:
f.write(entry["content"]["#text"])
.env
HATENA_ID=good-yuuta PASSWORD=abcdefg12345 BLOG_ID=good-yuuta.hatenablog.com
apiキーの取得
まずhttps://blog.hatena.ne.jp/my/config/detailに行く APIキーという項目があるのでそこからアカウント設定に移動 そこでもAPIキーという項目があるのでそこから作る。 再度同じページに行くとAPIキーが表示されるのでそれを利用する。
githubactionを使って自動化
name: Backup article
on:
schedule:
- cron: "0 0 * * *"
push:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python: ["3.10"]
steps:
- uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python }}
- name: get backup
run: |
python -m pip install -r requirements.txt
python hatena_client.py
env:
HATENA_ID: ${{ secrets.HATENA_ID }}
PASSWORD: ${{ secrets.PASSWORD }}
BLOG_ID: ${{ secrets.BLOG_ID }}
- name: Commit files
run: |
git config --local user.email "progllama.rust@gmail.com"
git config --local user.name "llama"
git add .
git commit -m "Add changes" -a
git push
現時点の課題は変更がない場合にステータスがエラーになってしまうこと。