diff --git a/weboob/backends/aum/API.txt b/weboob/backends/aum/API.txt index e5851e02..db5e1e92 100644 --- a/weboob/backends/aum/API.txt +++ b/weboob/backends/aum/API.txt @@ -338,7 +338,7 @@ Return value: u'news': {u'newBaskets': 0, u'newMails': 1, u'newVisits': 113}, u'token': u'9a97a03774c9f440e676c78f48794a7221a67285'}} -me.baskets +me.basket ---------- Return value: @@ -369,6 +369,77 @@ Return value: u'inBasket': 57, u'token': u'ea7bac8837f6e5bb1e2a3267d6a08b32e388d593'}} +me.flashs +--------- + +Return value: + {u'errors': [], + u'result': {u'all': [{u'date': u'2011-10-19 10:50:43', + u'fid': u'41311269', + u'id': u'12656592', + u'member': {u'alert': u'1', + u'birthday': u'1986-08-08', + u'city': u'Armes', + u'country': u'fr', + u'cover': u'3', + u'id': u'12656592', + u'isBan': False, + u'isOnline': False, + u'last_cnx': u'2011-10-19 17:28:00', + u'list5': u'0', + u'login': u'@12656592', + u'mod_level': u'0', + u'path': u'2/9/5/6/5/6/2/', + u'pseudo': u'Yayanne', + u'region': u'5', + u'sex': 1, + u'shard': 2, + u'style': u'0', + u'table': u'adopteun.girls', + u'url': u'/api.php?member/view/12656592/Yayanne', + u'zip': u'58500'}, + u'seen': u'2011-10-19 10:54:09'}], + u'count': 1467, + u'news': [], + u'olds': [], + u'popu': u'110350', + u'token': u'3af90dd563431fe6b4c65930d18337c997fac34e'}} + +me.visits +--------- + +Return value: + {u'errors': [], + u'result': {u'count': u'607', + u'news': [], + u'offset': 0, + u'olds': [{u'alert': u'0', + u'birthday': u'1985-01-29', + u'city': u'Albi', + u'country': u'fr', + u'cover': u'11', + u'date': u'2011-10-19 17:40:43', + u'id': u'13461054', + u'isBan': False, + u'isOnline': True, + u'last_cnx': u'2011-10-19 17:47:25', + u'list5': u'0', + u'login': u'@13461054', + u'mod_level': u'0', + u'path': u'4/5/0/1/6/4/3/', + u'pseudo': u'Bruume', + u'region': u'15', + u'seen': u'2011-10-19 17:42:55', + u'sex': 1, + u'shard': 4, + u'style': u'0', + u'table': u'adopteun.girls', + u'url': u'/api.php?member/view/13461054/Bruume', + u'vid': u'199226074', + u'zip': u'81000'}], + u'popu': u'110350', + u'token': u'd7380871794008c94971acec82b7b679dd800307'}} + MESSAGE Commands ================ diff --git a/weboob/backends/aum/backend.py b/weboob/backends/aum/backend.py index a5f3a3fc..9930deef 100644 --- a/weboob/backends/aum/backend.py +++ b/weboob/backends/aum/backend.py @@ -30,7 +30,7 @@ from dateutil.parser import parse as _parse_dt from weboob.capabilities.base import NotLoaded from weboob.capabilities.chat import ICapChat from weboob.capabilities.messages import ICapMessages, ICapMessagesPost, Message, Thread -from weboob.capabilities.dating import ICapDating, OptimizationNotFound +from weboob.capabilities.dating import ICapDating, OptimizationNotFound, Event from weboob.capabilities.contact import ICapContact, ContactPhoto, Query, QueryError from weboob.capabilities.account import ICapAccount, StatusField from weboob.tools.backend import BaseBackend, BackendConfig @@ -97,6 +97,32 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapCh self.add_optimization('VISIBILITY', Visibility(self.weboob.scheduler, self.browser)) self.add_optimization('QUERIES_QUEUE', QueriesQueue(self.weboob.scheduler, self.storage, self.browser)) + def iter_events(self): + all_events = {} + with self.browser: + all_events['baskets'] = (self.browser.get_baskets, 'You are taken in the %s basket') + all_events['flashs'] = (self.browser.get_flashs, 'You sent a charm to %s') + all_events['visits'] = (self.browser.get_visits, 'Visited by %s') + for type, (events, message) in all_events.iteritems(): + for event in events(): + try: + e = Event(event['%sid' % type[0]]) + except KeyError: + e = Event(event['id']) + + e.date = parse_dt(event['date']) + e.type = type + if 'member' in event: + e.contact = self._get_partial_contact(event['member']) + else: + e.contact = self._get_partial_contact(event) + + if not e.contact: + continue + + e.message = message % e.contact.name + yield e + # ---- ICapMessages methods --------------------- def fill_thread(self, thread, fields): @@ -350,38 +376,41 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapCh contact.parse_profile(profile, self.browser.get_consts()) return contact + def _get_partial_contact(self, contact): + if contact.get('isBan', True): + with self.browser: + self.browser.delete_thread(int(contact['id'])) + return None + + s = 0 + if contact['isOnline']: + s = Contact.STATUS_ONLINE + else: + s = Contact.STATUS_OFFLINE + + c = Contact(contact['id'], contact['pseudo'], s) + c.url = self.browser.id2url(contact['id']) + birthday = _parse_dt(contact['birthday']) + age = int((datetime.datetime.now() - birthday).days / 365.25) + c.status_msg = u'%s old' % age + if int(contact['cover']) > 0: + url = 'http://s%s.adopteunmec.com/%s%%(type)s%s.jpg' % (contact['shard'], contact['path'], contact['cover']) + else: + url = 'http://s.adopteunmec.com/www/img/thumb0.gif' + + c.set_photo('image%s' % contact['cover'], + url=url % {'type': 'image'}, + thumbnail_url=url % {'type': 'thumb0_'}) + return c + def iter_contacts(self, status=Contact.STATUS_ALL, ids=None): with self.browser: threads = self.browser.get_threads_list(count=100) + for thread in threads: - contact = thread['member'] - if contact.get('isBan', True): - with self.browser: - self.browser.delete_thread(int(contact['id'])) - continue - s = 0 - if contact['isOnline']: - s = Contact.STATUS_ONLINE - else: - s = Contact.STATUS_OFFLINE - - if not status & s or (ids and not contact['id'] in ids): - continue - - c = Contact(contact['id'], contact['pseudo'], s) - c.url = self.browser.id2url(contact['id']) - birthday = _parse_dt(contact['birthday']) - age = int((datetime.datetime.now() - birthday).days / 365.25) - c.status_msg = u'%s old' % age - if int(contact['cover']) > 0: - url = 'http://s%s.adopteunmec.com/%s%%(type)s%s.jpg' % (contact['shard'], contact['path'], contact['cover']) - else: - url = 'http://s.adopteunmec.com/www/img/thumb0.gif' - - c.set_photo('image%s' % contact['cover'], - url=url % {'type': 'image'}, - thumbnail_url=url % {'type': 'thumb0_'}) - yield c + c = self._get_partial_contact(thread['member']) + if c and (c.status & status) and (not ids or c.id in ids): + yield c def send_query(self, id): if isinstance(id, Contact): diff --git a/weboob/backends/aum/browser.py b/weboob/backends/aum/browser.py index 861db146..43ffbb0f 100644 --- a/weboob/backends/aum/browser.py +++ b/weboob/backends/aum/browser.py @@ -216,6 +216,16 @@ class AuMBrowser(BaseBrowser): r = self.api_request('me', 'basket') return r['result']['basket'] + @check_login + def get_flashs(self): + r = self.api_request('me', 'flashs') + return r['result']['all'] + + @check_login + def get_visits(self): + r = self.api_request('me', 'visits') + return r['result']['news'] + r['result']['olds'] + @check_login def get_threads_list(self, count=30): r = self.api_request('message', '[default]', '%d,0' % count)