support board

This commit is contained in:
Romain Bignon 2011-03-07 17:36:53 +01:00
commit e5b2c1d7e5
2 changed files with 56 additions and 0 deletions

View file

@ -23,6 +23,7 @@ from weboob.capabilities.messages import CantSendMessage
from .pages.index import IndexPage, LoginPage from .pages.index import IndexPage, LoginPage
from .pages.news import ContentPage, NewCommentPage, NodePage, CommentPage from .pages.news import ContentPage, NewCommentPage, NodePage, CommentPage
from .pages.board import BoardIndexPage
from .tools import id2url, url2id from .tools import id2url, url2id
# Browser # Browser
@ -36,8 +37,11 @@ class DLFP(BaseBrowser):
'https://linuxfr.org/nodes/(\d+)/comments/(\d+)$': CommentPage, 'https://linuxfr.org/nodes/(\d+)/comments/(\d+)$': CommentPage,
'https://linuxfr.org/nodes/(\d+)/comments/nouveau': NewCommentPage, 'https://linuxfr.org/nodes/(\d+)/comments/nouveau': NewCommentPage,
'https://linuxfr.org/nodes/(\d+)/comments$': NodePage, 'https://linuxfr.org/nodes/(\d+)/comments$': NodePage,
'https://linuxfr.org/board/index.xml': BoardIndexPage,
} }
last_board_msg_id = None
def home(self): def home(self):
return self.location('https://linuxfr.org') return self.location('https://linuxfr.org')
@ -134,3 +138,13 @@ class DLFP(BaseBrowser):
urllib.urlencode({'authenticity_token': comment.relevance_token})) urllib.urlencode({'authenticity_token': comment.relevance_token}))
return res 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)

View file

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