new antispam feature for aum (refs #313)

This commit is contained in:
Romain Bignon 2010-10-13 13:39:07 +02:00
commit 70982a1dd6
2 changed files with 66 additions and 1 deletions

View file

@ -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,
}

View file

@ -30,6 +30,7 @@ from weboob.tools.backend import BaseBackend
from weboob.tools.browser import BrowserUnavailable from weboob.tools.browser import BrowserUnavailable
from .captcha import CaptchaError from .captcha import CaptchaError
from .antispam import AntiSpam
from .browser import AuMBrowser from .browser import AuMBrowser
from .exceptions import AdopteWait from .exceptions import AdopteWait
from .optim.profiles_walker import ProfilesWalker 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" DESCRIPTION = u"“Adopte un mec” french dating website"
CONFIG = {'username': BaseBackend.ConfigField(description='Username on website'), CONFIG = {'username': BaseBackend.ConfigField(description='Username on website'),
'password': BaseBackend.ConfigField(description='Password of account', is_masked=True), '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': []}, STORAGE = {'profiles_walker': {'viewed': []},
'sluts': {}, 'sluts': {},
@ -57,6 +59,13 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapCh
MAGIC_ID_BASKET = 1 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): def create_default_browser(self):
if self.config['register']: if self.config['register']:
browser = None browser = None
@ -97,6 +106,9 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapCh
for contact in contacts: for contact in contacts:
if not contact.get_id(): if not contact.get_id():
continue 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 = Thread(contact.get_id())
thread.title = 'Discussion with %s' % contact.get_name() thread.title = 'Discussion with %s' % contact.get_name()
yield thread yield thread
@ -199,6 +211,9 @@ class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapCh
while new_baskets > 0 and len(ids) > new_baskets: while new_baskets > 0 and len(ids) > new_baskets:
new_baskets -= 1 new_baskets -= 1
profile = self.browser.get_profile(ids[new_baskets]) 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 = Thread(profile.get_id())
thread.title = 'Basket of %s' % profile.get_name() thread.title = 'Basket of %s' % profile.get_name()