email-spy 0.0.3 → 0.0.4

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 CHANGED
@@ -18,4 +18,4 @@ _yardoc
18
18
  doc/
19
19
 
20
20
  # 测试数据
21
- spec/fixture
21
+ spec/fixture/*.yml
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- email-spy (0.0.2)
4
+ email-spy (0.0.4)
5
5
  gdata_19 (~> 1.1.5)
6
6
  httpclient (~> 2.2.5)
7
7
  mechanize (~> 2.5.1)
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  email-spy
2
2
  =========
3
3
 
4
-
5
4
  Usage
6
5
  -----
7
6
 
@@ -18,4 +17,25 @@ Current Supported Email Type
18
17
  + gmail
19
18
  + hotmail
20
19
  + 126
21
- + yahoo
20
+ + 163
21
+ + yahoo
22
+
23
+
24
+ Encoding
25
+ --------
26
+
27
+ 我们尚未对联系人姓名编码进行什么处理,应为我们觉得这会使Email Spy不够纯粹:它只返回web server响应的内容。也许之后会支持?:alien:
28
+
29
+ 我们推荐 rCharDet19(https://github.com/oleander/rchardet) 来帮助你解决编码的问题:
30
+
31
+ ```ruby
32
+ EmailSpy.fetch(account,password,emailtype).map do |c|
33
+ c.name.encode('utf-8',CharDet.detect(c.name).encoding)
34
+ end
35
+ ```
36
+
37
+ Change Log
38
+ ----------
39
+
40
+ + 0.0.3 first release
41
+ + 0.0.4 支持163
data/email-spy.gemspec CHANGED
@@ -4,7 +4,7 @@ require File.expand_path('../lib/email-spy/version', __FILE__)
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'email-spy'
6
6
  s.version = EmailSpy::VERSION
7
- s.date = '2012-07-30'
7
+ s.date = '2012-08-17'
8
8
  s.summary = ""
9
9
  s.description = "Retrieves contact list of email"
10
10
  s.authors = ["Wade Xing"]
data/lib/email-spy.rb CHANGED
@@ -17,6 +17,7 @@ require 'email-spy/errors'
17
17
  require 'email-spy/gmail'
18
18
  require "email-spy/hotmail"
19
19
  require "email-spy/126"
20
+ require "email-spy/163"
20
21
  require "email-spy/yahoo"
21
22
 
22
23
  module EmailSpy
@@ -24,7 +25,7 @@ module EmailSpy
24
25
  # @param [String] 邀请人电邮地址
25
26
  # @param [String] 邀请人电邮密码
26
27
  # @param [String] 邮件类型
27
- # @param [Array<EmailSay::Contact>] 联系人集合
28
+ # @return [Array<EmailSay::Contact>] 联系人集合
28
29
  def self.fetch invitor_email_address,invitor_email_password,email_type
29
30
  self.const_get(operating_klass_name email_type).fetch invitor_email_address,invitor_email_password
30
31
  end
@@ -0,0 +1,60 @@
1
+ # -*- coding: utf-8 -*-
2
+ module EmailSpy
3
+ class OneSixThree
4
+
5
+ # 登录页
6
+ LANDING_PAGE_URL = 'http://mail.163.com'
7
+
8
+ # 联系人 URL 模板
9
+ Contacts_URL = "http://g4a30.mail.163.com/jy3/address/addrlist.jsp?sid=%s&gid=all"
10
+
11
+ def self.fetch invitor_email_address,invitor_email_password
12
+ self.new(invitor_email_address,invitor_email_password).contacts
13
+ end
14
+
15
+
16
+ def initialize invitor_email_address,invitor_email_password
17
+ @invitor_email_address = invitor_email_address
18
+ @invitor_email_password = invitor_email_password
19
+ @agent = Mechanize.new
20
+ end
21
+
22
+ # 通讯录联系人
23
+ # @return [Array<EmailSpy::Contract>]
24
+ def contacts
25
+ body = @agent.get(Contacts_URL % sid).body
26
+ contacts = []
27
+
28
+ Nokogiri::HTML(body).xpath(".//*[@id='addrstable']/tbody[1]/tr").each do |tr|
29
+ contacts << Contact.new(tr.css(".Ibx_Td_addrName a").text,
30
+ tr.css(".Ibx_Td_addrEmail a").text)
31
+ end
32
+
33
+ contacts
34
+ end
35
+
36
+ private
37
+
38
+ # 登录
39
+ # @return [String] SID
40
+ def sid
41
+ page = @agent.get(LANDING_PAGE_URL)
42
+ login_form = page.forms[0]
43
+ login_form.action= 'http://reg.163.com/login.jsp'
44
+ login_form.add_field!('type',1)
45
+ login_form.add_field!('product','mail163')
46
+ login_form.add_field!('url' ,URI.encode("http://entry.mail.163.com/cgi/ntesdoor?hid=10010102&lightweight=1&language=0&style=3"))
47
+ login_form.username ,login_form.password = @invitor_email_address,@invitor_email_password
48
+ page = login_form.submit(login_form.buttons.first)
49
+ page1 = login_form.click_button
50
+ page2 = page1.links[0].click
51
+
52
+ page3 = @agent.get('http://entry.mail.163.com/cgi/ntesdoor?verifycookie=1&lightweight=1&style=-1')
53
+ page3.uri.to_s.scan(/sid=(\S+)/).first[0]
54
+ end
55
+ end
56
+
57
+ private
58
+
59
+ EMAIL_TYPE['163'] = "OneSixThree"
60
+ end
@@ -1,3 +1,3 @@
1
1
  module EmailSpy
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
data/spec/163_spec.rb ADDED
@@ -0,0 +1,6 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe "163" do
5
+ it_should_behave_like "fetch A contact list","163"
6
+ end
@@ -0,0 +1,13 @@
1
+ # 文件名约定为EMAIL_TYPE的key.yml
2
+
3
+ # 目标邮箱的 地址和密码
4
+ invitor email: email-address@domain.com
5
+ invitor password: password
6
+
7
+ # 联系人中的一个
8
+ contact:
9
+ name: contact name
10
+ email: contact-address@domain.com
11
+
12
+ # 联系人总数
13
+ contacts count: N
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: email-spy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-30 00:00:00.000000000Z
12
+ date: 2012-08-17 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httpclient
16
- requirement: &70298431184880 !ruby/object:Gem::Requirement
16
+ requirement: &70365808763600 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.2.5
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70298431184880
24
+ version_requirements: *70365808763600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: nokogiri
27
- requirement: &70298431184380 !ruby/object:Gem::Requirement
27
+ requirement: &70365808763080 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.5.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70298431184380
35
+ version_requirements: *70365808763080
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: gdata_19
38
- requirement: &70298431183920 !ruby/object:Gem::Requirement
38
+ requirement: &70365808762560 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.1.5
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70298431183920
46
+ version_requirements: *70365808762560
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: mechanize
49
- requirement: &70298431183400 !ruby/object:Gem::Requirement
49
+ requirement: &70365808762000 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.5.1
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70298431183400
57
+ version_requirements: *70365808762000
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &70298431182860 !ruby/object:Gem::Requirement
60
+ requirement: &70365808761480 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: 2.11.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70298431182860
68
+ version_requirements: *70365808761480
69
69
  description: Retrieves contact list of email
70
70
  email:
71
71
  - iamxingxing@gmail.com
@@ -83,6 +83,7 @@ files:
83
83
  - email-spy.gemspec
84
84
  - lib/email-spy.rb
85
85
  - lib/email-spy/126.rb
86
+ - lib/email-spy/163.rb
86
87
  - lib/email-spy/contact.rb
87
88
  - lib/email-spy/email_types.rb
88
89
  - lib/email-spy/errors.rb
@@ -91,7 +92,9 @@ files:
91
92
  - lib/email-spy/version.rb
92
93
  - lib/email-spy/yahoo.rb
93
94
  - spec/126_spec.rb
95
+ - spec/163_spec.rb
94
96
  - spec/email-spy_spec.rb
97
+ - spec/fixture/email_type.yml.sample
95
98
  - spec/gmail_spec.rb
96
99
  - spec/hotmail_spec.rb
97
100
  - spec/spec_helper.rb
@@ -122,7 +125,9 @@ specification_version: 3
122
125
  summary: ''
123
126
  test_files:
124
127
  - spec/126_spec.rb
128
+ - spec/163_spec.rb
125
129
  - spec/email-spy_spec.rb
130
+ - spec/fixture/email_type.yml.sample
126
131
  - spec/gmail_spec.rb
127
132
  - spec/hotmail_spec.rb
128
133
  - spec/spec_helper.rb