現在地の住所を取得して、場所(市区町村まで)とその場所の天気、気温をTwitterにツイートするショートカットを作りました。
ショートカット作成のための解説つきです。
現在地の天気をツイートするショートカット
ショートカットはこちらからダウンロードできます。
事前準備
天気の情報を取得するためにOpenWeatherMapのAPIを使用しているので、利用するにはアカウントを取得してください。
OpenWeatherMapは有料プランと無料プランがありますが、個人レベルで使うのであれば無料で十分です。
登録するとAPI Keyが発行されるので、これを控えておきます。
※勝手にアカウントを使われないよう、API Keyは公開しないようにしてください。上記ショートカットのリンクはAPI Keyの欄を空欄にしています。
ダウンロードしたショートカットを開いて、いちばん最初のテキストの欄にこのAPI Keyを入力します。
これで準備OKです。
実行
実行すると、位置情報を取得(ちょっと時間がかかります)した後、このようなツイートが作成されます。
ツイート投稿の前に本文の編集もできるし、複数アカウントを持っていればアカウントの切り替えもできます。
よければツイートして終了です。
作り方解説
ここまででこのショートカットを使うことはできますが、iOSのショートカットを勉強したい方のために、以下にこのショートカットの作り方の解説を載せておきます。
ご自身でショートカットを作る際の参考にしていただければと思います。
本当はショートカット全体をスクショしてここに載せようと思ったのですが、あまりにも長くなるのでやめました。
iPhoneにダウンロードしたショートカットと照らし合わせながらご覧ください。
1.API Keyを入力
上述のとおり、OpenWeatherMapのAPI Keyを入力します。
2.現在地を取得
文字どおり、iOSデバイスの位置情報を取得します。
3.URLを記述
OpenWeatherMapのAPIを叩くURLを記述します。
パラメータにlat(=latitude;緯度)、lon(=longitude;経度)を措定して、緯度経度で現在地を指定して、その場所の天気を取得するAPIです。
「現在地を取得」で取得したデータから、緯度経度をそれぞれ変数に入れてやっても良いのですが、簡略化するためにマジック変数を使用します。
※マジック変数とは?
マジック変数とは、特に変数を設定することなく、すでに取得したデータから値を抽出し、それをあたかも変数のように扱えるものです。
ここで言うと、や、がマジック変数です。
頭にアクションのアイコンが付いているのが目印。付いてないのは(自分で設定した)普通の変数です。
設定の仕方
入力したい位置(例ではlat=の後ろ)にカーソルを置いて、入力窓の上の変数候補一覧からこのボタンをタップします。
もしくは入力項目が選択式の場合はメニューの中から「マジック変数を選択」を選びます。
すると入力されたアクションの表示が薄くなります。
それぞれのアクションの後ろに濃く表示されている部分が、マジック変数として使用できる値です。
なお、マジック変数はあくまでも変数なので、入力位置より後ろに設定されているアクションから値を取得することはできません。
表示が濃くなるのは入力位置より前の値のみです。
ここでは、「現在地を取得」の後ろにある「現在地」をタップします。
カーソル位置に「現在地」のマジック変数が入力されます。
ただこれだけでは、現在地の緯度なのか経度なのか、はたまた都道府県名なのか市町村名なのかわからないので、それを特定してやらないといけません。
画面下を見ると、現在地のデータのうちどのパラメータを使用するのかを選ぶことができます。
ここでは「緯度」を選びます。
するとマジック変数の表示がこのようになりました。
「現在地」のうちLatitude(緯度)のデータを使用するということが分かります。
同じようにして、lon=の後ろに経度(Longitude)を入力します。
その後ろのパラメータ APPID=はOpenWeatherMapのAPI Keyです。
さきほどAPI Keyを入力したので、それを使用します。
最初にAPI Keyを入力した「テキスト」アクションのあとに「変数を設定」アクションで変数名「api_key」などと設定してもいいのですが、ここでもあえてマジック変数を使います。
先ほどと同じようにマジック変数のボタンをタップして、いちばん上の「テキスト」アクションの後ろのマジック変数「テキスト」を選びます。
これを使えば、わざわざ変数名を設定しなくても、「テキスト」の入力内容を指定の箇所に代入することができます。
ちなみに、最後のパラメータ units=は気温の単位設定。metricは摂氏(℃)です。
これでURLを設定できました。
続きを作っていきます。
4.入力からURLを取得
上で作ったテキストをURLとして認識させます。
5.URLの内容を取得
さきほどのURLで実際にデータを取得します。
ここでは方法はPOSTでOK。
「本文を要求」は、OpenWeatherMapのAPIはJSON形式で取得されるので、JSONを選択。
6.変数を設定
取得したデータそのものを変数resultに設定。
ここでもマジック変数を使えますが、このresultはあとでもう一度使うため、ややこしくならないようあえて変数名を指定しておきます。
試しに、この「変数を設定」の後に「クイックルック」のアクションを入れてみると、このように表示されます。
これがAPIで取得できたJSON形式の生データ。
ここから必要なデータを抽出します。
7.天気のデータを取得
さきほどの生データからweatherの値を取得した後、そこからさらにmainの値を取得すると、「天気」のデータが取得できます。
取得できる値はClear/Clouds/Rain/Snowのいずれかです。
これを変数名「main」に設定。
今回は、天気の分類はweather.mainのキーを使って大まかに「晴れ/曇り/雨/雪」の4種類にしました。
APIで取得するデータにはもっと細かい分類もあるので、OpenWeatherMapのAPIのページを参照して、詳細な天気を表示させるのも面白いかもしれません。
8.気温を取得
同じように、今度は気温を取得します。
「変数を取得」で、さきほど設定したresultを再度呼び出します。
気温のデータはmainの中のtempにあるので、2段階で抽出。
気温の値は、摂氏の場合小数第2位まであるので、「端数を処理」で「標準」「1桁の小数位(=小数第1位)」で処理して小数第2位を四捨五入。
この値を変数名「temperature」に設定。
9.天気の表記を日本語に変換
次に、さきほど取得した天気(変数main)の表記を英語から日本語に変換します。
「辞書」のアクションを使用します。
「新規項目を追加」をタップして、「配列」を選択すると、「キー」の入力欄が出てくるので、Clearと入力。
隣の「0項目」をタップして、さらに「新規項目を追加」>テキスト を選択して、「晴れ」と入力し、完了。
こうすることで、キー=Clearに対し、値=晴れが設定されるので、項目を追加してClouds、Rain、Snowに対しても日本語を設定してやります。
次の「辞書の値を取得」アクションで、上で作った辞書から値を取得します。
「取得」は「値」を選択、「キー」で変数mainを入れると、mainがClearなら晴れという風に、辞書で設定したキーに対応する値が取得されます。
11.ツイート本文の作成
いよいよツイート本文の作成。
さきほどと同様に、マジック変数を使って本文を作っています。
何をやっているのか、もう分かりますよね。
現在地のStateは都道府県、Cityは市区町村です。
ひとつ注意は、ここのマジック変数「辞書の値」は、直前の「辞書の値を取得」で取得されるマジック変数(=日本語に変換された天気)です。
上の方にも、APIから取得した「辞書の値」がありますが、そちらを選ばないように気をつけてください。
このように、ひとつのショートカット上で何度も同じ種類のアクションを使っていると、このマジック変数はどこの値だったっけという風に混乱してしまう危険性があります。
そういう場合にはちゃんと変数名を設定してやった方が分かりやすくていいでしょう。
こうしてできた本文をツイートして、ショートカット終了。
これで完成です。
マジック変数の解説も入れたのでずいぶん長くなってしまいましたが、一つ作ることができれば、あとは簡単です。
アクションを知ればもっと面白いことができると思うんだけど、僕もアクションひとつひとつを理解しているわけではないので、毎回試行錯誤。
面白いアクションができたらTwitter等で教えていただくと嬉しいです。