Skip to content

Instantly share code, notes, and snippets.

@six7zero9
Created October 26, 2015 20:02
Show Gist options
  • Save six7zero9/2c5da8812f1087bf42b0 to your computer and use it in GitHub Desktop.
Save six7zero9/2c5da8812f1087bf42b0 to your computer and use it in GitHub Desktop.
require 'mysql'
require 'openssl'
require 'net/https'
require "uri"
require 'json'
# require 'sidekiq'
# class KeywordHarvestWorker
# include Sidekiq::Worker
# def perform
def getkeyword(keyword)
puts "*******************"
puts keyword
puts "*******************\n\n"
#keyword = 'keyword' (test)
encoded_url = URI.encode("http://api.keywordtool.io/v1/search/google?apikey=2657d99a11396cf65fca38ac465ef1509fb617b1&metrics=true&language=en&country=us&keyword=#{keyword}")
puts uri = URI.parse(encoded_url)
puts "\n"
begin
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = false
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(uri.request_uri)
# success or failure responses (failure response is not functioning)
response = http.request(request)
if response["error"] && response["error"]["code"] == (7)
# Wait a minute before trying again.
sleep 60
raise "Rate limited by api, retrying...\n"
else
puts "Success generating #{keyword}\n"
end
return response.body
rescue Net::ReadTimeout
puts "#ERROR timeout updating #{keyword}\n"
end
end
con = Mysql.new('lyricstats.cq4or1mqby26.us-west-2.rds.amazonaws.com', 'lyricmaster', 'lscreds888', 'keywords')
con.set_server_option Mysql::OPTION_MULTI_STATEMENTS_ON
rs = con.query "SELECT name FROM seed WHERE id < 10"
i = 0
while r = rs.fetch_row
sleep(5) if i != 0
i += 1
response = getkeyword(r)
# parse json response
json = JSON.parse(response)
json.keys.each do |string|
json[string].keys.each do |ii|
begin
row = json[string][ii].first rescue nil
next unless row
keyword = row["string"]
volume = row["volume"] || 0
cpc = row["cpc"] || 0
cmp = row["cmp"] || 0
puts "-------------------------------------------"
puts esc = Mysql.escape_string(keyword)
puts "\n"
con.query "INSERT INTO keyword (keyword, volume, cpc, cmp, keyword_source, language, country, type) VALUES ('#{esc}', #{volume}, #{cpc}, #{cmp}, 'Google', 'en', 'us', 1)"
puts "Success updating: #{esc}"
puts "\n\n"
rescue Mysql::Error => er
puts er.errno
puts er.error
end
end
end
end
# end
# end
#end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment