[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.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)

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 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('<div class="commentsreplythanks">') >= 0
def login(self):
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:
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

View file

@ -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()

View file

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