diff --git a/weboob/backends/dlfp/backend.py b/weboob/backends/dlfp/backend.py index 1cd84594..fb537d38 100644 --- a/weboob/backends/dlfp/backend.py +++ b/weboob/backends/dlfp/backend.py @@ -20,12 +20,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. from weboob.backend import Backend from weboob.capabilities.messages import ICapMessages, ICapMessagesReply, Message -from weboob.capabilities.updatable import ICapUpdatable from .feeds import ArticlesList from .browser import DLFP -class DLFPBackend(Backend, ICapMessages, ICapMessagesReply, ICapUpdatable): +class DLFPBackend(Backend, ICapMessages, ICapMessagesReply): NAME = 'dlfp' MAINTAINER = 'Romain Bignon' EMAIL = 'romain@peerfuse.org' @@ -104,3 +103,6 @@ class DLFPBackend(Backend, ICapMessages, ICapMessagesReply, ICapUpdatable): 'Score: %d' % comment.score) self.storage.set(self.name, 'seen', what, seen) self.storage.save(self.name) + + def post_reply(self, thread_id, reply_id, message): + return self.browser.post(thread_id, reply_id, message) diff --git a/weboob/backends/dlfp/browser.py b/weboob/backends/dlfp/browser.py index 5eb4f960..c69c6225 100644 --- a/weboob/backends/dlfp/browser.py +++ b/weboob/backends/dlfp/browser.py @@ -18,12 +18,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. """ +import urllib from cStringIO import StringIO from weboob.tools.browser import Browser from .pages.index import IndexPage, LoginPage from .pages.news import ContentPage -from .tools import id2url +from .tools import id2url, id2threadid, id2contenttype from weboob.tools.parser import StandardParser @@ -57,6 +58,44 @@ class DLFP(Browser): self.location(id2url(_id)) return self.page.get_article() + def post_reply(self, thread, reply_id, title, message): + content_type = id2contenttype(thread) + thread_id = id2threadid(thread) + reply_id = int(reply_id) + + if not content_type or not thread_id: + return False + + # Define every data fields + d = {'news_id': thread_id, + 'com_parent': reply_id, + 'timestamp': '', + 'res_type': content_type, + 'referer': '%s://%s%s' % (self.PROTOCOL, self.DOMAIN, id2url(thread)), + 'subject': title, + 'body': message, + 'format': 3, + 'submit': 'Envoyer', + } + + data = '' + for key, value in d.iteritems(): + if data: + data += '&' + data += key + data += '=' + if isinstance(value, unicode): + value = value.encode('utf-8') + else: + value = str(value) + data += urllib.quote_plus(value) + + url = '%s://%s/submit/comments,%d,%d,%d.html#post' % (self.PROTOCOL, self.DOMAIN, thread_id, reply_id, content_type) + + request = self.request_class(url, data, {'Referer': url}) + result = self.openurl(request).read() + return result.find('
') >= 0 + def login(self): self.location('/login.html', 'login=%s&passwd=%s&isauto=1' % (self.username, self.password)) diff --git a/weboob/backends/dlfp/tools.py b/weboob/backends/dlfp/tools.py index 55fb67e0..1d79a278 100644 --- a/weboob/backends/dlfp/tools.py +++ b/weboob/backends/dlfp/tools.py @@ -42,3 +42,21 @@ def id2url(_id): if m: return '/~%s/%d.html' % (m.group(1), int(m.group(2))) return None + +def id2threadid(_id): + m = URL2ID_NEWSPAPER.match(_id) + if m: + return int(m.group(4)) + m = URL2ID_TELEGRAM.match(_id) + if m: + return int(m.group(2)) + return None + +def id2contenttype(_id): + if not _id: + return None + if _id[0] == 'N': + return 1 + if _id[0] == 'T': + return 5 + return None diff --git a/weboob/capabilities/messages.py b/weboob/capabilities/messages.py index cb01785a..68d45c2d 100644 --- a/weboob/capabilities/messages.py +++ b/weboob/capabilities/messages.py @@ -98,5 +98,13 @@ class ICapMessages(ICap): raise NotImplementedError() class ICapMessagesReply(ICap): - def post_reply(self, to, message): + def post_reply(self, thread_id, reply_id, title, message): + """ + Post a reply. + + @param thread_id ID of thread + @param reply_id message's id to reply + @param title title of message + @param message message to send + """ raise NotImplementedError() diff --git a/weboob/tools/browser.py b/weboob/tools/browser.py index 0bf9238f..838779a5 100644 --- a/weboob/tools/browser.py +++ b/weboob/tools/browser.py @@ -152,7 +152,7 @@ class Browser(mechanize.Browser): def change_location(func): def inner(self, *args, **kwargs): - if args and args[0][0] == '/' and (not self.request or self.request.host != self.DOMAIN): + if args and isinstance(args[0], (str,unicode)) and args[0][0] == '/' and (not self.request or self.request.host != self.DOMAIN): args = ('%s://%s%s' % (self.PROTOCOL, self.DOMAIN, args[0]),) + args[1:] print args