メインコンテンツまでスキップ

OpenWeatherMapを利用して現在の天気を入力するAPIフィールドを設定する

概要

Kurocoのコンテンツ定義で設定できるAPIフィールドでは、エンドポイントにリクエストを送り、そのレスポンスをコンテンツに登録することができます。
エンドポイントはKurocoで作成したものでも、外部のものでも構いません。

本チュートリアルでは、APIフィールドの例として、OpenWeatherMapのWeather APIにリクエストを送り、選択した都市の現在の天気を入力できる拡張項目を設定します。

学べること

以下の手順でAPIフィールドを設定します。

前提条件

備考

本チュートリアルでは天気情報の取得にOpenWeatherMapを使用します。
サービスの詳細はOpenWeatherMapを確認してください。

OpenWeatherMapに登録する

まずはOpenWeatherMapにアクセスし、会員登録をします。

Image from Gyazo

登録が完了したらMy API Keysにアクセスし、API keyを確認します。

Image from Gyazo

マスタを登録する

続いて、天気の情報を取得する都市とその緯度経度をマスタに登録します。

[コンテンツ]->[マスタ]をクリックします。
Image from Gyazo

[追加]をクリックします。
Image from Gyazo

CSVで更新を利用して天気情報を取得する選択肢となる都市とその緯度経度を登録します。
今回は以下を登録しました。

citylatlon
東京35.6894139.6917
クアラルンプール3.139101.6868
ニューヨーク40.7127-74.0059

Image from Gyazo

APIを作成する

APIフィールド用のAPI作成

Kuroco内部でのみ利用するエンドポイントはAPIを分けておくことをお勧めします。
そこで、まずはAPIフィールドで利用するためのAPIを新規で作成します。
既に追加済みの場合は次のステップに進んで構いません。

APIの作成

Kuroco管理画面のAPIより「追加」をクリックします。

Image from Gyazo

API作成画面が表示されるので、下記入力し「追加する」をクリックします。

Image from Gyazo

項目設定内容
タイトルAPI field
1.0
ディスクリプションAPIフィールドで利用

APIが作成されました。

Image from Gyazo

CORSの設定

次にCORSの設定をします。[CORSを設定する] をクリックします。

Image from Gyazo

CORS_ALLOW_ORIGINSの [Add Origin] をクリックし、下記を追加します。

  • 管理画面URL

CORS_ALLOW_METHODSの [Add Method] をクリックし、下記を追加します。

  • GET

CORS_ALLOW_CREDENTIALSの[Allow Credentials]にチェックが入っていることを確認します。

Image from Gyazo

問題なければ [保存する] をクリックします。

エンドポイントの作成

マスタに登録した都市データを取得するエンドポイントを作成します。

[新しいエンドポイントの追加]をクリックします。

Image from Gyazo

以下の設定をします。

項目設定内容
パスget_city_master
カテゴリーテーブル
モデルMaster
オペレーションlist
csvtable_id利用するマスタID(2)
outputAsobjectを選択

Image from Gyazo

Image from Gyazo

設定ができたら[追加]をクリックしてエンドポイントを追加します。

コンテンツ定義を作成する

コンテンツ定義の作成

天気の自動入力を設定するコンテンツ定義を作成します。

[コンテンツ定義]をクリックします。
Image from Gyazo

[追加]をクリックします。
Image from Gyazo

以下の設定をします。

一般項目

項目
名前OpenWeatherMap

Image from Gyazo

追加項目

ID項目名項目設定項目設定オプション
1項目名:Weather
識別子:weather
APIフィールド以下の通り

Image from Gyazo

項目設定オプション

カラム項目
カラム#1タイトル都市
URLAPI_URL/rcms-api/4/get_city_master
データ一覧パスlist
保存形式
表示形式%city%
プレビュー URL
カラム#2タイトル天気
URLhttps://api.openweathermap.org/data/2.5/weather?lat=%lat%&lon=%lon%&appid={API key}&lang=ja
データ一覧パスweather
保存形式%main%,%description%,%icon%
表示形式%main% %description%
プレビュー URLhttps://openweathermap.org/img/wn/%icon%@2x.png

Image from Gyazo

Image from Gyazo

Image from Gyazo

注意

API_URLは自身のAPI URLに置き換えてください。
{API key}OpenWeatherMapに登録するで確認したAPI keyに置き換えてください。

設定ができたら[追加する]をクリックしてコンテンツ定義を追加します。

APIフィールドの解説

APIフィールドの項目では、URLに設定したエンドポイントにGETリクエストを送り、レスポンスされたデータを一覧で表示します。
データ一覧パスの項目にレスポンス内の利用するフィールド名を設定し、表示形式では%key%の形式でレスポンスのデータを利用して一覧で表示する内容を設定します。
利用できるJSONレスポンスは以下のデータ構造になっている必要があります。

{
"data":[
{
"key1":"value1,",
"key2":"value2,"
},
{
"key1":"value3,",
"key2":"value4,"
}
]
}

今回の例のカラム#1では以下のレスポンスが得られます。

{
"errors": [],
"messages": [],
"list": [
{
"city": "東京",
"lat": "35.6894\t",
"lon": "139.6917\t"
},
{
"city": "クアラルンプール",
"lat": "3.139\t",
"lon": "101.6868\t"
},
{
"city": "ニューヨーク",
"lat": "40.7127\t",
"lon": "-74.0059\t"
}
]
}
備考

レスポンスのデータ構造がAPIフィールドの求める構造と異なる場合や、GETリクエストのためにAPI keyをヘッダーに含める必要がある場合などは、Api::request_apiに設定したカスタム処理と{api}のSmartyプラグインを利用して、データの取得・整形をしてください。

カラムを複数設定する場合、前のカラムのデータを%key%の形式で次のカラムのURL項目に利用できます。
そのため、今回の例のカラム#2ではhttps://api.openweathermap.org/data/2.5/weather?lat=%lat%&lon=%lon%&appid={API key}&lang=jaの記述でカラム#1で選択した都市の緯度経度をOpenWeatherMapのAPIに送り、天気の情報を得ています。

また、プレビューURLを設定するとプレビューのカラムで表示の確認ができます。
こちらも%key%の形式でレスポンスの内容が利用できます。

備考

プレビューURLに指定するURLはiframeでの表示を許可されている必要があります。

最後に、[選択]をクリックした際にコンテンツに保存されるデータを、最終カラムの保存形式に設定します。
%key%の形式でレスポンスの内容が利用できます。

他の項目を含むAPIフィールドの説明はコンテンツ定義で利用できる拡張項目一覧 - APIフィールドを参照してください。

動作の確認をする

追加したコンテンツ定義のコンテンツ編集画面でAPIフィールドの動作を確認します。
うまく設定ができていれば以下のように選択した都市の現在の天気を入力できます。

Image from Gyazo

関連ドキュメント


サポート

お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。