diff --git a/weboob/backends/aum/adopte.py b/weboob/backends/aum/adopte.py index 98482683..22ea0516 100644 --- a/weboob/backends/aum/adopte.py +++ b/weboob/backends/aum/adopte.py @@ -52,12 +52,13 @@ class AdopteUnMec(Browser): 'http://www.adopteunmec.com/mails.php\?type=1': BasketsPage, 'http://www.adopteunmec.com/thread.php\?id=([0-9]+)': ContactThreadPage, 'http://www.adopteunmec.com/edit.php\?type=1': EditPhotoPage, - 'http://s\d+.adopteunmec.com/upload2.php\?.*': EditPhotoCbPage, + 'http://s\d+.adopteunmec.com/upload\d.php\?.*': EditPhotoCbPage, 'http://www.adopteunmec.com/edit.php\?type=2': EditAnnouncePage, 'http://www.adopteunmec.com/edit.php\?type=3': EditDescriptionPage, 'http://www.adopteunmec.com/edit.php\?type=4': EditSexPage, 'http://www.adopteunmec.com/edit.php\?type=5': EditPersonalityPage, 'http://www.adopteunmec.com/search.php.*': SearchPage, + 'http://www.adopteunmec.com/searchRes.php.*': SearchPage, 'http://www.adopteunmec.com/rencontres-femmes/(.*)/([0-9]+)': ProfilePage, 'http://www.adopteunmec.com/catalogue-hommes/(.*)/([0-9]+)': ProfilePage, 'http://www.adopteunmec.com/view2.php': ProfilePage, # my own profile @@ -111,6 +112,12 @@ class AdopteUnMec(Browser): self.location('/edit.php?type=2') return self.page.setAnnounce(title, description, lookingfor) + @pageaccess + def setDescription(self, **args): + if not self.isOnPage(EditDescriptionPage): + self.location('/edit.php?type=3') + return self.page.setDescription(**args) + @pageaccess def score(self): if time.time() - self.__last_update > 60: @@ -157,6 +164,11 @@ class AdopteUnMec(Browser): self.location('/mails.php?type=1') return self.page.getProfilesIDsList() + @pageaccess + def flushVisits(self): + """ Does nothing, only flush new visits to increase my score """ + self.openurl('/mails.php?type=3') + @pageaccess def getContactList(self): if not self.isOnPage(ContactListPage): @@ -187,12 +199,17 @@ class AdopteUnMec(Browser): # TODO check if it works (but it should) return True + def deblock(self, id): + result = self.openurl('http://www.adopteunmec.com/fajax_postMessage.php?action=deblock&to=%s' % id).read() + warning('Deblock: %s' % result) + return True + @pageaccess def rate(self, id, what, rating): print 'rate "%s"' % id, what, rating result = self.openurl('http://www.adopteunmec.com/fajax_vote.php', 'member=%s&what=%s&rating=%s' % (id, what, rating)).read() print result - return True + return float(result) @pageaccess def searchProfiles(self, **kwargs): @@ -207,6 +224,23 @@ class AdopteUnMec(Browser): self.location('/%s' % link) return self.page + @pageaccess + def getSlutState(self, id): + result = self.openurl('http://www.adopteunmec.com/%s' % id).read() + if result.find('en ligne') >= 0: + r = 'online' + elif result.find('Cet utilisateur a quitt\xe9 le site
') >= 0: + r = 'removed' + elif result.find('ce profil a \xe9t\xe9 bloqu\xe9 par l\'\xe9quipe de mod\xe9ration
') >= 0: + r = 'removed' + elif result.find('


