[twitter] login using the mobile nojs login page

This commit is contained in:
Mike Fährmann
2020-06-04 00:07:12 +02:00
parent a10f31dde5
commit bd0f21478a

View File

@@ -91,43 +91,40 @@ class TwitterExtractor(Extractor):
username, password = self._get_auth_info() username, password = self._get_auth_info()
if username: if username:
self._update_cookies(self._login_impl(username, password)) self._update_cookies(self._login_impl(username, password))
# self.logged_in = True
@cache(maxage=360*24*3600, keyarg=1) @cache(maxage=360*24*3600, keyarg=1)
def _login_impl(self, username, password): def _login_impl(self, username, password):
self.log.warning(
'Logging in with username and password is currently not possible. '
'Use cookies from your browser session instead.')
return {}
"""
self.log.info("Logging in as %s", username) self.log.info("Logging in as %s", username)
headers = {"User-Agent": self.user_agent} url = "https://mobile.twitter.com/i/nojs_router"
page = self.request(self.root + "/login", headers=headers).text params = {"path": "/login"}
pos = page.index('name="authenticity_token"') headers = {"Referer": self.root + "/", "Origin": self.root}
token = text.extract(page, 'value="', '"', pos-80)[0] page = self.request(
url, method="POST", params=params, headers=headers, data={}).text
url = self.root + "/sessions" pos = page.index('name="authenticity_token"')
token = text.extract(page, 'value="', '"', pos)[0]
url = "https://mobile.twitter.com/sessions"
data = { data = {
"authenticity_token" : token,
"session[username_or_email]": username, "session[username_or_email]": username,
"session[password]" : password, "session[password]" : password,
# "authenticity_token" : token,
"ui_metrics" : '{"rf":{},"s":""}',
"scribe_log" : "",
"redirect_after_login" : "",
"remember_me" : "1", "remember_me" : "1",
"wfa" : "1",
"commit" : "+Log+in+",
"ui_metrics" : "",
} }
response = self.request(url, method="POST", headers=headers, data=data) response = self.request(url, method="POST", data=data)
if "/error" in response.url: cookies = {
raise exception.AuthenticationError()
return {
cookie.name: cookie.value cookie.name: cookie.value
for cookie in self.session.cookies for cookie in self.session.cookies
if cookie.domain and "twitter.com" in cookie.domain if cookie.domain == self.cookiedomain
} }
"""
if "/error" in response.url or "auth_token" not in cookies:
raise exception.AuthenticationError()
return cookies
class TwitterTimelineExtractor(TwitterExtractor): class TwitterTimelineExtractor(TwitterExtractor):