Skip to content

Instantly share code, notes, and snippets.

@malev
Created March 31, 2014 21:08
Show Gist options
  • Select an option

  • Save malev/9902323 to your computer and use it in GitHub Desktop.

Select an option

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

malev commented Mar 31, 2014

Copy link
Copy Markdown
Author

genderize.io sucks!

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