hummingbird-me/kitsu-server

View on GitHub
app/services/youtube_service/client.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
class YoutubeService
  class Client
    API_PREFIX = 'https://www.googleapis.com'.freeze
    CHANNEL_URL = Addressable::Template.new(
      "#{API_PREFIX}/youtube/v3/channels{?query*}"
    ).freeze
    VERIFY_URL = Addressable::Template.new(
      "#{API_PREFIX}/oauth2/v3/tokeninfo{?query*}"
    ).freeze

    attr_reader :token

    def initialize(token, api_key: nil)
      @token = token
      @api_key = api_key
    end

    def valid?
      res = HTTP.get(VERIFY_URL.expand(query: { access_token: token }))
      res.status.success? && JSON.parse(res.body)['aud'] == api_key
    end

    def channel_id
      res = HTTP.get(CHANNEL_URL.expand(query: {
        part: 'id',
        mine: 'true',
        access_token: token
      }))
      return unless res.status.success?
      channels = JSON.parse(res.body)['items']
      channels.first['id']
    end

    private

    def api_key
      @api_key || ENV['YOUTUBE_API_KEY']
    end
  end
end