contacts 1.2.1 → 1.2.2
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/README +3 -0
- data/lib/contacts/aol.rb +19 -21
- data/lib/contacts/base.rb +3 -3
- data/lib/contacts/hotmail.rb +1 -1
- data/lib/contacts/yahoo.rb +1 -1
- metadata +4 -4
data/README
CHANGED
@@ -42,6 +42,9 @@ See the examples/ directory.
|
|
42
42
|
* Glenn Sidney from Glenn Fu (mailto:glenn@glennfu.com) - http://glennfu.com
|
43
43
|
* Brian McQuay from Onomojo (mailto:brian@onomojo.com) - http://onomojo.com
|
44
44
|
* Adam Hunter (mailto:adamhunter@me.com) - http://adamhunter.me/
|
45
|
+
* Glenn Ford (mailto:glenn@glennfu.com) - http://www.glennfu.com/
|
46
|
+
* Leonardo Wong (mailto:mac@boy.name)
|
47
|
+
* Rusty Burchfield
|
45
48
|
|
46
49
|
This library is released under the terms of the BSD.
|
47
50
|
|
data/lib/contacts/aol.rb
CHANGED
@@ -1,12 +1,3 @@
|
|
1
|
-
class Hash
|
2
|
-
def to_query_string
|
3
|
-
u = ERB::Util.method(:u)
|
4
|
-
map { |k, v|
|
5
|
-
u.call(k) + "=" + u.call(v)
|
6
|
-
}.join("&")
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
1
|
class Contacts
|
11
2
|
require 'hpricot'
|
12
3
|
require 'csv'
|
@@ -53,12 +44,12 @@ class Contacts
|
|
53
44
|
"redirType" => "",
|
54
45
|
"xchk" => "false"
|
55
46
|
}
|
56
|
-
|
47
|
+
|
57
48
|
# Get this cookie and stick it in the form to confirm to Aol that your cookies work
|
58
49
|
data, resp, cookies, forward = get(URL)
|
59
50
|
postdata["stips"] = cookie_hash_from_string(cookies)["stips"]
|
60
51
|
postdata["tst"] = cookie_hash_from_string(cookies)["tst"]
|
61
|
-
|
52
|
+
|
62
53
|
data, resp, cookies, forward, old_url = get(LOGIN_REFERER_URL, cookies) + [URL]
|
63
54
|
until forward.nil?
|
64
55
|
data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
|
@@ -68,19 +59,19 @@ class Contacts
|
|
68
59
|
until forward.nil?
|
69
60
|
data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
|
70
61
|
end
|
71
|
-
|
62
|
+
|
72
63
|
doc = Hpricot(data)
|
73
64
|
(doc/:input).each do |input|
|
74
65
|
postdata["usrd"] = input.attributes["value"] if input.attributes["name"] == "usrd"
|
75
66
|
end
|
76
67
|
# parse data for <input name="usrd" value="2726212" type="hidden"> and add it to the postdata
|
77
|
-
|
68
|
+
|
78
69
|
postdata["SNS_SC"] = cookie_hash_from_string(cookies)["SNS_SC"]
|
79
70
|
postdata["SNS_LDC"] = cookie_hash_from_string(cookies)["SNS_LDC"]
|
80
71
|
postdata["LTState"] = cookie_hash_from_string(cookies)["LTState"]
|
81
72
|
# raise data.inspect
|
82
73
|
|
83
|
-
data, resp, cookies, forward, old_url = post(LOGIN_URL, postdata
|
74
|
+
data, resp, cookies, forward, old_url = post(LOGIN_URL, h_to_query_string(postdata), cookies, LOGIN_REFERER_URL) + [LOGIN_REFERER_URL]
|
84
75
|
|
85
76
|
until forward.nil?
|
86
77
|
data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
|
@@ -97,20 +88,20 @@ class Contacts
|
|
97
88
|
elsif cookies == ""
|
98
89
|
raise ConnectionError, PROTOCOL_ERROR
|
99
90
|
end
|
100
|
-
|
91
|
+
|
101
92
|
@cookies = cookies
|
102
93
|
end
|
103
|
-
|
94
|
+
|
104
95
|
def contacts
|
105
96
|
postdata = {
|
106
97
|
"file" => 'contacts',
|
107
98
|
"fileType" => 'csv'
|
108
99
|
}
|
109
|
-
|
100
|
+
|
110
101
|
return @contacts if @contacts
|
111
102
|
if connected?
|
112
103
|
data, resp, cookies, forward, old_url = get(CONTACT_LIST_URL, @cookies, CONTACT_LIST_URL) + [CONTACT_LIST_URL]
|
113
|
-
|
104
|
+
|
114
105
|
until forward.nil?
|
115
106
|
data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
|
116
107
|
end
|
@@ -118,7 +109,7 @@ class Contacts
|
|
118
109
|
if resp.code_type != Net::HTTPOK
|
119
110
|
raise ConnectionError, self.class.const_get(:PROTOCOL_ERROR)
|
120
111
|
end
|
121
|
-
|
112
|
+
|
122
113
|
# parse data and grab <input name="user" value="8QzMPIAKs2" type="hidden">
|
123
114
|
doc = Hpricot(data)
|
124
115
|
(doc/:input).each do |input|
|
@@ -126,7 +117,7 @@ class Contacts
|
|
126
117
|
end
|
127
118
|
|
128
119
|
data, resp, cookies, forward, old_url = get(CONTACT_LIST_CSV_URL, @cookies, CONTACT_LIST_URL) + [CONTACT_LIST_URL]
|
129
|
-
|
120
|
+
|
130
121
|
until forward.nil?
|
131
122
|
data, resp, cookies, forward, old_url = get(forward, cookies, old_url) + [forward]
|
132
123
|
end
|
@@ -147,7 +138,14 @@ class Contacts
|
|
147
138
|
["#{person[0]} #{person[1]}", person[4]] if person[4] && !person[4].empty?
|
148
139
|
end.compact
|
149
140
|
end
|
141
|
+
|
142
|
+
def h_to_query_string(hash)
|
143
|
+
u = ERB::Util.method(:u)
|
144
|
+
hash.map { |k, v|
|
145
|
+
u.call(k) + "=" + u.call(v)
|
146
|
+
}.join("&")
|
147
|
+
end
|
150
148
|
end
|
151
|
-
|
149
|
+
|
152
150
|
TYPES[:aol] = Aol
|
153
151
|
end
|
data/lib/contacts/base.rb
CHANGED
@@ -9,7 +9,7 @@ require "erb"
|
|
9
9
|
|
10
10
|
class Contacts
|
11
11
|
TYPES = {}
|
12
|
-
VERSION = "1.2.
|
12
|
+
VERSION = "1.2.2"
|
13
13
|
|
14
14
|
class Base
|
15
15
|
def initialize(login, password)
|
@@ -167,14 +167,14 @@ class Contacts
|
|
167
167
|
|
168
168
|
def uncompress(resp, data)
|
169
169
|
case resp.response['content-encoding']
|
170
|
-
when 'gzip'
|
170
|
+
when 'gzip'
|
171
171
|
gz = Zlib::GzipReader.new(StringIO.new(data))
|
172
172
|
data = gz.read
|
173
173
|
gz.close
|
174
174
|
resp.response['content-encoding'] = nil
|
175
175
|
# FIXME: Not sure what Hotmail was feeding me with their 'deflate',
|
176
176
|
# but the headers definitely were not right
|
177
|
-
when 'deflate'
|
177
|
+
when 'deflate'
|
178
178
|
data = Zlib::Inflate.inflate(data)
|
179
179
|
resp.response['content-encoding'] = nil
|
180
180
|
end
|
data/lib/contacts/hotmail.rb
CHANGED
data/lib/contacts/yahoo.rb
CHANGED
@@ -94,7 +94,7 @@ class Contacts
|
|
94
94
|
|
95
95
|
def parse(data, options={})
|
96
96
|
@contacts ||= []
|
97
|
-
if data =~ /var InitialContacts = (\[.*?\])
|
97
|
+
if data =~ /var InitialContacts = (\[.*?\]);/
|
98
98
|
@contacts += Contacts.parse_json($1).select{|contact|!contact["email"].to_s.empty?}.map{|contact|[contact["contactName"], contact["email"]]}
|
99
99
|
elsif data =~ /^\{"response":/
|
100
100
|
@contacts += Contacts.parse_json(data)["response"]["ResultSet"]["Contacts"].to_a.select{|contact|!contact["email"].to_s.empty?}.map{|contact|[contact["contactName"], contact["email"]]}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: contacts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lucas Carlson
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2010-01-20 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 1.1.1
|
34
34
|
version:
|
35
|
-
description: A universal interface to grab contact list information from various providers including Yahoo, Gmail, Hotmail, and Plaxo.
|
35
|
+
description: A universal interface to grab contact list information from various providers including Yahoo, AOL, Gmail, Hotmail, and Plaxo.
|
36
36
|
email: lucas@rufy.com
|
37
37
|
executables: []
|
38
38
|
|
@@ -80,6 +80,6 @@ rubyforge_project:
|
|
80
80
|
rubygems_version: 1.3.5
|
81
81
|
signing_key:
|
82
82
|
specification_version: 3
|
83
|
-
summary: A universal interface to grab contact list information from various providers including Yahoo, Gmail, Hotmail, and Plaxo.
|
83
|
+
summary: A universal interface to grab contact list information from various providers including Yahoo, AOL, Gmail, Hotmail, and Plaxo.
|
84
84
|
test_files: []
|
85
85
|
|