[Rails] HTTParty gem으로 API를 쉽게 사용할 수 있는 방법

참고 : htps //w w. 이렇게 r세라. 오 rg / ぇ r rn / ru by-on-rai ls-in tro /

API는 내가 최근에 사용한 영화의 데이터베이스를 예로 든다.
htps //w w. 그래도 ぃぃえ db. 오 rg / Dokumen ON / API

HTTParty란?


  • RESTful 웹 서비스 클라이언트
  • 자동으로 JSON/XML을 구문 분석하고 Ruby hashes로 변환 (훌륭한 w)
  • 지원 : Basic HTTP 인증, default request query parameters (공통 매개 변수 ex.API key)

  • API 데이터 샘플 분석(필요한 정보)



    우선, 보기 쉽게 하기 위해, Chrome나 Firefox로 JSONView라는 확장을 인스톨 한다.
    예를 들어 특정 영화 데이터:

    base uri : htps : // 아피. 그래도 ぃぃえ db. 오 rg / 3 / 모즈 /
    parameters("?"뒤 부분): api_key=1234abcd&language=ko-KR
    요청의 매개 변수에 따라 데이터가 JSON으로 반환됩니다. URL에서는 매개 변수별로 "&"로 연결됩니다.

    구현 순서(예: 검색+영화 상세)



    준비



    Gemfile
    gem 'httparty', '0.13.5' #インストールの後サーバ再起動
    
    $ rails g controller movies search show
    

    모델



    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
    

    컨트롤러



    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
    

    보기



    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>
    

    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') %>
    

    결과 화면





    좋은 웹페이지 즐겨찾기