anchor.fm で配信されているポッドキャストの感想をブログに書くにあたり、聴くクライアントには Spotify を使うがリンク先は anchor.fm のパーマリンクにしたい。この作業が割と煩雑なので、Spotify のエピソード URL を渡すと anchor.fm のエピソード URL を返す API を作った。
- エンドポイント
- パラメータ
episodeUrl
: Spotify のエピソード URL
使い方
$ curl "https://jade-zuccutto-05e875.netlify.app/.netlify/functions/hello?episodeUrl=https://open.spotify.com/episode/0LlLUPkyPE78mRppvLn3oM?si=Yok3ZjgCTVGdhJrNotl5tg" https://anchor.fm/middle-aged-developers/episodes/14-e1h9ljv
共有シートから URL を受け取って上記のエンドポイントと結合して API 呼び出し URL を作ってコールする iOS ショートカットと組み合わせて使っている。聴くのも感想を書くのもスマホで完結するワークフロー。
デプロイ先には Netlify Functions を選んだ。無料、スリープなし、環境構築が手軽そう、などを鑑みて。それでもちょこちょこ苦労したが、一日でどうにか完成まで漕ぎ着けた。体裁は度外視してとにかく動くものを優先した結果、Netlify の Getting Started か何かでデプロイしたサンプルプロジェクトにエンドポイントが生えている非常にみっともない状態での公開となった。もしいつか綺麗にしたいモチベーションが湧いたら綺麗にしてデプロイしなおすかもしれない。しかししっくりくる良い名前がないので、このままかもしれない。
Spotify と anchor.fm の URL を対応づける汎用的な方法は思いつかなかったので、自分が視聴するポッドキャスト番組の名前と anchor.fm の RSS の URL のマッピング情報をソースコードにハードコードしている。なのでこのマッピング情報を手動でメンテナンスし続けないと新しい番組に対応できない。
RSS のパースには jsdom を使いたかったが Netlify Functions 環境でうまく動かせなかったので xmldom を使った。querySelector/querySelectorAll がないので多少不便だったが、用は足せた。文字列の最長マッチ(LCS, Longest Common Subsequence)をやる必要があったので node-lcs というのを使った。