I log …

Tasker+Gemini+KLWPでホーム画面に自分専用アドバイス

目次

  1. 応用できそう!
  2. タスクの流れ
  3. 準備:GeminiのAPI利用
  4. プロンプトを生成するJS
  5. HTTPリクエストでGeminiにプロンプトをPOST
  6. Taskerの変数に格納するJS
  7. KLWPに渡す
  8. 占いについて

 KLWPを使うとき、どうにかして占いをテキストで表示したい!と思っていた。数年ごしに悲願達成した!
 自分専用の一言占いメッセージをAIで生成して、ホーム画面に表示させた。占いじゃなくてもいいんだけど、せっかくKLWPでホーム画面をカスタマイズするなら、完全に自分専用って感じの何かがあったほうが作る理由になるというか、そういうノリで占いを表示させたい!と思ってから2年くらい経ったので執念のカスタム。

応用できそう!

 私が今回作ったのは占いメッセージなのでまったく同じコードだと需要はなさそうだが、動的に情報をとってきてAIに投げて回答をスマホに表示という部分ではいろいろ応用できそうな予感がしたのでザックリまとめた!KLWPに連携せずTaskerから通知を出すとかでも使えそう。
 そのため汎用性あるコード・応用を前提にしたコードを公開するので、JS自体のカスタムは頑張ってください!AIに聞くといいよ。
 なんとなく応用できそうだな~と思ったのはこのあたり。

  • 天気予報を取得して自分の好み(暑がり・寒がりとか)や属性(性別や年齢)に合わせた服装のアドバイスを一言。
  • ニュースを取得して特に気になるニュースのまとめ。
  • 株価情報を取得してAIから一言アドバイス(動作は保証しません)。

 ニュースなんかは昔RSSで取得していたようなものとの連携もできそう。

タスクの流れ

 コードの前にTaskerで設定するタスクの流れを紹介。寝ている間に1日1回取得するイメージなので、確実性をとってちょこちょこwaitを入れている。

  1. プロンプトを生成するJSを読み込む
  2. 生成に時間がかかる可能性を考慮して30秒待機(こんなに待つ必要はないが念のため)
  3. HTTPリクエストでGeminiにプロンプトをPOST
  4. 回答に時間がかかる可能性を考慮して30秒待機(こんなに待つ略)
  5. Geminiからの回答を整形してTaskerの変数に格納するJSを読み込む
  6. KLWPに変数を渡す(ここを通知を表示にしてもいいかもしれない)

 ちなみに、さすがにJSはPCで書いてスマホに渡しているので、PC必須かもしれない。

準備:GeminiのAPI利用

 GeminiはGoogleのAIでAPIもわかりやすいためGeminiを使うことにしました。
 Google Cloud Consoleでプロジェクトの作成が必要。また、アカウント作成時には本人確認でクレカ登録が必要。
 Google AI StudioでAPIキーを取得。

 ChatGPTやClaudeなど、Geminiの他にもAPIを使えるのだが、すべて基本的には従量課金制。どのAIを使っても使いすぎ注意というのは変わらない。
 Geminiは個人利用なら無料枠があるので、迷ったらとりあえずGemini、というのがいいかもしれない。

プロンプトを生成するJS

 このファイルの中で、プロンプトを生成するための情報取得、プロンプトを生成、HTTPリクエストのためのTasker変数格納をする。

 変更すべきところが多いのでふんわりしたイメージになる。これをコピペして、「これをもとに、●●の情報を取得してプロンプトを返すJSを書いて!」ってAIに投げるといいと思う。
 これを読み込むとTasker側に%GeminiURL、%GeminiRequestBodyという変数がセットされるようになる。もしもエラーが出た場合は%GeminiErrorというグローバル変数にエラーメッセージが渡される。
 ※このJSでは、サーバー上に置かないため&自分でしか使わないためAPIキーを直接書き込んでいますが、どこかに公開するJSではAPI直書きは避けた方がいいです。

