[twitter] fix login after 32b03433

This commit is contained in:
Mike Fährmann
2023-01-15 22:10:21 +01:00
parent 80a2ff2d38
commit 78937564fd

View File

@@ -1193,17 +1193,19 @@ class TwitterAPI():
self.extractor.log.info("Requesting guest token") self.extractor.log.info("Requesting guest token")
return str(self._call(endpoint, None, "POST", False)["guest_token"]) return str(self._call(endpoint, None, "POST", False)["guest_token"])
def _authenticate_guest(self):
guest_token = self._guest_token()
if guest_token != self.headers["x-guest-token"]:
self.headers["x-guest-token"] = guest_token
self.extractor.session.cookies.set(
"gt", guest_token, domain=self.extractor.cookiedomain)
def _call(self, endpoint, params, method="GET", auth=True): def _call(self, endpoint, params, method="GET", auth=True):
url = self.root + endpoint url = self.root + endpoint
while True: while True:
if not self.headers["x-twitter-auth-type"] and auth: if not self.headers["x-twitter-auth-type"] and auth:
# logged out -> refresh guest token self._authenticate_guest()
guest_token = self._guest_token()
if guest_token != self.headers["x-guest-token"]:
self.headers["x-guest-token"] = guest_token
self.extractor.session.cookies.set(
"gt", guest_token, domain=self.extractor.cookiedomain)
response = self.extractor.request( response = self.extractor.request(
url, method=method, params=params, url, method=method, params=params,
@@ -1587,8 +1589,6 @@ def _login_impl(extr, username, password):
"Login with email is no longer possible. " "Login with email is no longer possible. "
"You need to provide your username or phone number instead.") "You need to provide your username or phone number instead.")
extr.log.info("Logging in as %s", username)
def process(response): def process(response):
try: try:
data = response.json() data = response.json()
@@ -1607,8 +1607,10 @@ def _login_impl(extr, username, password):
extr.session.cookies.clear() extr.session.cookies.clear()
api = TwitterAPI(extr) api = TwitterAPI(extr)
api._authenticate_guest()
headers = api.headers headers = api.headers
headers["Referer"] = "https://twitter.com/i/flow/login"
extr.log.info("Logging in as %s", username)
# init # init
data = { data = {
@@ -1662,7 +1664,7 @@ def _login_impl(extr, username, password):
"web_modal": 1, "web_modal": 1,
}, },
} }
url = "https://twitter.com/i/api/1.1/onboarding/task.json?flow_name=login" url = "https://api.twitter.com/1.1/onboarding/task.json?flow_name=login"
response = extr.request(url, method="POST", headers=headers, json=data) response = extr.request(url, method="POST", headers=headers, json=data)
data = { data = {
@@ -1677,7 +1679,7 @@ def _login_impl(extr, username, password):
}, },
], ],
} }
url = "https://twitter.com/i/api/1.1/onboarding/task.json" url = "https://api.twitter.com/1.1/onboarding/task.json"
response = extr.request( response = extr.request(
url, method="POST", headers=headers, json=data, fatal=None) url, method="POST", headers=headers, json=data, fatal=None)
@@ -1701,7 +1703,7 @@ def _login_impl(extr, username, password):
}, },
], ],
} }
# url = "https://twitter.com/i/api/1.1/onboarding/task.json" # url = "https://api.twitter.com/1.1/onboarding/task.json"
extr.sleep(random.uniform(2.0, 4.0), "login (username)") extr.sleep(random.uniform(2.0, 4.0), "login (username)")
response = extr.request( response = extr.request(
url, method="POST", headers=headers, json=data, fatal=None) url, method="POST", headers=headers, json=data, fatal=None)
@@ -1719,7 +1721,7 @@ def _login_impl(extr, username, password):
}, },
], ],
} }
# url = "https://twitter.com/i/api/1.1/onboarding/task.json" # url = "https://api.twitter.com/1.1/onboarding/task.json"
extr.sleep(random.uniform(2.0, 4.0), "login (password)") extr.sleep(random.uniform(2.0, 4.0), "login (password)")
response = extr.request( response = extr.request(
url, method="POST", headers=headers, json=data, fatal=None) url, method="POST", headers=headers, json=data, fatal=None)
@@ -1736,7 +1738,7 @@ def _login_impl(extr, username, password):
}, },
], ],
} }
# url = "https://twitter.com/i/api/1.1/onboarding/task.json" # url = "https://api.twitter.com/1.1/onboarding/task.json"
response = extr.request( response = extr.request(
url, method="POST", headers=headers, json=data, fatal=None) url, method="POST", headers=headers, json=data, fatal=None)
process(response) process(response)