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
+