Class: ActivePublicResources::Drivers::Youtube

Inherits:
Driver
  • Object
show all
Defined in:
lib/active_public_resources/drivers/youtube.rb

Constant Summary collapse

DRIVER_NAME =
"youtube"
API_KEY =
ENV['YOUTUBE_API_KEY']

Instance Method Summary collapse

Constructor Details

#initialize(config_options = {}) ⇒ Youtube

Returns a new instance of Youtube.



11
12
13
14
15
16
# File 'lib/active_public_resources/drivers/youtube.rb', line 11

def initialize(config_options={})
  @default_request_criteria = {}
  if config_options[:default_request_criteria]
    @default_request_criteria = config_options[:default_request_criteria]
  end
end

Instance Method Details

#perform_request(request_criteria) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/active_public_resources/drivers/youtube.rb', line 18

def perform_request(request_criteria)
  request_criteria.set_default_criteria!(@default_request_criteria)
  unless request_criteria.validate_presence(:query) || request_criteria.validate_presence(:channel)
    raise ArgumentError, "You must specify at least a query or channel"
  end

  uri = URI('https://www.googleapis.com/youtube/v3/search')
  params = {
    q: request_criteria.query,
    part: 'snippet',
    type: 'video',
    order: sort(request_criteria.sort),
    safeSearch: content_filter(request_criteria.content_filter),
    maxResults: request_criteria.per_page || 25,
    key: API_KEY
  }

  params['pageToken'] = request_criteria.page if request_criteria.page && request_criteria.page != 1
  params['userIp'] = request_criteria.remote_ip if request_criteria.remote_ip
  params['channelId'] = channel_id(request_criteria.channel_name) if channel_id(request_criteria.channel_name)

  uri.query = URI.encode_www_form(params)
  res = Net::HTTP.get_response(uri)
  results = JSON.parse(res.body)
  return video_details(request_criteria, results)
end