diff --git a/weboob/backends/aum/antispam.py b/weboob/backends/aum/antispam.py new file mode 100644 index 00000000..aea4778a --- /dev/null +++ b/weboob/backends/aum/antispam.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +# Copyright(C) 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 +# the Free Software Foundation, version 3 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +import re + +from .pages.contact_list import ContactItem +from .pages.profile import ProfilePage + + +__all__ = ['AntiSpam'] + + +class AntiSpam(object): + def check(self, obj): + for key, value in self.OBJECTS.iteritems(): + if isinstance(obj, key): + return value(self, obj) + + raise TypeError('Unsupported object %r' % obj) + + def check_contact(self, contact): + resume = contact.get_resume() + + # Check if there is an email address in the offer. + if re.match('[\w\d\._]+@[\w\d\.]+ vous offre la possibilit', resume): + return False + + return True + + def check_profile(self, profile): + # TODO + return True + + OBJECTS = {ContactItem: check_contact, + ProfilePage: check_profile, + } diff --git a/weboob/backends/aum/backend.py b/weboob/backends/aum/backend.py index 3ebafbad..7be34bd3 100644 --- a/weboob/backends/aum/backend.py +++ b/weboob/backends/aum/backend.py @@ -30,6 +30,7 @@ from weboob.tools.backend import BaseBackend from weboob.tools.browser import BrowserUnavailable from .captcha import CaptchaError +from .antispam import AntiSpam from .browser import AuMBrowser from .exceptions import AdopteWait from .optim.profiles_walker import ProfilesWalker @@ -48,7 +49,8 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapCh DESCRIPTION = u"“Adopte un mec” french dating website" CONFIG = {'username': BaseBackend.ConfigField(description='Username on website'), 'password': BaseBackend.ConfigField(description='Password of account', is_masked=True), - 'register': BaseBackend.ConfigField(default=False, description='Register as new account?'), + 'register': BaseBackend.ConfigField(description='Register as new account?', default=False), + 'antispam': BaseBackend.ConfigField(description='Enable anti-spam', default=False), } STORAGE = {'profiles_walker': {'viewed': []}, 'sluts': {}, @@ -57,6 +59,13 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapCh MAGIC_ID_BASKET = 1 + def __init__(self, *args, **kwargs): + BaseBackend.__init__(self, *args, **kwargs) + if self.config['antispam']: + self.antispam = AntiSpam() + else: + self.antispam = None + def create_default_browser(self): if self.config['register']: browser = None @@ -97,6 +106,9 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapCh for contact in contacts: if not contact.get_id(): continue + if self.antispam and not self.antispam.check(contact): + debug('Skipped a spam-thread from %s' % contact.get_name()) + continue thread = Thread(contact.get_id()) thread.title = 'Discussion with %s' % contact.get_name() yield thread @@ -199,6 +211,9 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapCh while new_baskets > 0 and len(ids) > new_baskets: new_baskets -= 1 profile = self.browser.get_profile(ids[new_baskets]) + if self.antispam and not self.antispam.check(profile): + debug('Skipped a spam-basket from %s' % profile.get_name()) + continue thread = Thread(profile.get_id()) thread.title = 'Basket of %s' % profile.get_name()