Cette personne
vous a bloqu\xe9
') >= 0: + r = 'blocked' + else: + r = 'offline' + + print 'getSlutState(%s) = %s' % (id, r) + return r + @pageaccess def isSlutOnline(self, id): result = self.openurl('http://www.adopteunmec.com/%s' % id).read() diff --git a/weboob/backends/aum/backend.py b/weboob/backends/aum/backend.py index ac7a6fcd..84e7be97 100644 --- a/weboob/backends/aum/backend.py +++ b/weboob/backends/aum/backend.py @@ -22,4 +22,8 @@ from weboob.backend import Backend from weboob.capabilities.messages import ICapMessages, ICapMessagesReply class AuMBackend(Backend, ICapMessages, ICapMessagesReply): - pass + def __init__(self, weboob): + Backend.__init__(self, weboob) + + def getNewMessages(self, thread=None): + pass diff --git a/weboob/backends/aum/pages/contact_thread.py b/weboob/backends/aum/pages/contact_thread.py index 24da645f..94a16a17 100644 --- a/weboob/backends/aum/pages/contact_thread.py +++ b/weboob/backends/aum/pages/contact_thread.py @@ -185,7 +185,9 @@ class MailParser(Mail): if not td.hasAttribute('class') or td.getAttribute('class') != 'mini_pseudo': continue - self.sender = td.childNodes[0].data + if td.childNodes: + self.sender = td.childNodes[0].data + return warning('Warning: unable to find from in the mail %s' % self.getID()) @@ -237,7 +239,7 @@ class ContactThreadPage(PageBase): self.browser.submit() # submit current form except FormNotFoundError: - error = 'Unknown error' + error = 'Unknown error (%s)' % e p_list = self.document.getElementsByTagName('p') for p in p_list: if p.hasAttribute('align') and p.getAttribute('align') == 'center': diff --git a/weboob/backends/aum/pages/edit.py b/weboob/backends/aum/pages/edit.py index 23c99a67..46b13c6b 100644 --- a/weboob/backends/aum/pages/edit.py +++ b/weboob/backends/aum/pages/edit.py @@ -39,17 +39,39 @@ class EditAnnouncePage(PageBase): def setAnnounce(self, title=None, description=None, lookingfor=None): self.browser.select_form(name="form") - if title is not None: - self.browser['title'] = title - if description is not None: - self.browser['about1'] = description - if lookingfor is not None: - self.browser['about2'] = lookingfor + self.browser.set_field(kwargs, 'title') + self.browser.set_field(kwargs, 'description', field='about1') + self.browser.set_field(kwargs, 'lookingfor', field='about2') self.browser.submit() class EditDescriptionPage(PageBase): - pass + SHAPES = ['--', 'svelte', 'sportive', u'équilibrée', 'pulpeuse', u'généreuse', 'normale'] + HAIR_COLORS = ['--', 'blancs', 'gris', 'noirs', 'bruns', 'chatains', 'roux', 'blonds', 'platines', u'colorés'] + HAIR_SIZES = ['--', u'rasés', 'courts', 'mi-longs', 'longs'] + EYES = ['--', 'noirs', 'marrons', 'noisettes', 'bleus', 'verts', 'gris'] + ORIGINS = ['--', u'européennes', 'afro', 'maghrebines', 'asiatiques', u'métisses', 'eurasiennes', 'latines'] + STYLES = ['--', 'fashion', 'chic', 'sport', u'décontracté', 'rock', u'bohème', 'masculin', 'dark', 'excentrique', 'electro', 'skate'] + FOODS = ['--', 'mange de tout', 'piscovore', u'végétarien', u'végétalien', 'bio'] + DRINKS = ['--', 'jamais', 'de temps en temps', 'souvent', 'pilier de bar'] + SMOKES = ['--', u'ne tolère pas la fumée', u'tolère la fumée', 'fume de temps en temps', 'fume souvent'] + + def setDescription(self, **kwargs): + self.browser.select_form(name='form') + + self.browser.set_field(kwargs, 'height', field='size', is_list=True) + self.browser.set_field(kwargs, 'weight', is_list=True) + self.browser.set_field(kwargs, 'shape', is_list=self.SHAPES) + self.browser.set_field(kwargs, 'hair_color', is_list=self.HAIR_COLORS) + self.browser.set_field(kwargs, 'hair_size', is_list=self.HAIR_SIZES) + self.browser.set_field(kwargs, 'eyes', is_list=self.EYES) + self.browser.set_field(kwargs, 'origins', is_list=self.ORIGINS) + self.browser.set_field(kwargs, 'style', is_list=self.STYLES) + self.browser.set_field(kwargs, 'food', is_list=self.FOODS) + self.browser.set_field(kwargs, 'drink', is_list=self.DRINKS) + self.browser.set_field(kwargs, 'smoke', is_list=self.SMOKES) + + self.browser.submit() class EditSexPage(PageBase): pass diff --git a/weboob/backends/aum/pages/login.py b/weboob/backends/aum/pages/login.py index a2e74084..bad3caa3 100644 --- a/weboob/backends/aum/pages/login.py +++ b/weboob/backends/aum/pages/login.py @@ -44,7 +44,8 @@ class RegisterPage(PageBase): - godfather """ self.browser.select_form(name="form2") - self.browser.controls.pop() + self.browser.controls.pop() # pop the 'sex' control which is twice on page + self.browser.set_all_readonly(False) if isinstance(nickname, unicode): nickname = nickname.encode('iso-8859-15', 'ignore') diff --git a/weboob/backends/aum/pages/profile.py b/weboob/backends/aum/pages/profile.py index 24f38d85..651bb40c 100644 --- a/weboob/backends/aum/pages/profile.py +++ b/weboob/backends/aum/pages/profile.py @@ -45,11 +45,25 @@ class FieldWideList(FieldBase): d[self.key] += [value] class FieldOld(FieldBase): - regexp = re.compile('([0-9]+) ans') + regexp = re.compile(u'([0-9]+) ans( \(Née le ([0-9]+) ([^ ]+) ([0-9]+)\))?') + month2i = ['', 'janvier', u'février', 'mars', 'avril', 'mai', 'juin', 'juillet', u'août', 'septembre', 'octobre', 'novembre', u'décembre'] + def putValue(self, d, value): m = self.regexp.match(value) - if m: - d[self.key] = int(m.group(1)) + warning(value) + if not m: + return + + d[self.key] = int(m.group(1)) + if not m.group(2): + return + + try: + d['birthday'] = (int(m.group(3)), + self.month2i.index(m.group(4)), + int(m.group(5))) + except ValueError, e: + print str(e) class FieldLocation(FieldBase): location = re.compile('(.*) \(([0-9]{5})\), (.*)') @@ -114,6 +128,7 @@ class FieldParticularSignes(FieldBase): class ProfilePage(PageBase): empty_table = {'details': {'old': 0, + 'birthday': (0,0,0), 'zipcode': 0, 'location': '', 'country': '', diff --git a/weboob/backends/aum/pages/search.py b/weboob/backends/aum/pages/search.py index 855719f0..7c20d725 100644 --- a/weboob/backends/aum/pages/search.py +++ b/weboob/backends/aum/pages/search.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- """ -Copyright(C) 2008 Romain Bignon +Copyright(C) 2008-2010 Romain Bignon This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,33 +22,18 @@ import ClientForm from weboob.backends.aum.pages.profileslist_base import ProfilesListBase class SearchPage(ProfilesListBase): - SHOW_WITHOUT_PHOTO = False - def set_field(self, args, label, field=None, value=None, is_list=False): - try: - if not field: - field = label - if args.get(label, None) is not None: - if not value: - if is_list: - value = [str(args[label])] - else: - value = str(args[label]) - self.browser[field] = value - except ClientForm.ControlNotFoundError: - return - def search(self, **kwargs): - self.browser.select_form(name="form") self.browser.set_all_readonly(False) - self.set_field(kwargs, 'ageMin', is_list=True) - self.set_field(kwargs, 'ageMax', is_list=True) - self.set_field(kwargs, 'country', is_list=True) - self.set_field(kwargs, 'dist', is_list=True) - self.set_field(kwargs, 'nickname', field='pseudo') - self.set_field(kwargs, 'save', value='true') + self.browser.set_field(kwargs, 'ageMin', is_list=True) + self.browser.set_field(kwargs, 'ageMax', is_list=True) + self.browser.set_field(kwargs, 'country', is_list=True) + self.browser.set_field(kwargs, 'dist', is_list=True) + self.browser.set_field(kwargs, 'nickname', field='pseudo') + self.browser.set_field(kwargs, 'save', value='true') + self.browser['originsV[]'] = ['1'] # excludes niggers (it doesn't work :( ) self.browser.submit() diff --git a/weboob/tools/browser.py b/weboob/tools/browser.py index efa3c93f..e115d83e 100644 --- a/weboob/tools/browser.py +++ b/weboob/tools/browser.py @@ -219,3 +219,25 @@ class Browser(mechanize.Browser): if self.__cookie: self.__cookie.save() + def set_field(self, args, label, field=None, value=None, is_list=False): + try: + if not field: + field = label + if args.get(label, None) is not None: + if not value: + if is_list: + if isinstance(is_list, (list, tuple)): + try: + value = [str(is_list.index(args[label]))] + except ValueError, e: + if args[label]: + print '[%s] %s: %s' % (label, args[label], e) + return + else: + value = [str(args[label])] + else: + value = str(args[label]) + self[field] = value + except ClientForm.ControlNotFoundError: + return +