【Rails】Pinterest API를 통해 자신의 계정의 인덱스 목록을 가져오고 JSON의 샘플 코드를 되돌려줍니다

9440 단어 RubyRails

개시하다


Pinterst API를 사용했기 때문에 자신에게 메모를 남겼다.
이번에 대상인 기능은'자기 계좌 취득 핀 일람표'다.
공식 문서 여기 있습니다.
※ 사용 제한 등에 유의하십시오.
(저작권 소유자의 허가를 받은 경우를 제외하고) 이미지를 저장하거나 변경하지 않으며, Pinterst의 이미지를 인쇄할 수 없습니다.
비인용 데이터를 저장하지 마십시오
등 제한이 있다.
개발자를 위한 가이드라인

컨디션

OS: macOS Catalina 10.15.3
Ruby: 2.6.5
Rails: 6.0.2.1

전제 조건

  • Access Token의 획득 방법
  • rails new 등 최소한의 준비
  • 등 자세한 접촉은 없었다.
    Access Token의 취득이쪽에서

    1. net_http_module.rb


    HTTP가 요구하는 부분을 분리합니다.
    이번에는 그냥 GET 요구사항으로 아주 간단합니다.
    app/controllers/concerns/net_http_module.rb
    require 'active_support'
    
    module NetHttpModule
      extend ActiveSupport::Concern
    
      require 'net/http'
    
      def api_get(set_URL)
        uri = URI.parse(set_URL)
        response = Net::HTTP.get_response(uri)
      end
    end
    

    2. pins_controller.rb


    ※ 이하Pin 기종과 컨트롤러는 사전에 제작되었습니다.
    $ rails g model Pin pin_id:integer pin_url:string image_url:string width:integer height: integer
    
    $ rails g controller api/v1/pins index
    
    app/controllers/api/v1/pins_controller.rb
    class Api::V1::PinsController < ApplicationController
      include NetHttpModule
    
      def index
        # Pinterest APIのAccess Tokenはcredentialsで管理
        url = "https://api.pinterest.com/v1/me/pins/?access_token=#{Rails.application.credentials.api_key[:pinterest]}&fields=id%2Cnote%2Curl%2Cimage"
        # NetHttpModuleで定義したapi_getメソッドを使用
        response = api_get(url)
        # 429(リクエスト多すぎ)ならエラーメッセージを返す
        if response.code == "429"
          render json: { error: response.message }, status: response.code
        elsif response.code == "200"
          #privateで定義したメソッドを使用してDBにpin情報を保存
          save_pins_and_cursor(response)
          # Vue.jsに返すJSONを作成する(この辺は必要に応じて変更)
          res = {
            message: response.message,
            pins: Pin.all.as_json,
          }
          render json: res, status: response.code
        else
          render json: { error: response.message }, status: response.code
        end
      end
    
      private
    
      def save_pins_and_cursor(response)
        pins = JSON.parse(response.body)['data']
        # 返ってきたデータの数だけpin情報をDBに保存する
        pins.each do |pin|
          Pin.create(
                      pin_id: pin['id'], # Pinterestが各ピンにつけている一意なID
                      pin_url: pin['url'], # Pinterestの該当ピンに飛ぶURL
                      image_url: pin['image']['original']['url'], # 画像が保存されているURL
                      width: pin['image']['original']['width'], # 画像の幅
                      height: pin['image']['original']['height'] # 画像の高さ
                    )
        end
      end
    end
    
    그리고 돌려받은 JSON을 앞에 두면 돼요!

    [편리] 공식적으로 API 테스트 도구가 준비되어 있습니다.


    링크에서는 API의 다양한 기능을 테스트할 수 있는 API Explorer에 액세스할 수 있습니다.
    GUI에 사용해도 머리가 피곤할 때 부드러워요.편리

    이상은!

    끝말


    끝까지 읽어주셔서 감사합니다
    누군가에게 참고가 되었으면 좋겠네요

    참조된 웹 사이트(지금까지 지원해 주셔서 감사합니다)

  • 개발자를 위한 가이드라인
  • Pinterest Developers
  • 좋은 웹페이지 즐겨찾기