class Serper::Analyser

Public Class Methods

new(connection) click to toggle source
# File lib/serper/analyser.rb, line 9
def initialize(connection)
  ActiveRecord::Base.establish_connection(connection)
end

Public Instance Methods

import_keywords(file) click to toggle source
# File lib/serper/analyser.rb, line 13
def import_keywords(file)
  CSV.foreach(file) do |l|
    Keyword.find_or_create_by(:term => l[0]) do |r|
      r.pv = l[1]
      r.category = l[2]
      r.url_type = l[3]
      r.url_id = l[4]
    end
  end
end
migrate!() click to toggle source
# File lib/serper/analyser.rb, line 67
def migrate!
  ActiveRecord::Schema.define do
    create_table :serper_keywords do |t|
      t.string :term
      t.integer :pv
      t.string :category
      t.string :url_type
      t.integer :url_id

      t.timestamps

      t.index :term
    end

    create_table :serper_weights do |t|
      t.date :date
      t.string :engine
      t.integer :keyword_id
      t.string :side # Left Right
      t.string :part
      t.string :source # SEO SEM Special
      t.string :name
      t.string :site
      t.string :subdomain
      t.string :path
      t.integer :part_rank
      t.integer :side_rank
      t.float :side_weight
      t.float :weight

      t.timestamps

      t.index [:date, :engine, :keyword_id, :side, :side_rank], name: 'weights_pk_index'
    end
  end
end
run(date=Date.today,skip=true) click to toggle source
# File lib/serper/analyser.rb, line 24
def run(date=Date.today,skip=true)
  puts "Serper Analyser on #{date}"
  ENGINES.keys.each do |engine_name|
    puts engine_name
    search_engine(engine_name,date,skip)
  end
end
search_engine(engine_name,date,skip=true) click to toggle source
# File lib/serper/analyser.rb, line 32
def search_engine(engine_name,date,skip=true)
  p = ProgressBar.create(:title => "Searching #{engine_name} - #{date}", :total => Keyword.all.count, :format => '%t (%c/%C) %a %E |%w')
  Keyword.all.each do |k|
    check_exists = Weight.where(:engine => engine_name, :date => date, :keyword_id => k.id)
    if check_exists.any?
      if skip
        next
      else
        check_exists.destroy_all
      end
    end

    serp = Serper.search(engine_name,k.term)
    serp.weights.each do |w|
      Weight.create(:date => date,
                    :keyword_id => k.id,
                    :engine => engine_name,
                    :side => w[:side],
                    :part => w[:part],
                    :source => w[:type],
                    :name => w[:name],
                    :site => w[:site],
                    :subdomain => w[:subdomain],
                    :path => w[:path],
                    :part_rank => w[:part_rank],
                    :side_rank => w[:side_rank],
                    :side_weight => w[:side_weight],
                    :weight => w[:weight]
      )
    end

    p.increment
  end
end