0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【スケジューラ】NASA Open APIを利用してみる

Last updated at Posted at 2023-05-01

先ずはNASAのOpen APIページに行き、APIキーを取得しましょう。
image.png

APIキーが取得できたら、今度はどのAPIを利用するかを選びます。
今回はBrowse APIsページからMars Rover Photosを選びました。
image.png
+ 符号をクリックして、使用説明文を表示させます。エンドポイントのURLといくつかのパラメータの説明があります。
Example Queriesの一番最初の例を使用します。
image.png

核となるタスクの作成

Sharperlightスケジューラタスクを使用して、NASAの写真データを取得してみます。
Sharperlightアプリケーションメニューからスケジューラを起動します。
新規ボタンで新しいタスクの作成を開始します。
タスクのダイアログが起動したら、コードグループを決定します。
次にアクションタブに移動して、実際にタスクに課す仕事を定義します。
ここでは、クエリビルダを使用して先ほど選択したAPIエンドポイントからデータを取得し、あらかじめ準備したローカルのデータベースに保存するといった一連の作業を定義します。

クエリの組み合わせアクション

アクションタブの新規アイコンでアクション一覧を表示させ、クエリの組み合わせを選択します。
image.png
image.png
クエリの組み合わせアクションが追加されると、クエリを編集ボタンで先ほど選択したAPIエンドポイントに対するクエリを作成します。
image.png
起動するクエリビルダでは、

  • モード:詳細レポート
  • 製品:システム
  • テーブル:Web ページのテーブル、CSV、JSON、XML またはOData
  • URLリンク:(Example Queriesの一番最初の例)
https://api.nasa.gov/mars-photos/api/v1/rovers/curiosity/photos?sol=3495&page={@Page}&api_key=あなたが取得したAPIキー

パラメータsolの値を3495に、更にpageパラメータを追加しました。
page番号はこのクエリに対する引数として渡すよう設定します。
また、戻ってくるJSON形式のデータのどの位置から解析するかを、開始位置フィルターに指定します。
image.png
URLリンクフィルターにURLを記入すると、Sharperlightエンジンが実際にそのURLにアクセスし、戻ってくるデータを解析し、選択可能なフィールド一覧を選択領域に表示してくれます。
image.png
ここでは、camera列やrover列は、更にJSONデータ形式のままなので、拡張表現を利用してそれぞれの値を取り出します。
image.png
この方法で戻ってくるデータをいくつかの列に分解します。
image.png
各出力列には名前をつけて、保存する際にその名前で参照できるようにします。属性欄の%のついた文字列がその列の参照名です。%RoverIdや%RoverName
プレビューでクエリの動作確認を行います。
データが返ってきました。
image.png
OKボタンでクエリを保存します。

SQLステートメントアクション

次に新規アクションとしてSQLステートメントアクションを追加します。
先に作成したクエリの組み合わせアクションは、For文のような働きをし、取得したデータを一行ずつその次のアクションに渡し処理させます。
ここではSQLステートメントアクションで一行ずつデータベースに書き込むようにします。
今回は前もってデータベースとテーブルを作成し、そのデータベースに対するSharperlight用のデータモデルを作成しておきました。もちろんクライアントのセットアップでそのデータベースとの接続も完了しています。
よって、SQLステートメントアクションでは下図のように、その接続を利用してSQL文を発行することが可能です。
image.png
あとは、クエリの組み合わせアクションから渡される値を、データベースに書き込むためのSQL文をこのように定義するだけです。
image.png
クエリの組み合わせアクションから渡される値は全て{%xxxxxx}で参照できます。

UPDATE [dbo].[MarsPhoto]
       SET [Rover_Raw]='{%RoverRaw}'
       ,[Rover_Id]={%RoverId}
       ,[Rover_Name]='{%RoverName}'
       ,[Rover_LandingDate]='{%RoverLandingDate}'
       ,[Rover_LaunchDate]='{%RoverLaunchDate}'
       ,[Rover_Status]='{%RoverStatus}'
       ,[Camera_Raw]='{%CameraRaw}'
       ,[Camera_Id]={%CameraId}
       ,[Camera_RoverId]={%CameraRoverId}
       ,[Camera_Name]='{%CameraName}'
       ,[Camera_FullName]='{%CameraFullName}'
       ,[ImageURL]='{%ImageURL}'
       ,[EarthDate]='{%EarthDate}'
WHERE [Id]={%id};
IF @@ROWCOUNT=0
BEGIN
INSERT INTO [dbo].[MarsPhoto]
           ([Id]
           ,[Rover_Raw]
           ,[Rover_Id]
           ,[Rover_Name]
           ,[Rover_LandingDate]
           ,[Rover_LaunchDate]
           ,[Rover_Status]
           ,[Camera_Raw]
           ,[Camera_Id]
           ,[Camera_RoverId]
           ,[Camera_Name]
           ,[Camera_FullName]
           ,[ImageURL] 
           ,[EarthDate])
     VALUES
           ({%id},'{%RoverRaw}',{%RoverId},'{%RoverName}','{%RoverLandingDate}','{%RoverLaunchDate}','{%RoverStatus}'
              ,'{%CameraRaw}',{%CameraId},{%CameraRoverId},'{%CameraName}','{%CameraFullName}','{%ImageURL}','{%EarthDate}')
END

これでこのアクションの定義は終了。

クエリの組み合わせ終了アクション

最後に新規アクションとしてクエリの組み合わせ終了アクションを追加します。
これはFor文を閉じる的な意味合いのアクションで、クエリの組み合わせアクションと必ず対を成す必要があります。

以上で取得および書込みタスクの作成は終了。OKで保存します。

核となるタスクをページ数分繰り返す親タスクの作成

次に、もう一つタスクを作成して、先に作成したタスクをページ番号毎に繰り返し実行できるようにします。
新規タスクを作成し、クエリの組み合わせアクションを利用して、ページ番号が1から20までを返すクエリを定義します。
image.png
そしてそのクエリの組み合わせアクションのForループ内で、先に作成した核となるタスクを実行するといった具合です。その際にページ番号を引数として渡します。
image.png
最後にクエリの組み合わせ終了アクションをお忘れなく。
OKで保存します。

タスクの実行

スケジューラダイアログで、親タスクを選択し、右クリックメニューから実行を選択します。
エラー無く実行が終了すると、接続したデータベースの指定したテーブルにはNASA Open APIから取得したデータが保存されているはずです。

取得したデータの確認

折角なのでSharperlightでレポートを作成します。
image.png
image.png
ブラウザで拝見すると...
image.png
是非、お試しあれ。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?