[feedly] improve login management
This commit is contained in:
parent
bc1746214c
commit
1569eb00ee
3 changed files with 26 additions and 18 deletions
|
|
@ -18,9 +18,10 @@
|
||||||
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
# along with weboob. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
from weboob.tools.json import json
|
from weboob.tools.json import json
|
||||||
|
from weboob.capabilities.base import UserError
|
||||||
from weboob.capabilities.collection import Collection
|
from weboob.capabilities.collection import Collection
|
||||||
from weboob.browser import LoginBrowser, URL, need_login
|
from weboob.browser import LoginBrowser, URL, need_login
|
||||||
from .pages import EssentialsPage, TokenPage, ContentsPage, PreferencesPage
|
from .pages import EssentialsPage, TokenPage, ContentsPage, PreferencesPage, MarkerPage
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['FeedlyBrowser']
|
__all__ = ['FeedlyBrowser']
|
||||||
|
|
@ -33,14 +34,15 @@ class FeedlyBrowser(LoginBrowser):
|
||||||
token = URL('v3/auth/token', TokenPage)
|
token = URL('v3/auth/token', TokenPage)
|
||||||
contents = URL('v3/streams/contents', ContentsPage)
|
contents = URL('v3/streams/contents', ContentsPage)
|
||||||
preferences = URL('v3/preferences', PreferencesPage)
|
preferences = URL('v3/preferences', PreferencesPage)
|
||||||
marker = URL('v3/markers')
|
marker = URL('v3/markers', MarkerPage)
|
||||||
|
|
||||||
def __init__(self, username, password, login_browser, *args, **kwargs):
|
def __init__(self, username, password, login_browser, *args, **kwargs):
|
||||||
super(FeedlyBrowser, self).__init__(username, password, *args, **kwargs)
|
super(FeedlyBrowser, self).__init__(username, password, *args, **kwargs)
|
||||||
self.login_browser = login_browser
|
|
||||||
self.user_id = None
|
self.user_id = None
|
||||||
|
self.login_browser = login_browser
|
||||||
|
|
||||||
def do_login(self):
|
def do_login(self):
|
||||||
|
if self.login_browser:
|
||||||
if self.login_browser.code is None or self.user_id is None:
|
if self.login_browser.code is None or self.user_id is None:
|
||||||
self.login_browser.do_login()
|
self.login_browser.do_login()
|
||||||
params = {'code': self.login_browser.code,
|
params = {'code': self.login_browser.code,
|
||||||
|
|
@ -51,6 +53,8 @@ class FeedlyBrowser(LoginBrowser):
|
||||||
|
|
||||||
token, self.user_id = self.token.go(data=params).get_token()
|
token, self.user_id = self.token.go(data=params).get_token()
|
||||||
self.session.headers['X-Feedly-Access-Token'] = token
|
self.session.headers['X-Feedly-Access-Token'] = token
|
||||||
|
else:
|
||||||
|
raise UserError(r'You need to fill your username and password to access this page')
|
||||||
|
|
||||||
@need_login
|
@need_login
|
||||||
def iter_threads(self):
|
def iter_threads(self):
|
||||||
|
|
@ -60,6 +64,7 @@ class FeedlyBrowser(LoginBrowser):
|
||||||
'count': '100'}
|
'count': '100'}
|
||||||
return self.contents.go(params=params).get_articles()
|
return self.contents.go(params=params).get_articles()
|
||||||
|
|
||||||
|
@need_login
|
||||||
def get_unread_feed(self, url):
|
def get_unread_feed(self, url):
|
||||||
params = {'streamId': url,
|
params = {'streamId': url,
|
||||||
'backfill': 'true',
|
'backfill': 'true',
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,11 @@
|
||||||
from urlparse import urlparse, parse_qs
|
from urlparse import urlparse, parse_qs
|
||||||
|
|
||||||
from weboob.browser import LoginBrowser, URL
|
from weboob.browser import LoginBrowser, URL
|
||||||
from weboob.browser.pages import HTMLPage
|
from weboob.browser.pages import HTMLPage, LoggedPage
|
||||||
from weboob.exceptions import BrowserIncorrectPassword
|
from weboob.exceptions import BrowserIncorrectPassword
|
||||||
|
|
||||||
|
|
||||||
class GoogleLoginPage(HTMLPage):
|
class GoogleLoginPage(LoggedPage, HTMLPage):
|
||||||
def login(self, login, passwd):
|
def login(self, login, passwd):
|
||||||
form = self.get_form('//form[@id="gaia_loginform"]')
|
form = self.get_form('//form[@id="gaia_loginform"]')
|
||||||
form['Email'] = login
|
form['Email'] = login
|
||||||
|
|
|
||||||
|
|
@ -21,14 +21,14 @@ from datetime import datetime
|
||||||
|
|
||||||
from weboob.capabilities.messages import Message
|
from weboob.capabilities.messages import Message
|
||||||
from weboob.capabilities.collection import Collection
|
from weboob.capabilities.collection import Collection
|
||||||
from weboob.browser.pages import JsonPage
|
from weboob.browser.pages import JsonPage, LoggedPage
|
||||||
from weboob.browser.elements import ItemElement, DictElement, method
|
from weboob.browser.elements import ItemElement, DictElement, method
|
||||||
from weboob.browser.filters.standard import CleanText, Format
|
from weboob.browser.filters.standard import CleanText, Format
|
||||||
from weboob.browser.filters.json import Dict
|
from weboob.browser.filters.json import Dict
|
||||||
from weboob.browser.filters.html import CleanHTML
|
from weboob.browser.filters.html import CleanHTML
|
||||||
|
|
||||||
|
|
||||||
class ContentsPage(JsonPage):
|
class ContentsPage(LoggedPage, JsonPage):
|
||||||
|
|
||||||
@method
|
@method
|
||||||
class get_articles(DictElement):
|
class get_articles(DictElement):
|
||||||
|
|
@ -82,8 +82,11 @@ class EssentialsPage(JsonPage):
|
||||||
return feed.get('id')
|
return feed.get('id')
|
||||||
|
|
||||||
|
|
||||||
class PreferencesPage(JsonPage):
|
class PreferencesPage(LoggedPage, JsonPage):
|
||||||
def get_categories(self):
|
def get_categories(self):
|
||||||
for category, value in self.doc.items():
|
for category, value in self.doc.items():
|
||||||
if value in [u"shown", u"hidden"]:
|
if value in [u"shown", u"hidden"]:
|
||||||
yield Collection([u'%s' % category], u'%s' % category.replace('global.', ''))
|
yield Collection([u'%s' % category], u'%s' % category.replace('global.', ''))
|
||||||
|
|
||||||
|
class MarkerPage(LoggedPage):
|
||||||
|
pass
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue