[dlfp] ICapMessagesReply.post_reply() implemented

This commit is contained in:
Romain Bignon 2010-04-10 17:14:59 +02:00
commit 76c4622dc3
5 changed files with 72 additions and 5 deletions

View file

@ -20,12 +20,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
from weboob.backend import Backend from weboob.backend import Backend
from weboob.capabilities.messages import ICapMessages, ICapMessagesReply, Message from weboob.capabilities.messages import ICapMessages, ICapMessagesReply, Message
from weboob.capabilities.updatable import ICapUpdatable
from .feeds import ArticlesList from .feeds import ArticlesList
from .browser import DLFP from .browser import DLFP
class DLFPBackend(Backend, ICapMessages, ICapMessagesReply, ICapUpdatable): class DLFPBackend(Backend, ICapMessages, ICapMessagesReply):
NAME = 'dlfp' NAME = 'dlfp'
MAINTAINER = 'Romain Bignon' MAINTAINER = 'Romain Bignon'
EMAIL = 'romain@peerfuse.org' EMAIL = 'romain@peerfuse.org'
@ -104,3 +103,6 @@ class DLFPBackend(Backend, ICapMessages, ICapMessagesReply, ICapUpdatable):
'Score: %d' % comment.score) 'Score: %d' % comment.score)
self.storage.set(self.name, 'seen', what, seen) self.storage.set(self.name, 'seen', what, seen)
self.storage.save(self.name) self.storage.save(self.name)
def post_reply(self, thread_id, reply_id, message):
return self.browser.post(thread_id, reply_id, message)

View file

@ -18,12 +18,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
""" """
import urllib
from cStringIO import StringIO from cStringIO import StringIO
from weboob.tools.browser import Browser from weboob.tools.browser import Browser
from .pages.index import IndexPage, LoginPage from .pages.index import IndexPage, LoginPage
from .pages.news import ContentPage from .pages.news import ContentPage
from .tools import id2url from .tools import id2url, id2threadid, id2contenttype
from weboob.tools.parser import StandardParser from weboob.tools.parser import StandardParser
@ -57,6 +58,44 @@ class DLFP(Browser):
self.location(id2url(_id)) self.location(id2url(_id))
return self.page.get_article() 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('<div class="commentsreplythanks">') >= 0
def login(self): def login(self):
self.location('/login.html', 'login=%s&passwd=%s&isauto=1' % (self.username, self.password)) self.location('/login.html', 'login=%s&passwd=%s&isauto=1' % (self.username, self.password))

View file

@ -42,3 +42,21 @@ def id2url(_id):
if m: if m:
return '/~%s/%d.html' % (m.group(1), int(m.group(2))) return '/~%s/%d.html' % (m.group(1), int(m.group(2)))
return None 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

View file

@ -98,5 +98,13 @@ class ICapMessages(ICap):
raise NotImplementedError() raise NotImplementedError()
class ICapMessagesReply(ICap): 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() raise NotImplementedError()

View file

@ -152,7 +152,7 @@ class Browser(mechanize.Browser):
def change_location(func): def change_location(func):
def inner(self, *args, **kwargs): 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:] args = ('%s://%s%s' % (self.PROTOCOL, self.DOMAIN, args[0]),) + args[1:]
print args print args