必要な準備
- Cloudflare pagesにページをデプロイしていること
- プロジェクトをGitHubで管理していること
- はてなブログのAPIキーの用意
設定していく
Webhookの用意
CloudflareのダッシュボードからWorkers & Pages > プロジェクト > Settings > Deploy hooks
の順番で進みhooksを作成する
SecretsをGitHub Actionsに用意
Key | Value |
---|---|
HATENA_USER_ID | はてなブログのユーザーID |
HATENA_API_KEY | はてなブログのAPIキー (アカウント設定から確認) |
HATENA_BLOG_URL | はてなブログのURL |
CLOUDFLARE_WEBHOOK_URL | デプロイするCloudflare pagesのWebhook URL |
Workflowの用意
以下のworkflowを追加する。手動実行することもできるが、または毎週月曜に実行されるようになっている。
解説 :
- はてなブログのAPIを用いて記事一覧を取得し前回取得時の差分と比較する
- Artifactsを利用して差分のファイルを保持するようにする
name: Check Blog Update on: schedule: - cron: '0 0 * * 1' workflow_dispatch: env: HATENA_USER_ID: ${{ secrets.HATENA_USER_ID }} HATENA_API_KEY: ${{ secrets.HATENA_API_KEY }} HATENA_BLOG_URL: ${{ secrets.HATENA_BLOG_URL }} CLOUDFLARE_WEBHOOK_URL: ${{ secrets.CLOUDFLARE_WEBHOOK_URL }} jobs: check-blog-update: runs-on: ubuntu-latest outputs: diff: ${{ steps.compare-xml.outputs.diff }} steps: - name: Download previous xml data uses: actions/download-artifact@v3 with: name: xml_data path: ./previous.xml continue-on-error: true - name: Fetch Hatena Xml run: | curl -u $HATENA_USER_ID:$HATENA_API_KEY https://blog.hatena.ne.jp/$HATENA_USER_ID/$HATENA_BLOG_URL/atom/entry > current_rss.xml - name: Compare xml and set output id: compare-xml run: | diff -u ./previous.xml ./current_rss.xml > diff.txt || true if [ -s diff.txt ]; then echo "diff=true" >> $GITHUB_OUTPUT else echo "diff=false" >> $GITHUB_OUTPUT fi - name: Upload xml data uses: actions/upload-artifact@v3 with: name: xml_data path: ./current_rss.xml webhook-to-cloudflare: runs-on: ubuntu-latest needs: check-blog-update steps: - name: Send Webhook to Cloudflare if: needs.check-blog-update.outputs.diff == 'true' env: CLOUDFLARE_WEBHOOK_URL: ${{ secrets.CLOUDFLARE_WEBHOOK_URL }} run: | curl -X POST $CLOUDFLARE_WEBHOOK_URL
感想
作っていて思ったが、これなら週1でビルドを回すようにActionsを設定したらいいなと思った。