use fixed dates for messages

This commit is contained in:
Romain Bignon 2014-05-18 13:54:31 +02:00
commit b948c3247b
3 changed files with 25 additions and 25 deletions

View file

@ -21,7 +21,6 @@
import time
import datetime
from html2text import unescape
from dateutil import tz
from dateutil.parser import parse as _parse_dt
@ -152,7 +151,7 @@ class OkCBackend(BaseBackend, ICapMessages, ICapContact, ICapMessagesPost, ICapD
thread.flags = Thread.IS_DISCUSSION
with self.browser:
mails = self.browser.get_thread_mails(id, 100)
mails = self.browser.get_thread_mails(id)
my_name = self.browser.get_my_name()
child = None
@ -165,8 +164,8 @@ class OkCBackend(BaseBackend, ICapMessages, ICapContact, ICapMessagesPost, ICapD
thread.title = u'Discussion with %s' % mails['member']['pseudo']
for mail in mails['messages']:
flags = Message.IS_HTML
if parse_dt(mail['date']) > slut['lastmsg']:
flags = 0
if mail['date'] > slut['lastmsg']:
flags |= Message.IS_UNREAD
if get_profiles:
@ -181,13 +180,13 @@ class OkCBackend(BaseBackend, ICapMessages, ICapContact, ICapMessagesPost, ICapD
signature += contacts[mail['id_from']].get_text()
msg = Message(thread=thread,
id=int(time.strftime('%Y%m%d%H%M%S', parse_dt(mail['date']).timetuple())),
id=int(time.strftime('%Y%m%d%H%M%S', mail['date'].timetuple())),
title=thread.title,
sender=mail['id_from'],
receivers=[my_name if mail['id_from'] != my_name else mails['member']['pseudo']],
date=parse_dt(mail['date']),
content=unescape(mail['message']).strip(),
signature='<pre>%s</pre>' % signature,
date=mail['date'],
content=mail['message'],
signature=signature,
children=[],
flags=flags)
if child:
@ -329,7 +328,7 @@ class OkCBackend(BaseBackend, ICapMessages, ICapContact, ICapMessagesPost, ICapD
def iter_contacts(self, status=Contact.STATUS_ALL, ids=None):
with self.browser:
threads = self.browser.get_threads_list(count=100)
threads = self.browser.get_threads_list()
for thread in threads:
c = self.get_contact(thread['username'])

View file

@ -48,7 +48,7 @@ class OkCBrowser(BaseBrowser):
('http://%s/home' % DOMAIN, BasePage),
('http://%s/messages' % DOMAIN, ThreadPage),
('http://%s/messages\?compose=1' % DOMAIN, PostMessagePage),
('http://%s/messages\?.*' % DOMAIN, MessagesPage),
('http://\w+.okcupid.com/messages\?.*', MessagesPage),
('http://%s/profile/.*/photos' % DOMAIN, PhotosPage),
('http://%s/profile/[^/]*' % DOMAIN, ProfilePage),
('http://%s/visitors' % DOMAIN, VisitsPage),
@ -130,16 +130,16 @@ class OkCBrowser(BaseBrowser):
return self.page.get_visits()
@check_login
def get_threads_list(self, count=30):
def get_threads_list(self):
self.location('http://m.okcupid.com/messages')
return self.page.get_threads()
@check_login
def get_thread_mails(self, id, count=30):
def get_thread_mails(self, id):
id = int(id)
self.location(self.absurl('/messages?readmsg=true&threadid=%i&folder=1' % id))
self.location('http://www.okcupid.com/messages?readmsg=true&threadid=%i&folder=1' % id)
return self.page.get_thread_mails(count)
return self.page.get_thread_mails()
@check_login
def post_mail(self, id, content):

View file

@ -18,10 +18,12 @@
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
import re
from datetime import datetime
from weboob.tools.browser import BasePage
from weboob.tools.ordereddict import OrderedDict
from weboob.capabilities.contact import ProfileNode
from weboob.tools.misc import local2utc, html2text
class LoginPage(BasePage):
@ -50,27 +52,26 @@ class ThreadPage(BasePage):
class MessagesPage(BasePage):
def get_thread_mails(self, count):
ul_item = self.parser.select(self.document.getroot(), "//ul[@id='rows']", method='xpath')[0]
def get_thread_mails(self):
mails = {
'member' : {},
'messages' : [],
}
try:
mails['member']['pseudo'] = self.document.xpath('//li[starts-with(@id, "usr_")]')[0].attrib['id'].split('_', 1)[-1]
mails['member']['pseudo'] = self.parser.tocleanstring(self.document.getroot().cssselect('div#message_heading div.username span.name')[0])
except IndexError:
mails['member']['pseudo'] = 'Unknown'
for li_msg in reversed(ul_item.getchildren()):
div = li_msg.getchildren()[1]
txt = self.parser.tostring(div.getchildren()[1])
date = div.getchildren()[2].text
id_from = li_msg.getchildren()[0].get('href').split('/')[-1].split('?')[0]
for li in reversed(self.document.xpath('//ul[@id="thread"]//li[contains(@id, "message_")]')):
txt = self.parser.tostring(li.xpath('.//div[@class="message_body"]')[0])
txt = html2text(txt).strip()
if date is not None:
date = unicode(date)
m = re.search(r'(\d+), ', li.xpath('.//span[@class="timestamp"]//script')[0].text)
assert m
date = local2utc(datetime.fromtimestamp(int(m.group(1))))
id_from = li.find('a').attrib['href'].split('/')[-1].split('?')[0]
mails['messages'].append({
'date' : date,