王云子

王云子

此路山高路远....
twitter
telegram
github

HexoとNotionの神レベルの連携

目標達成#

  • Notion の記事を Markdown 形式に変換
  • Notion でブログを書く
  • Notion の記事を Hexo に公開

プロジェクトの起源#

  • 初代:プロジェクトは@Mo Huishouによって最初に作成されましたが、阿里云の画像ホスティングのみをサポートし、記事の修正はサポートしていませんでした。
  • 現在:@Doradxによって改造され、複数の画像ホスティングをサポートし、記事の修正も可能になりました。

プロジェクトチュートリアル#

私の個人的なプロセス#

上記のチュートリアルは十分に完璧ですが、このプロセスでの自分の操作ミスを書きたいので、選択的に閲覧できます。

  1. 下記のリンクを開いて Notion ボットを作成し、Secretsを取得します。

bookmark

  1. テンプレートblog-templateをコピーします。
  2. データベースを認証し、コピーしたテンプレートを開き、右上の 3 つの点をクリックし、下の「connection を追加」をクリックして、先ほどのボットを追加します。
  3. ブログリポジトリのsettings/secrets/actionsに環境変数を追加します。NOTION_DATABASE_IDNOTION_TOKENPICBED_CONFIGの 3 つです。以下は大物の原文です:

image

  1. ブログのディレクトリ.github/workflowsdeploy.ymlnotion_sync.ymlを新規作成します。私のコードは以下の通りです:
name: Automatic deployment

on:
  push:
    branches: master
    paths:
      - "source/**"
      - "**.yml"
  workflow_dispatch:
  workflow_call:

env:
  GIT_USER: wangyunzi
  GIT_EMAIL: xueq695@gmail.com

jobs:
  build:
    name: Ubuntu and node ${{ matrix.node_version }} and ${{ matrix.os }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        os: [ubuntu-latest]
        node_version: [16.19.1]

    steps:
      - name: Checkout blog and theme
        uses: actions/checkout@v3
        with:
          submodules: "recursive"
      - name: Use Node.js ${{ matrix.node_version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node_version }}
      - name: Install dependencies
        run: |
          git pull
      - name: Depoly
        run: |
          git ls-files -z | while read -d '' path; do touch -d "$(git log -1 --format="@%ct" "$path")" "$path"; done
          npm install
          npx hexo clean
          npx hexo douban
          npx hexo g
      - name: Commit & Push
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: Automatic deployment.
name: Automatic sync pages from notion

on:
  #   push:
  #     branches: master
  workflow_dispatch:
  schedule:
    - cron: "5 */1 * * *"

jobs:
  notionSyncTask:
    name: Ubuntu and node ${{ matrix.node_version }} and ${{ matrix.os }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        os: [ubuntu-latest]
        node_version: [16.x]
    outputs:
      HAS_CHANGES: ${{ steps.checkStep.outputs.HAS_CHANGES }}

    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node_version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node_version }}
      - name: Convert notion to markdown
        uses: Doradx/notion2markdown-action@latest
        with:
          notion_secret: ${{ secrets.NOTION_TOKEN }} # NOTION認証コード
          database_id: ${{ secrets.NOTION_DATABASE_ID }} # データセットID
          migrate_image: true
          picBedConfig: ${{ secrets.PICBED_CONFIG}} # picBedの設定、JSON形式、minify JSONを推奨、さもなければエラーが発生する可能性があります。異なる画像ホスティングの設定は、https://picgo.github.io/PicGo-Core-Doc/zh/guide/config.html#picbedを参照してください。
          page_output_dir: "source" # pageタイプの記事の出力ディレクトリ、例えばabout。
          post_output_dir: "source/_posts/notion" # postの出力ディレクトリ、clean_unpublished_postがtrueの時は、'source/_posts'に設定しないでください。元のディレクトリの記事が削除される可能性があります!!!
          clean_unpublished_post: true # 未発表の記事を削除するかどうか、例えば以前発表した記事をNotionで下書きに移動した場合。
      - name: Check if there is anything changed
        id: checkStep
        run: |
          if [[ -n "$(git status --porcelain)" ]]; then
            echo "HAS_CHANGES=true" >> $GITHUB_OUTPUT;
            echo "更新があります & 再デプロイが必要です。"
          else
            echo "HAS_CHANGES=false" >> $GITHUB_OUTPUT;
            echo "コミット & デプロイするものはありません。"
          fi
      - name: Commit & Push
        uses: stefanzweifel/git-auto-commit-action@v4
        with:
          commit_message: Notionからの自動同期。
  callDepolyTask:
    name: デプロイワークフローを呼び出す
    needs: notionSyncTask
    if: ${{ needs.notionSyncTask.outputs.HAS_CHANGES=='true' }}
    uses: wangyunzi/Annie/.github/workflows/hexo_deploy.yml@master # 自身のGithubアドレスに応じて変更してください
  1. 上記の 2 つのコードのnodeバージョンを確認し、自分と同じに変更します。(ps: 変更しないと小さな問題が発生することがあります、例えば私のように)
  2. 発表する必要のある記事は、待機中のセクションに置いておきます。効果をすぐに確認したい場合は、手動でアクションを実行します。ソースコードはデフォルトで 1 時間ごとに記事の発表が必要かどうかを確認します。

今回の完璧な達成は完全に@Doradx大物の情熱的な助けによるもので、この文章を書くことは、彼がこの便利なプロジェクトを改造してくれたことへの感謝だけでなく、大物が私にこれらの設定を完成させるために何度も指導してくれたことへの感謝でもあります。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。