手取り足取りプログラミング

cloud9、railsについて自分がつまずいた所を詳しく説明します。なぜなら一番読み返すのは自分だから。

【Rails】RESAS APIを使ってみた 前半

やること

  1. 今回はRESAS APIを利用して都道府県を取得し、ドロップダウンリストで選択する画面を作成します(この記事)
  2. 選択した都道府県の人口構成を表示する画面を作成します(次の記事)

次の記事はこちら
yonayonaru.hatenablog.com


RESAS APIとは

f:id:yonayonaru:20170205235716p:plain
RESASは地域経済分析システムのことで、そのデータを取得するAPIです。
内閣府 地方創生推進室が提供しています。

バージョン

ruby 2.3.0
Rails 4.2.5

RESAS API 登録

RESAS APIに登録します。
下記のリンクから
opendata.resas-portal.go.jp

仕様
opendata.resas-portal.go.jp


登録後にログインしマイページに遷移します。
下の方にAPIキーの項目があります。
※APIキーは再発行しているので、下記のキーは使えません。
f:id:yonayonaru:20170203212824p:plain

Gemfile

Gemfileに追記

activeresouceを使用しますので、下記内容をGemfileに追記してください。

Gemfile

gem 'activeresource'

インストールします。

bundle install

Model

Modelを作成

generateで作成してもいいけどマイグレーションファイルはいらないので、ファイルを新規作成しています。

touch app/models/resas_api.rb

Modelの記述

APIキーをヘッダーに指定する必要がありますが、self.siteと同じ場所ではなく、関数内でself.headersを指定してください。
self.siteと同じ場所に記述した場合、データを2回取得しようとすると「403 Forbidden」になります。
理由は分かりませんが、API_KEYがうまく設定できてないせいだと思われます。
※API_KEYに取得したAPIキーを入力してください。

app/models/resas_api.rb

class ResasApi < ActiveResource::Base
  self.site = "https://opendata.resas-portal.go.jp/"
  self.format = :json
  HEADER_API = 'X-API-KEY'
  API_KEY = 'ここに取得したAPIキーを入力してね'
    
  def self.get_prefectures()
    self.headers[HEADER_API] = API_KEY
    self.find(:one, from: '/api/v1/prefectures')
  end
end

Controller

Controllerを作成

都道府県を取得して表示するprefecturesと、選択した都道府県の人口構成を表示するpopulationsを用意します。

rails g controller home prefectures populations

Controllerの記述

県を取得して表示します。
@messageは正しくデータが取得できなかった時に値が入ります。
正しくデータが取得できたらnilが入ります。

app/controller/home_controller.rb

class HomeController < ApplicationController

  def prefectures
    get = ResasApi.get_prefectures()
    @message = get.attributes['message']
    @result = get.attributes['result']
  end

  def populations
  end

end

View

Viewの記述

Controller作成時にViewも作成されています。
@messageに値が入っていた場合はエラーなので、メッセージを表示します。
@messageに値が入っていない場合は正常取得できているので、ドロップダウンリストでデータを表示します。

app/views/home/prefectures.html.erb

<h1>都道府県選択</h1>
<%= form_tag("/home/populations", method: "get") do %>
  <% if @message %>
    <%= @statuscode %>
    <%= @message %>
  <% else %>
    <%= select_tag 'prefCode', options_for_select(@result.collect {|p| [ p.prefName, p.prefCode ] }) %>
    <%= submit_tag("人口構成を表示") %>
  <% end %>
<% end %>

完成

起動時に県取得の画面が表示されるようにRouteの設定をします。
下記内容をroutes追記してください。

config/routes.rb

root 'home#prefectures'

完成画面がこちら
f:id:yonayonaru:20170206215446p:plain
しょぼいけど、県を選択する画面が表示されています。

次の記事では選択した県の人口構成を表示する画面を作成します。
ソース公開も次回