piplrequest 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/piplrequest.rb +114 -0
  3. metadata +45 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3b21fcc4f7921a78f6b406126892148bd11e8b10
4
+ data.tar.gz: f833372e9913f6b70071958bf36e2c1e7a6d3d94
5
+ SHA512:
6
+ metadata.gz: 2afc16953e9cb0fc8cc58a0dc0d1e4fb7e44acead6643085e04f17fcf9eccd8dd1e023d553dacb912625151d181b74fe35c02a0bf50d5904d348715410012f20
7
+ data.tar.gz: fc75c71d10bdab306c8d5d6783d0256018dede5ec897f6c4ae1d5918e33bfd0382d6153d2ac4cea56016e4cfeabb9d04b9841ebf517302be30af02a88fe9103a
@@ -0,0 +1,114 @@
1
+ require 'pipl'
2
+ require 'pry'
3
+ require 'geocoder'
4
+
5
+ class PiplRequest
6
+ def initialize(api_key, fields_to_use)
7
+ @api_key = api_key
8
+ @fields_to_use = fields_to_use
9
+ configure_pipl
10
+ end
11
+
12
+ # Sets Pipl API settings globally
13
+ def configure_pipl
14
+ Pipl.configure do |c|
15
+ c.api_key = @api_key
16
+ c.show_sources = 'all'
17
+ c.minimum_probability = 0.7
18
+ c.minimum_match = 0.5
19
+ c.strict_validation = true
20
+ end
21
+ end
22
+
23
+ # Gets the data
24
+ def get_data(data_item)
25
+ return process_output(send_request(build_person(data_item)))
26
+ end
27
+
28
+ # Sends the request
29
+ def send_request(person)
30
+ response = Pipl::client.search person: person, pretty: true, hide_sponsored: true, show_sources: "all"
31
+ end
32
+
33
+ # Process the output
34
+ def process_output(response)
35
+ personout = Array.new
36
+
37
+ # Handle both single persons and possible_persons response
38
+ if response.person
39
+ personout.push(response.person.to_hash)
40
+ elsif response.possible_persons
41
+ response.possible_persons.each{|r| personout.push(r.to_hash)}
42
+ end
43
+
44
+ return JSON.pretty_generate(personout)
45
+ end
46
+
47
+ # Geocode location to get area in correct format
48
+ def geocode(location)
49
+ begin
50
+ # Catch Washington DC case and similar
51
+ location = "Washington D.C." if location.include?("Washington D.C.")
52
+ location = location.gsub("Area", "").gsub("Greater", "").strip.lstrip
53
+
54
+ # Geocode and get first part of response
55
+ response = Geocoder.search(location)
56
+ address_info = response.first.data["address_components"]
57
+
58
+ # Get data for each field
59
+ country = address_info.select { |i| i["types"].include?("country")}[0]["short_name"]
60
+ state = address_info.select { |i| i["types"].include?("administrative_area_level_1")}[0]["short_name"]
61
+ city = address_info.select { |i| i["types"].include?("colloquial_area") || i["types"].include?("locality")}[0]["long_name"]
62
+
63
+ return Pipl::Address.new(country: country, state: state, city: city)
64
+ rescue # Return input location if fails (default to US)
65
+ return Pipl::Address.new(country: 'US', city: location) if location && location != ","
66
+ end
67
+ end
68
+
69
+ # Clean name fields to not include extra info
70
+ def clean_name(name)
71
+ return name.split("(").first.split("/").first.strip if name
72
+ end
73
+
74
+ # Generate the name
75
+ def gen_name(data_item)
76
+ return Pipl::Name.new(first: clean_name(get_field_content(data_item, :name, :first)),
77
+ last: clean_name(get_field_content(data_item, :name, :last)))
78
+ end
79
+
80
+ # Generate the URL
81
+ def gen_url(data_item)
82
+ Pipl::Url.new(url: get_field_content(data_item, :url, :url),
83
+ domain: @fields_to_use[:url][:domain])
84
+ end
85
+
86
+ # Builds person model
87
+ def build_person(data_item)
88
+ # Initial gen and required fields
89
+ person = Pipl::Person.new
90
+ person.add_field(gen_name(data_item))
91
+
92
+ # Optional fields- only run if there
93
+ location = geocode(get_field_content(data_item, :address, :city))
94
+ person.add_field(location) if location
95
+
96
+ url = gen_url(data_item)
97
+ person.add_field(url) if url
98
+
99
+ return person
100
+ end
101
+
102
+ # Get content that should be put in field based on fields_to_use mapping
103
+ def get_field_content(data_item, field_category, field_name)
104
+ data_field = @fields_to_use[field_category][field_name]
105
+
106
+ # Merge multiple fields if provided
107
+ if data_field.is_a?(Array)
108
+ data_field.map{|d| data_item[d]}.join(", ")
109
+ else return data_item[data_field]
110
+ end
111
+ end
112
+ end
113
+
114
+ # TODO: Test with Indeed too!
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: piplrequest
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - M. C. McGrath
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-01-20 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Gets data from Pipl
14
+ email: shidash@shidash.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/piplrequest.rb
20
+ homepage: https://github.com/TransparencyToolkit/piplrequest
21
+ licenses:
22
+ - GPL
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements: []
39
+ rubyforge_project:
40
+ rubygems_version: 2.4.8
41
+ signing_key:
42
+ specification_version: 4
43
+ summary: Gets data from Pipl
44
+ test_files: []
45
+ has_rdoc: