lonely_coder 0.1.2 → 0.1.3
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/lib/lonely_coder/mailbox.rb +124 -0
- data/lib/lonely_coder.rb +3 -2
- data/lonely_coder.gemspec +1 -1
- data/spec/cassettes/loading_conversation.yml +1200 -0
- data/spec/cassettes/loading_mailbox.yml +1030 -0
- data/spec/mailbox_spec.rb +91 -0
- metadata +9 -2
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
class OKCupid
|
4
|
+
def mailbox
|
5
|
+
@mailbox ||= Mailbox.new(@browser)
|
6
|
+
end
|
7
|
+
|
8
|
+
def conversation_for(id)
|
9
|
+
Mailbox::Conversation.by_id(id, @browser)
|
10
|
+
end
|
11
|
+
|
12
|
+
class Mailbox
|
13
|
+
class MessageSnippet
|
14
|
+
|
15
|
+
attr_accessor :profile_username, :profile_small_avatar_url, :preview, :last_date, :conversation_url
|
16
|
+
|
17
|
+
def self.from_html(html)
|
18
|
+
profile_username = html.search('a.subject').text
|
19
|
+
preview = html.search('.previewline').text
|
20
|
+
last_date = html.search('.timestamp').text
|
21
|
+
conversation_url = html.search('p:first').attribute('onclick').text.gsub('window.location=\'', '').gsub('\';','')
|
22
|
+
profile_small_avatar_url = html.search('a.photo img').attribute('src').text
|
23
|
+
|
24
|
+
self.new({
|
25
|
+
profile_username: profile_username,
|
26
|
+
preview: preview,
|
27
|
+
last_date: Date.parse(last_date),
|
28
|
+
conversation_url: conversation_url,
|
29
|
+
profile_small_avatar_url: profile_small_avatar_url
|
30
|
+
})
|
31
|
+
end
|
32
|
+
|
33
|
+
def initialize(attrs)
|
34
|
+
attrs.each do |attr, value|
|
35
|
+
self.send("#{attr}=", value)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Conversation
|
41
|
+
attr_accessor :from_profile_username, :messages
|
42
|
+
|
43
|
+
def self.by_id(id, browser)
|
44
|
+
html = browser.get("/messages?readmsg=true&threadid=#{id}&folder=1")
|
45
|
+
from_profile_username = html.search('li.to_me:first a').attribute('title').text
|
46
|
+
|
47
|
+
messages = []
|
48
|
+
|
49
|
+
html.search('#thread > li').each do |message_html|
|
50
|
+
css_class = message_html.attribute('class')
|
51
|
+
css_id = message_html.attribute('id')
|
52
|
+
|
53
|
+
if (css_class && css_class.text.match(/_me/))
|
54
|
+
if(css_id && css_id.text == 'compose')
|
55
|
+
next
|
56
|
+
else
|
57
|
+
messages << Message.from_html(message_html)
|
58
|
+
end
|
59
|
+
else
|
60
|
+
next
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
self.new({
|
65
|
+
from_profile_username: from_profile_username,
|
66
|
+
messages: messages
|
67
|
+
})
|
68
|
+
end
|
69
|
+
|
70
|
+
def initialize(attrs)
|
71
|
+
attrs.each do |attr, value|
|
72
|
+
self.send("#{attr}=", value)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class Message
|
78
|
+
attr_accessor :to_me, :from_me, :body
|
79
|
+
|
80
|
+
def self.from_html(html)
|
81
|
+
to_me = !!html.attribute('class').text.match(/to_me/)
|
82
|
+
from_me = !to_me
|
83
|
+
# time = html.search('.timestamp').text
|
84
|
+
body = html.search('.message_body').text.gsub('<br>', "\n")
|
85
|
+
|
86
|
+
self.new({
|
87
|
+
to_me: to_me,
|
88
|
+
from_me: from_me,
|
89
|
+
# time: time,
|
90
|
+
body: body
|
91
|
+
})
|
92
|
+
end
|
93
|
+
|
94
|
+
def initialize(attrs)
|
95
|
+
attrs.each do |attr, value|
|
96
|
+
self.send("#{attr}=", value)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def initialize(browser)
|
102
|
+
@browser = browser
|
103
|
+
end
|
104
|
+
|
105
|
+
def useage
|
106
|
+
html = @browser.get('/messages')
|
107
|
+
current, max = html.search('p.fullness').text.match(/([\d]+) of ([\d]+)/).captures
|
108
|
+
|
109
|
+
return { current: current.to_i, max: max.to_i }
|
110
|
+
end
|
111
|
+
|
112
|
+
def messages
|
113
|
+
@messages = []
|
114
|
+
|
115
|
+
html = @browser.get('/messages')
|
116
|
+
messages_html = html.search('#messages li')
|
117
|
+
@messages += messages_html.collect do |message|
|
118
|
+
MessageSnippet.from_html(message)
|
119
|
+
end
|
120
|
+
|
121
|
+
@messages
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
data/lib/lonely_coder.rb
CHANGED
@@ -11,7 +11,7 @@ require 'mechanize'
|
|
11
11
|
|
12
12
|
class OKCupid
|
13
13
|
BaseUrl = 'http://www.okcupid.com'
|
14
|
-
VERSION = '0.1.
|
14
|
+
VERSION = '0.1.3'
|
15
15
|
|
16
16
|
def initialize(username=nil, password=nil)
|
17
17
|
@browser = Mechanize.new
|
@@ -35,4 +35,5 @@ require 'lonely_coder/magic_constants'
|
|
35
35
|
require 'lonely_coder/profile'
|
36
36
|
require 'lonely_coder/search'
|
37
37
|
require 'lonely_coder/search_pagination_parser'
|
38
|
-
require 'lonely_coder/authentication'
|
38
|
+
require 'lonely_coder/authentication'
|
39
|
+
require 'lonely_coder/mailbox'
|
data/lonely_coder.gemspec
CHANGED