ボイスメモをそのままブログ記事にする機能を作った

スマホなどで録音した音声を投稿しています。

https://podcast.smdr.io/voice-memo-to-blog.m4a

このようにiPhoneのボイスメモで録音した音声をショートカット経由でCloudflare workers上のR2に送信し、 Githubのissueを作成しGithub Actionでそのissueをもとに記事ファイルを作成しPRを作成、自動マージするシステムを構築しました。

ショートカットからCloudflare R2に音声を送信する

jt61r mcpgb28

ショートカットの共有シートからの入力を用いて、「音声アップロード」ボタンを押すとタイトル・スラグ・本文を入力し、それをpodcast.smdr.ioにPOSTリクエストするシステムを構築しました。

Cloudflare Workers側ではR2にデータを保存した後、保存した音声を読み込むURLとタイトルなどの情報を用いてGithubのissueを作成しています。

issueの作成からPRの作成、Auto Merge

l521hqg d1lvfb

Issueのタイトルをslug、1行目にタイトル、2行目に音声URL、3行目に本文を載せています。 podcastタグが付与されたときに実行するWorkflowを利用してその内容から新しい記事を生成、ブランチを切ってPull Requestを作成。Auto Mergeを有効にしてからapproveすることで自動的にMergeしています。 Cloudflare Pagesにホストしているので、そこの更新は自動的に行われます。

DATE=$(date "+%Y-%m-%d")
DATE_DETAIL=$(date "+%Y-%m-%dT%H:%M:%S+09:00")
FILENAME="content/posts/${DATE}-${NAME/create-podcast-/}.md"
TITLE=$(echo "$CONTENT" | sed -n 1p)
URL=$(echo "$CONTENT" | sed -n 2p)
DESCRIPTION=$(echo "$CONTENT" | sed -n 3p)
touch "$FILENAME"
{
echo -e "---\nlayout: post\nauthors: [sizumita]\ntitle: \"$TITLE\"\nslug: \"${SLUG}\"\ndate: ${DATE_DETAIL}\ndraft: false\ncategories: [podcast]\n---"
echo ""
echo -e "$DESCRIPTION\n"
echo "\{\{< audio url=$URL >}}"
} >> "$FILENAME"

このようなシェルスクリプトを実行してファイルを作成しています。

課題

現在の仕様だと本文が1行しか載せられないという問題があります。これはsedを変更すればいけると思う(あと、queryのところ)ので、後々やりたいです。

また、Twitterに自動的に投稿するシステムも作りたいです。