class PintrestApi::Core

This class is the core of the pintrest api and handles all url visiting and such

Constants

PINTREST_URL

Attributes

session[RW]

Public Class Methods

click(css) click to toggle source
# File lib/pintrest_api/core.rb, line 45
def click(css)
  @session.find(css).click
end
get_with_ajax_scroll(css_selector) click to toggle source
# File lib/pintrest_api/core.rb, line 80
def get_with_ajax_scroll(css_selector)
  old_items_count = 0
  items = []



  until (items.count === old_items_count) && items.count > 0
    old_items_count = items.count
    scroll_page if old_items_count > 0

    new_items = Nokogiri::HTML.parse(html).css css_selector
    items = new_items if old_items_count === 0 || new_items.count > old_items_count
    puts "New Count: #{items.count}\nOld Count: #{old_items_count}"
  end

  items
end
html() click to toggle source

Returns the current session’s page

# File lib/pintrest_api/core.rb, line 76
def html
  @session.body
end
new_session() click to toggle source

Create a new PhantomJS session in Capybara

# File lib/pintrest_api/core.rb, line 50
def new_session
  # Register PhantomJS (aka poltergeist) as the driver to use
  Capybara.register_driver :poltergeist do |app|
    Capybara::Poltergeist::Driver.new(app, timeout: 60, js_errors: false)
  end

  # Use CSS as the default selector for the find method
  Capybara.default_selector = :css

  # Start up a new thread
  @session = Capybara::Session.new(:poltergeist)

  # Report using a particular user agent
  @session.driver.headers = { 'User-Agent' =>
    "Mozilla/5.0 (Macintosh; Intel Mac OS X)" }

  # Return the driver's session
  @session
end
scroll_page() click to toggle source
# File lib/pintrest_api/core.rb, line 70
def scroll_page
  @session.execute_script 'window.scrollTo(0,100000)'
  sleep 2
end
session_visit(url) click to toggle source
# File lib/pintrest_api/core.rb, line 24
def session_visit(url)
  url = PINTREST_URL + url if url !~ /pinterest/

  begin
    @session.visit url
    sleep 3
  rescue Capybara::Poltergeist::TimeoutError
    puts 'Gotten blocked by pintrest waiting 2 min to try again'
    sleep 120

    session_visit url
  end
end
stream_with_ajax_scroll(css_selector) { |items| ... } click to toggle source
# File lib/pintrest_api/core.rb, line 98
def stream_with_ajax_scroll(css_selector)
  old_items_count = 0
  items = []

  until (items.count === old_items_count) && items.count > 0
    old_items_count = items.count
    scroll_page if old_items_count > 0

    items = Nokogiri::HTML.parse(html).css css_selector if old_items_count === 0 || items.count > old_items_count

    yield items[old_items_count..-1] if items.count > old_items_count

    puts "New Count: #{items.count}\nOld Count: #{old_items_count}"
  end

  items
end
visit(url) click to toggle source
# File lib/pintrest_api/core.rb, line 38
def visit(url)
  new_session
  @session.visit url
  sleep 5
  @session
end
visit_page(user_name) click to toggle source
# File lib/pintrest_api/core.rb, line 17
def visit_page(user_name)
  new_session
  @session.visit PINTREST_URL + user_name
  sleep 5
  @session
end