[dlfp] ICapMessagesReply.post_reply() implemented
This commit is contained in:
parent
c819276f4f
commit
76c4622dc3
5 changed files with 72 additions and 5 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue