From e5b2c1d7e5fcbd97e12c0d237235b1b0d60c58de Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Mon, 7 Mar 2011 17:36:53 +0100 Subject: [PATCH] support board --- weboob/backends/dlfp/browser.py | 14 ++++++++++ weboob/backends/dlfp/pages/board.py | 42 +++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 weboob/backends/dlfp/pages/board.py diff --git a/weboob/backends/dlfp/browser.py b/weboob/backends/dlfp/browser.py index d868f6f0..84e4df2c 100644 --- a/weboob/backends/dlfp/browser.py +++ b/weboob/backends/dlfp/browser.py @@ -23,6 +23,7 @@ from weboob.capabilities.messages import CantSendMessage from .pages.index import IndexPage, LoginPage from .pages.news import ContentPage, NewCommentPage, NodePage, CommentPage +from .pages.board import BoardIndexPage from .tools import id2url, url2id # Browser @@ -36,8 +37,11 @@ class DLFP(BaseBrowser): 'https://linuxfr.org/nodes/(\d+)/comments/(\d+)$': CommentPage, 'https://linuxfr.org/nodes/(\d+)/comments/nouveau': NewCommentPage, 'https://linuxfr.org/nodes/(\d+)/comments$': NodePage, + 'https://linuxfr.org/board/index.xml': BoardIndexPage, } + last_board_msg_id = None + def home(self): return self.location('https://linuxfr.org') @@ -134,3 +138,13 @@ class DLFP(BaseBrowser): urllib.urlencode({'authenticity_token': comment.relevance_token})) return res + + def iter_new_board_messages(self): + self.location('/board/index.xml') + assert self.is_on_page(BoardIndexPage) + + msgs = self.page.get_messages(self.last_board_msg_id) + if len(msgs) > 0: + self.last_board_msg_id = msgs[0].id + + return reversed(msgs) diff --git a/weboob/backends/dlfp/pages/board.py b/weboob/backends/dlfp/pages/board.py new file mode 100644 index 00000000..d6aa293c --- /dev/null +++ b/weboob/backends/dlfp/pages/board.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- + +# Copyright(C) 2010-2011 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. + +from weboob.tools.parsers.lxmlparser import select, SelectElementException +from weboob.tools.browser import BasePage + +class Message(object): + def __init__(self, id, timestamp, login, message): + self.id = id + self.timestamp = timestamp + self.login = login + self.message = message + +class BoardIndexPage(BasePage): + def is_logged(self): + return True + + def get_messages(self, last=None): + msgs = [] + for post in select(self.document.getroot(), 'post'): + m = Message(int(post.attrib['id']), + post.attrib['time'], + post.find('login').text, + post.find('message').text) + if last is not None and last == m.id: + break + msgs.append(m) + return msgs