email_to_face 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.
- data/.gitignore +5 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/email_to_face.gemspec +28 -0
- data/lib/email_to_face.rb +66 -0
- data/lib/email_to_face/app.rb +45 -0
- data/lib/email_to_face/version.rb +3 -0
- data/spec/lib/email_to_face/app_spec.rb +35 -0
- data/spec/lib/email_to_face_spec.rb +49 -0
- data/spec/spec_helper.rb +2 -0
- metadata +134 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "email_to_face/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "email_to_face"
|
7
|
+
s.version = EmailToFace::VERSION
|
8
|
+
s.authors = ["Julian Tescher"]
|
9
|
+
s.email = ["jatescher@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{ Email to user image tool }
|
12
|
+
s.description = %q{ A way to simply obtain a facebook, or gravatar image from an email. }
|
13
|
+
|
14
|
+
s.rubyforge_project = "email_to_face"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
# specify any dependencies here; for example:
|
22
|
+
s.add_development_dependency "rspec"
|
23
|
+
|
24
|
+
# s.add_runtime_dependency "rest-client"
|
25
|
+
s.add_runtime_dependency "json"
|
26
|
+
s.add_runtime_dependency "typhoeus"
|
27
|
+
s.add_runtime_dependency "face"
|
28
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require "json"
|
2
|
+
require 'typhoeus'
|
3
|
+
require 'face'
|
4
|
+
require "email_to_face/version"
|
5
|
+
require 'email_to_face/app'
|
6
|
+
|
7
|
+
module EmailToFace
|
8
|
+
class Facebook
|
9
|
+
|
10
|
+
def self.init(fb_access_token)
|
11
|
+
@access_token = fb_access_token
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.user_image(email)
|
15
|
+
begin
|
16
|
+
# Query the graph for the user e.g. email@gmail.com&type=user&access_token=token
|
17
|
+
uri = URI.encode("https://graph.facebook.com/search?q=#{email}&type=user&access_token=#{@access_token}")
|
18
|
+
response = Typhoeus::Request.get(uri, :disable_ssl_peer_verification => true)
|
19
|
+
result = JSON.parse(response.body)
|
20
|
+
rescue Exception => e
|
21
|
+
puts e.inspect
|
22
|
+
return nil
|
23
|
+
end
|
24
|
+
|
25
|
+
# Raise error if one is returned
|
26
|
+
raise result["error"]["message"] if result["error"]
|
27
|
+
|
28
|
+
# Return either the url, or nil
|
29
|
+
result['data'] == [] ? nil : "https://graph.facebook.com/#{result['data'][0]['id']}/picture?type=large"
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
class Gravatar
|
35
|
+
|
36
|
+
def self.user_image(email)
|
37
|
+
begin
|
38
|
+
uri = URI.encode("http://www.gravatar.com/avatar.php?gravatar_id=#{Digest::MD5::hexdigest(email)}&d=404")
|
39
|
+
response = Typhoeus::Request.get(uri)
|
40
|
+
response.code == 200 ? uri : nil
|
41
|
+
rescue Exception => e
|
42
|
+
puts e.inspect
|
43
|
+
return nil
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
class FaceAPI
|
50
|
+
|
51
|
+
def self.init(face_api_key, face_api_secret)
|
52
|
+
@client = Face.get_client(:api_key => face_api_key, :api_secret => face_api_secret)
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.get_center(url)
|
56
|
+
begin
|
57
|
+
result = @client.faces_detect(:urls => url)
|
58
|
+
result['photos'][0]['tags'].empty? ? nil : result['photos'][0]['tags'][0]['center']
|
59
|
+
rescue Exception => e
|
60
|
+
puts e.inspect
|
61
|
+
return nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module EmailToFace
|
2
|
+
class App
|
3
|
+
attr_accessor :fb_init, :face_init
|
4
|
+
|
5
|
+
def initialize(options={})
|
6
|
+
|
7
|
+
# Initialize Facebook if params present
|
8
|
+
if options[:facebook_user_token]
|
9
|
+
Facebook.init(options[:facebook_user_token])
|
10
|
+
@fb_init = true
|
11
|
+
end
|
12
|
+
|
13
|
+
# Initialize Face.com API if params present
|
14
|
+
if options[:face_api_key] and options[:face_api_secret]
|
15
|
+
FaceAPI.init(options[:face_api_key], options[:face_api_secret])
|
16
|
+
@face_init = true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def convert(email)
|
21
|
+
raise ArgumentError, "must pass a valid email address" if email.nil? or !email.match(/^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i)
|
22
|
+
|
23
|
+
# First query facebook if initialized
|
24
|
+
if @fb_init
|
25
|
+
image_url = Facebook.user_image(email)
|
26
|
+
end
|
27
|
+
|
28
|
+
# If not found and twitter is initialized
|
29
|
+
if image_url.nil?
|
30
|
+
image_url = Gravatar.user_image(email)
|
31
|
+
end
|
32
|
+
|
33
|
+
# If still no image found, return nil
|
34
|
+
return nil if image_url.nil?
|
35
|
+
|
36
|
+
# If present, grab face x,y from face.com
|
37
|
+
if @face_init
|
38
|
+
xy = FaceAPI.get_center(image_url)
|
39
|
+
{ :url => image_url, :x => xy['x'], :y => xy['y'] }
|
40
|
+
else
|
41
|
+
{ :url => image_url }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EmailToFace::App do
|
4
|
+
before :all do
|
5
|
+
@app = EmailToFace::App.new(
|
6
|
+
:facebook_user_token => ENV['FB_USER_TOKEN'],
|
7
|
+
:face_api_key => ENV['FACE_API_KEY'],
|
8
|
+
:face_api_secret => ENV['FACE_API_SECRET'])
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#convert" do
|
12
|
+
it "should raise an error if email is nil or malformed" do
|
13
|
+
expect { @app.convert(nil) } .to raise_error(ArgumentError)
|
14
|
+
expect { @app.convert('@email.com') } .to raise_error(ArgumentError)
|
15
|
+
expect { @app.convert('good@email.com') } .to_not raise_error(ArgumentError)
|
16
|
+
end
|
17
|
+
context 'for facebook' do
|
18
|
+
it "should return an object with a url and center x,y if valid" do
|
19
|
+
result = @app.convert("pat2man@gmail.com")
|
20
|
+
result[:url].should == 'https://graph.facebook.com/518026574/picture?type=large'
|
21
|
+
result[:x].should == 48.89
|
22
|
+
result[:y].should == 42.29
|
23
|
+
end
|
24
|
+
end
|
25
|
+
context 'for gravatar' do
|
26
|
+
it "should return an object with a url and center x,y if valid" do
|
27
|
+
result = @app.convert("virulent@gmail.com")
|
28
|
+
result[:url].should == 'http://www.gravatar.com/avatar.php?gravatar_id=c44b0f24cfce9aacc7c1969c5666cfae&d=404'
|
29
|
+
result[:x].should == 30.63
|
30
|
+
result[:y].should == 60.63
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EmailToFace::Facebook do
|
4
|
+
before :each do
|
5
|
+
@app = EmailToFace::App.new(
|
6
|
+
:facebook_user_token => ENV['FB_USER_TOKEN'],
|
7
|
+
:face_api_key => ENV['FACE_API_KEY'],
|
8
|
+
:face_api_secret => ENV['FACE_API_SECRET'])
|
9
|
+
end
|
10
|
+
|
11
|
+
describe ".user_image" do
|
12
|
+
it "returns the url for the Facebook user's image if it exists" do
|
13
|
+
EmailToFace::Facebook.user_image('pat2man@gmail.com').should == 'https://graph.facebook.com/518026574/picture?type=large'
|
14
|
+
end
|
15
|
+
|
16
|
+
it "returns nil if the user does not exist" do
|
17
|
+
EmailToFace::Facebook.user_image('notanemail').should be_nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe EmailToFace::Gravatar do
|
23
|
+
describe ".user_image" do
|
24
|
+
it "returns the url for the user's image if it exists" do
|
25
|
+
EmailToFace::Gravatar.user_image('virulent@gmail.com').should == 'http://www.gravatar.com/avatar.php?gravatar_id=c44b0f24cfce9aacc7c1969c5666cfae&d=404'
|
26
|
+
end
|
27
|
+
|
28
|
+
it "returns nil if the user does not exist" do
|
29
|
+
EmailToFace::Gravatar.user_image('notanemail').should be_nil
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe EmailToFace::FaceAPI do
|
35
|
+
before :each do
|
36
|
+
@app = EmailToFace::App.new(
|
37
|
+
:facebook_user_token => ENV['FB_USER_TOKEN'],
|
38
|
+
:face_api_key => ENV['FACE_API_KEY'],
|
39
|
+
:face_api_secret => ENV['FACE_API_SECRET'])
|
40
|
+
end
|
41
|
+
|
42
|
+
describe ".get_center" do
|
43
|
+
it "returns the proper face.com response" do
|
44
|
+
result = EmailToFace::FaceAPI.get_center('https://graph.facebook.com/10736346/picture?type=large')
|
45
|
+
result.should == {"x"=>48.89, "y"=>38.1}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: email_to_face
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Julian Tescher
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-09-13 00:00:00 -07:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rspec
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :development
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: json
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: typhoeus
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
type: :runtime
|
62
|
+
version_requirements: *id003
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: face
|
65
|
+
prerelease: false
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
hash: 3
|
72
|
+
segments:
|
73
|
+
- 0
|
74
|
+
version: "0"
|
75
|
+
type: :runtime
|
76
|
+
version_requirements: *id004
|
77
|
+
description: " A way to simply obtain a facebook, or gravatar image from an email. "
|
78
|
+
email:
|
79
|
+
- jatescher@gmail.com
|
80
|
+
executables: []
|
81
|
+
|
82
|
+
extensions: []
|
83
|
+
|
84
|
+
extra_rdoc_files: []
|
85
|
+
|
86
|
+
files:
|
87
|
+
- .gitignore
|
88
|
+
- Gemfile
|
89
|
+
- Rakefile
|
90
|
+
- email_to_face.gemspec
|
91
|
+
- lib/email_to_face.rb
|
92
|
+
- lib/email_to_face/app.rb
|
93
|
+
- lib/email_to_face/version.rb
|
94
|
+
- spec/lib/email_to_face/app_spec.rb
|
95
|
+
- spec/lib/email_to_face_spec.rb
|
96
|
+
- spec/spec_helper.rb
|
97
|
+
has_rdoc: true
|
98
|
+
homepage: ""
|
99
|
+
licenses: []
|
100
|
+
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
|
104
|
+
require_paths:
|
105
|
+
- lib
|
106
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
hash: 3
|
112
|
+
segments:
|
113
|
+
- 0
|
114
|
+
version: "0"
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
hash: 3
|
121
|
+
segments:
|
122
|
+
- 0
|
123
|
+
version: "0"
|
124
|
+
requirements: []
|
125
|
+
|
126
|
+
rubyforge_project: email_to_face
|
127
|
+
rubygems_version: 1.6.1
|
128
|
+
signing_key:
|
129
|
+
specification_version: 3
|
130
|
+
summary: Email to user image tool
|
131
|
+
test_files:
|
132
|
+
- spec/lib/email_to_face/app_spec.rb
|
133
|
+
- spec/lib/email_to_face_spec.rb
|
134
|
+
- spec/spec_helper.rb
|