HTTPリクエストでGeminiにプロンプトをPOST


 以下の内容をセットする。

  • 方式:POST
  • URL:%GeminiURL
  • ヘッダー:Content-Type:application/json(虫眼鏡アイコンで選択)
  • 本文:%GeminiRequestBody
  • エラーが発生しても継続:チェックを入れる

 これで、タスク内のローカル変数%http_dataにGeminiからの返答が入ってくる。

Taskerの変数に格納するJS

 こちらのファイルは「Taskerのグローバル変数名」というところを変える以外の変更は必要ないはず。
 もしもエラーが出た場合は%GeminiErrorというグローバル変数にエラーメッセージが渡される。

KLWPに渡す

 %Astroというグローバル変数名だった場合。

  1. Taskerでの設定。Taskerでの文字列には%が必要。
  2. KLWP側のグローバル変数に設定。

  3. 呼び出すときはグローバル変数を呼び出す。

 これで表示されたら完成!

占いについて

 これをやり切った後に表示されていた今日のメッセージが「現実的な努力が実を結ぶ。感情のバランスを保とう。」で、当たってる気がした。占いを表示したいのが実を結んだもん。
 ここからはどうやってAIに占いさせるのかというところを適当に解説する。

 私は西洋占星術について詳しいわけではないが、おそらくこういうことだろうという認識として持っているのは、「西洋占星術は惑星の位置を計算して、比較したい惑星の位置との角度などを求めて、その数値から導き出された統計学の一つである」というもの。スピリチュアルに降りてくるわけではないのだとしたら、AIに統計学をまとめた返答を求めるだけなので占いを返してくれると踏んだ。
 そのため、やっていることとしては、以下の流れだ。

  1. 私が生まれた日時の惑星の位置を計算し、これは固定値で持つ。
  2. 毎日、JSが発火するたびに当日の惑星の位置を計算し、これは変数で持つ。
  3. この二つの惑星の位置を比較し、アスペクトを算出。
  4. 惑星情報とアスペクトを元に、AIに一言占いを依頼。

 APIで聞く前に、実装当日にプロンプトでブラウザ版のGemini、ChatGPT、Claudeの3つの対話型AIに質問してみたところ、3つとも全く同じというわけではなかったが、方向性はあっていたように思う。なんか全部直感とか過去がどうのとか言ってる。

Geminiの返答

あなたの繊細な感性(x座の太陽)と、物事の本質を深く探求しようとする力(蠍座の月)が共鳴し、表面的なことにとらわれず、深い洞察を得られる日です。逆行中の水星(獅子座)は、過去の経験から学び、自己表現の方法を見直す機会を与えてくれます。この時期は、人との交流よりも、静かに内省する時間を持つことで、より豊かな気づきが得られるでしょう。

ChatGPTの返答

自分の理想(x座・x座の想像力)と現実(乙女座・山羊座の堅実さ)の狭間で揺れやすい一日ですが、月蠍座が「本当に守りたいもの」を示してくれるので、直感に従って余計なものを手放しましょう。

Claudeの返答

太陽が乙女座で細部への注意を促し、月が蠍座で深い感情的な洞察を与える今日は、あなたのx座の太陽とx座の月が「感覚的な直感を論理的に整理する」絶好のタイミング—水星逆行中だからこそ、過去のアイデア(占いAPIとか?😉)を見直して完成度を高めるチャンスよ🌟

※元々はClaudeにJSではなく占いAPI作成の相談をしていて、他AIとの比較用にこのプロンプトに対して君ならなんという?と聞いているので占いAPIという具体的な言葉が入っている

 というわけで、生成結果にもおおむね満足できそうだったのでそのまま作業を進め、無事ホーム画面に占いを表示させることができた。
 天気予報を取得して服装アドバイスの方が実用的でいい気がするので飽きたら服装アドバイスに変えるかもしれないが、作っていてめちゃくちゃ楽しかった!