class SocialNet::Instagram::Api::ScrapeUserVideosRequest

Public Class Methods

new(attrs = {}) click to toggle source
# File lib/social_net/instagram/api/scrape_user_videos_request.rb, line 11
def initialize(attrs = {})
  @host = 'www.instagram.com'
  @path = attrs.fetch :path, "/#{attrs[:username]}/"
  @method = attrs.fetch :method, :get
end

Public Instance Methods

run() click to toggle source
# File lib/social_net/instagram/api/scrape_user_videos_request.rb, line 17
def run
  print "#{as_curl}\n"
  case response = run_http_request
  when Net::HTTPOK
    data_string = Nokogiri::HTML response.body
    parse_video_data data_string
  else
    raise Errors::ResponseError, response
  end
end

Private Instance Methods

as_curl() click to toggle source
# File lib/social_net/instagram/api/scrape_user_videos_request.rb, line 55
def as_curl
  'curl'.tap do |curl|
    curl <<  " -X #{http_request.method}"
    curl << %Q{ -d '#{http_request.body}'} if http_request.body
    curl << %Q{ "#{@uri.to_s}"}
  end
end
http_request() click to toggle source
# File lib/social_net/instagram/api/scrape_user_videos_request.rb, line 35
def http_request
  http_class = "Net::HTTP::#{@method.capitalize}".constantize
  @http_request ||= http_class.new(uri.request_uri)
end
parse_video_data(data) click to toggle source
# File lib/social_net/instagram/api/scrape_user_videos_request.rb, line 44
def parse_video_data(data)
  data_string = data.search("script")[4].children.first
  shortcodes = data_string.content.gsub(/window\._sharedData = /,"").gsub(/\\/,'').delete('\\"').scan(/shortcode:([\w_-]{10,39})/).flatten
  [].tap do |videos|
    shortcodes.each do |shortcode|
      video = Models::Video.find_by shortcode: shortcode
      videos << video
    end
  end.compact
end
run_http_request() click to toggle source
# File lib/social_net/instagram/api/scrape_user_videos_request.rb, line 29
def run_http_request
  Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
    http.request http_request
  end
end
uri() click to toggle source
# File lib/social_net/instagram/api/scrape_user_videos_request.rb, line 40
def uri
  @uri ||= URI::HTTPS.build host: @host, path: @path
end