class PhantomProxy::PhantomJS

Attributes

dom[RW]
image[RW]
ready[RW]

Public Class Methods

new() click to toggle source
# File lib/phantom_proxy/phantomjs/phantomjs.rb, line 11
def initialize()
  @ready = 503
end

Public Instance Methods

getAsImageResponse(type='png') click to toggle source
# File lib/phantom_proxy/phantomjs/phantomjs.rb, line 89
def getAsImageResponse(type='png')
  return "HTTP/1.0 200 OK\r\nConnection: close\r\nContent-Type: image/"+type+"\r\n\r\n"+@image;
end
getDOMText(data) click to toggle source
# File lib/phantom_proxy/phantomjs/phantomjs.rb, line 76
def getDOMText data
  tmp = data.split('PHANTOMJS_DOMDATA_WRITE:')[1];
  tmp = tmp.split('PHANTOMJS_DOMDATA_END')[0]
  tmp
end
getHTTPCode(data) click to toggle source
# File lib/phantom_proxy/phantomjs/phantomjs.rb, line 82
def getHTTPCode data
  tmp = data.split('URL_ERROR_CODE: ')[1];
  tmp = tmp.split('URL_ERROR_CODE_END')[0]
  #tmp = /FAILED_LOADING_URL: (.*?)FAILED_LOADING_URL_END/.match(data)[1]
  tmp.to_i
end
getUrl(url, pictureOnly=true, loadIFrames=true) click to toggle source
# File lib/phantom_proxy/phantomjs/phantomjs.rb, line 15
def getUrl(url, pictureOnly=true, loadIFrames=true)
  logger.info("PhantomJS: "+url)
  @ready = 503
  
  pictureFile = nil
  picture = "none"
  
  loadFrames = "false"
  
  if loadIFrames
    loadFrames = "true"
  end
  
  if pictureOnly
    pictureFile = Tempfile.new(["phantom_proxy_page", ".png"])
    picture = pictureFile.path
  end
  
  url_args = ""
  url_args_ = []
  
  if /\?/.match(url)
    url_args = url.split('?')[1]
    url = url.split('?')[0]
    
    if url_args
      url_args_ = url_args.split('&')
      url_args = url_args_.join(' ')
    end
  end
  
  @dom = invokePhantomJS(PhantomProxy.script_path, [picture, loadFrames, "\""+url+"\"", url_args_.length, url_args])
  
  # logger.info("Opened page: "+ /Open page: (.*?) END/.match(@dom)[1])
  
  @ready = 503
  dom_text = "Failed to load page"
  
  if /DONE_LOADING_URL/.match(@dom)
    logger.info("LOAD_DOM_TEXT")
    dom_text = getDOMText @dom
    logger.info("LOAD_DOM_TEXT_DONE")
    if pictureOnly && File.exist?(picture) 
      logger.info("File is there")
      @image = File.open(picture, "rb")# {|f| f.read }
      pictureFile.close!
    else
      logger.info("No file to load at: "+picture)
      @image = ""
    end
    @ready = 200
  end
  if /URL_ERROR_CODE/.match(@dom)
    logger.info("LOAD_ERROR_CODE")
    @ready = getHTTPCode @dom
    logger.info("LOAD_ERROR_CODE_DONE: #{@ready}")
  end
  @dom = dom_text
  return @dom
end
invokePhantomJS(script, args) click to toggle source
# File lib/phantom_proxy/phantomjs/phantomjs.rb, line 93
def invokePhantomJS(script, args)
  argString = " "+args.join(" ")
  logger.info("Call phantomJS with: "+argString)
  out = ""

  IO.popen(PhantomProxy.phantomjs_bin+" --ignore-ssl-errors=yes --web-security=false "+script+argString) {|io|
    out = io.readlines.join
  }
  #logger.info("PHANTOMJS_OUT: "+out)
  return out
end