ChatGPT APIを使ってTwitterアプリからGoogleカレンダーにイベント登録するアプリを作ってみた
こんなことはありませんか?
何気なくTwitterを見ていたら気になるイベントが!
ぜひ行ってみたいと思って開催期間と自分の予定を確認。行ける日を決めたらカレンダーに追加。
僕はこれを結構やります。
行けたら行きたいな、くらいでも備忘として(仮)とか書いて追加しちゃいます。なんで追加するかと言うと、忘れるからです。タスク管理が得意な方なら、行きたいリストとか、TODOリストに入れて管理すると思うんですけど、まぁ無理なんです。
さて、そんな時に困るのが、「転記」なんです。
困ると言うか、めんどいんですね。
何がめんどくさいのか
カレンダーに追加するには、
タイトル
場所
内容
念の為元リンク
が必要です。
これを、iPhone上で、長押しスライドで選択し→コピペし、長押しスライドで選択し→コピペし、、というのを繰り返す必要があるんです。いや、大した量ではないんですけど、なかなか面倒なんです。
タイトルとか自分がわかればいいじゃんとかもあるんですけど、何でしょうね。そこに完全なタイトルがあるのだから完全体で入れたくなるんですよね。
あと、個人的には場所が結構大事だったりします。自分で予定入れておきながら、行く直前にあれはどこでやってるんだろうって調べたりします。なんとなく、とりあえず、1時間余裕見てれば行けるでしょと思ってるんで、1時間前に確認するみたいな感じです。
Googleカレンダーアプリは、場所が(アプリが分かる状態で)入っていれば、タップするだけでGoogleマップを開けてとても便利なんです。あとは「経路」をタップするだけで行き方を調べられます。
ここまで聞いていて感の良い方は気づいたと思いますが、そうです。
要するに、
「Googleカレンダーに追加」ボタンが欲しいのです。
何ができるようになったの?
まずは見てもらうのが早いと思います。
(後で触れますが、APIがだいぶ遅いです。早送りしてください。)
こんな感じで、Tweetの内容から予定を登録できます。
GitHubにも上げておきました。リポジトリはこちらです。
本当は「自分の予定を選択→内容を流し込み」の順で出来ると自然なのですが、開発が現実的ではないのでこのようにしています。
1点、既知の問題として、場所の情報が入れられないです。webだと問題ないので、おそらくGoogleカレンダーアプリの不具合ではないかなと思っています。(アプリからフィードバック送っておきました)
どうやってるの?
詳しくはGitHubを見ていただくのが良いですが、こんな感じです。
特に難しいことはしてないのですが、ChatGPTを「自然言語→json」のパーサーとして使ってるのが新しいところです。
今までできなかったり、やろうとしたらかなり大変だった部分を、(まだ時間はかかるものの)出来るようになったことは大きいです。いろんなことに応用できそうだなと思いました。
ちなみに、個人的にはiPhoneのショートカットアプリが一番難しかったです😂
技術的なところ
このアプリ、ちっちゃい割に色々使ってます。
Twitterのメッセージ取得
とにかく楽をしたくて😅
APIについては最近色々と言われてるし、使うの大変そうなイメージがあったんですよね。
それでどうにか本文をコピーできないかなと思ったんですけど、簡単にはできませんでした。スクレイピングしちゃえば一発なんですけど、規約で禁止されてるみたいですし。たぶん、クローリングとかがダメで、単発でたまに使うくらいであれば問題なさそうな気はするんですけど。
Twitterアプリで目の前にメッセージが見えているのに文字列で抜けないと言う。。共有でコピーできるのはURLだけなんですよね。
それでどうしたかと言うと、素直にAPI使いました。すっかり忘れてたんですけど、実は前に使ったことがあって、新しいアプリを追加するだけで簡単に使えました。
これがダメだったらコピペするウェブサイトでも作ろうかなと考えてました。(実はそっちの方がTwitter以外でも使えて汎用性ありそうな気はしてます)
何でつくるか?どこで動かすか?
なんでもよかったんですけど、たまたま最近試したことのあるCloudflare Workersを使ってみました。言語は自動的にNode+typescriptになりました。
あと、たいしたAPI叩くわけではないので、無くてもよかったんですけど、TwitterもChatGPTもNode用のSDKがあって便利でした。
ChatGPT API
API呼び出すのはさくっとでした。問題は指示の調整ですね。ここは色々と試すしかないのですが、APIが遅いので、結構時間かかってしまった部分です。
iPhoneのショートカットアプリ
最初からTwitterの共有から使えるようにしたいなと思ってました。
ただ、アプリを作るのはtoo muchなのでなんとか避けたかった。たぶん、出来るだろうと思って調べてみるとショートカットアプリを共有シートに登録して呼び出すことができることがわかったので、ショートカットアプリを使うことにしました。
ただ、だいぶ癖があって、なぜこの繋ぎ方をするのか?みたいなところがいまだに良くわかってないです。
やってみてどうだった?
まぁ、ないよりはマシかなぁというところでした😂
理由は2つあって、
一つ目は、遅いことです。10秒以上かかるので、せめて3秒くらいで返してくれたらなと思います。
二つ目は、先ほども触れたGoogleカレンダーに場所情報が引き継げない点です。せっかく作ったのにまさかアプリ側で入らないとは。
ま、多分そのうち直ると思うので気長に待とうかなと思います。
実装自体は色々と躓きつつでしたが、普段触らないものに触れてなかなか楽しかったです。
ChatGPTがなかなか言うこと聞いてくれなくて、指示を変えたり色々試してました。ただ、どうすれば、冪等に近い状態で返ってくるかがなかなか難しいなと思いました。
現状は、なるべく指示をふわっとさせず、短く明確にするのが良さそうだな、という感じです。
今回のプログラムでは、カレンダーリンクの元情報をJSONとしてChatGPT APIに出力させているので、それがJSONじゃなくなったり、JSON+メッセージになったりすると破綻してしまうんですよね。
とりあえず、やりたかったことは実現できたし、その過程でいろんな環境もさわれたのでとても楽しかったです。
何かの参考になれば幸いです!
サポートはもちろんですが、スキもしくはフォローしていただけると嬉しいです!