Skip to content

Instantly share code, notes, and snippets.

@malev
Created March 31, 2014 21:08
Show Gist options
  • Save malev/9902323 to your computer and use it in GitHub Desktop.
Save malev/9902323 to your computer and use it in GitHub Desktop.
Generalize
require 'csv'
require 'json'
require 'uri'
require 'ostruct'
require 'httparty'
require 'progressbar'
require 'people'
class OutputCSV
attr_reader :filename
def initialize(filename)
@filename = filename
end
def store(rows)
CSV.open(filename, 'wb') do |csv|
rows.each { |row| csv << row }
end
end
end
class NameHandler
def initialize(filename)
@csv = CSV.read(filename, headers: true)
@np = People::NameParser.new
end
def names_list
@csv.map do |row|
first_and_middle_initial = row['EMPLOYEE FIRST NAME AND MIDDLE INITIAL']
last_name = row['EMPLOYEE LAST NAME']
if first_and_middle_initial && last_name
person = OpenStruct.new
person.first_and_middle_initial = first_and_middle_initial
person.last_name = last_name
person.parsed_name = @np.parse(first_and_middle_initial + " " + last_name)
person.checkeable_name = checkeable_name(person.parsed_name)
person
end
end.compact
end
def checkeable_name(parsed_name)
if parsed_name[:first].length > 1
parsed_name[:first]
else
parsed_name[:middle]
end
end
end
def build_query(names)
URI.escape(names[0..15].each_with_index.map {|name, i| "name[#{i}]=#{name}"}.join("&"))
end
thread_list = []
output_csv = OutputCSV.new('output.csv')
name_handler = NameHandler.new('guess-gender.csv')
puts "Starting talking with api"
name_handler.names_list.each_slice(10) do |group_names|
thread_list << Thread.new do
checkeable_names = group_names.map { |name| name.checkeable_name }
query_uri = "http://api.genderize.io?#{build_query(checkeable_names)}"
begin
response = HTTParty.get(query_uri)
rescue Timeout::Error
puts "FAILED FOR: #{checkeable_names}"
end
puts query_uri
if response.status == 200
parsed_response = JSON.parse(response.body)
output_csv.store(parsed_name.values)
else
puts "FAILED FOR: #{checkeable_names}"
end
end
end
thread_list.each { |x| x.join }
@malev
Copy link
Author

malev commented Mar 31, 2014

genderize.io sucks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment