[Rails] HTTParty gemによるAPIを簡単に利用できる方法

参考：https://www.coursera.org/learn/ruby-on-rails-intro/

APIのほうは私が最近使っている映画のデータベースを例にします。
https://www.themoviedb.org/documentation/api

#HTTPartyとは
- RESTful Webサービス・クライアント
- 自動的にJSON・XMLを解析しRuby hashesに変換する（素晴らしいw）
- サポート: Basic HTTP認証、default request query parameters(共通パラメタex.API key)

#APIデータサンプル分析（必要な情報）
まず、見やすくするために、ChromeかFirefoxでJSONViewという拡張をインストールする。
例えばとある映画のデータ：
![Screen Shot 2019-02-04 at 5.57.05 AM_meitu_2.jpg](https://qiita-image-store.s3.amazonaws.com/0/310783/8ea36a8b-3e85-50ab-5dd5-43d40c4a103b.jpeg)
**base uri:** https://api.themoviedb.org/3/movie/
**parameters(「?」の後ろの部分):** api_key=1234abcd&language=ja-JP
リクエストのパラメタによってデータがJSONで返ってくる。URL上ではパラメタごとに「＆」で繋いでる

#実装手順(例：検索＋映画詳細)

##準備

```ruby:Gemfile
gem 'httparty', '0.13.5' #インストールの後サーバ再起動
```

```
$ rails g controller movies search show
```


##モデル
```ruby:app/models/movie.rb
class Movie
  include HTTParty

  # default_options.update(verify: false) # disable SSL verification(必要に応じて)
  default_params api_key: '1234abcd', language: 'ja-JP' #共通パラメタ					
  format :json

  # キーワードによる検索機能
  # https://developers.themoviedb.org/3/search/search-keywordsに参照
  def self.search term
    base_uri 'https://api.themoviedb.org/3/search/movie'
    get("", query: { query: term }) # {}の中身はパラメタ
  end

  # 指定の映画の詳細情報を取得
  # https://developers.themoviedb.org/3/movies/get-movie-detailsに参照
  def self.details id
    base_uri "https://api.themoviedb.org/3/movie/#{id}"
    get("", query: { } ) #パラメタなし
  end
end
```

##コントローラー
```ruby:movies_controller.rb
def search
  @search_term = params[:looking_for]
  @movie_results = Movie.search(@search_term)
end

def show
  @movie_info = Movie.details(params[:id])
end
```

##ビュー

```erb:search.html.erb
<h1>映画検索</h1>

<div>
  <%= form_tag(movies_search_path, method: :get) do %>
    <%= search_field_tag :looking_for, nil, placeholder: 'Movie Title...' %>
    <%= submit_tag '検索' %>
  <% end %>
</div>

<div>
  <% if @movie_results.blank? %>
    <p>[<%= @search_term %>]と一致する情報が見つかりませんでした</p>
  <% else %>
    <p>[<%= @search_term %>]の検索結果</p>
    <table border="1">
	  <tr>
	    <th>ポスター</th>
	    <th>タイトル</th>
	    <th>上映日</th>
	    <th>あらすじ</th>
	  </tr>
	  <% @movie_results.each do |movie| %>
	    <tr>
	      <td><%= image_tag("https://image.tmdb.org/t/p/w200#{movie["poster_path"]}", :alt => 'poster') %></td>
	      <td><%= link_to movie['title'], action: 'show', id: "#{movie["id"]}" %></td>
	      <td><%= movie['release_date'] %></td>
	      <td><%= movie['overview'] %></td>
	    </tr>
	  <% end %>
	</table>
  <% end %>
</div>
```

```erb:show.html.erb
<h1><%= @movie_info['title'] %></h1>

<p><strong>上映日：</strong><%= @movie_info['release_date'] %></p>

<p><strong>上映時間：</strong><%= @movie_info['runtime'] %>分</p>

<p>
	<strong>ジャンル：</strong>
	<% @movie_info['genres'].each do |genre| %>
		<% if genre == @movie_info['genres'].last %>
			<span><%= genre['name'] %></span>
		<% else %>
			<span><%= genre['name'] %>、</span>
		<% end %>
	<% end %>
</p>

<p><strong>ストーリ：</strong><%= @movie_info['overview'] %></p>

<%= image_tag("https://image.tmdb.org/t/p/original#{@movie_info['poster_path']}", :alt => 'poster') %>
```

#結果画面

![Screen Shot 2019-02-04 at 8.01.21 AM_meitu_3.jpg](https://qiita-image-store.s3.amazonaws.com/0/310783/cd74816b-64ac-c13e-e858-5e8c185dc395.jpeg)
![Screen Shot 2019-02-04 at 8.04.52 AM_meitu_5.jpg](https://qiita-image-store.s3.amazonaws.com/0/310783/9c7a56af-738e-9ee7-298a-d30a1429e108.jpeg)
![Screen Shot 2019-02-04 at 8.07.16 AM_meitu_6.jpg](https://qiita-image-store.s3.amazonaws.com/0/310783/b3166c0f-853c-0e76-6a80-98b052fdf9c5.jpeg)