[twitter] implement 'metadata-user' option (#8984)

This commit is contained in:
Mike Fährmann
2026-02-03 20:14:34 +01:00
parent 2cbd9740f2
commit 614e1a514a
3 changed files with 34 additions and 0 deletions

View File

@@ -6554,6 +6554,23 @@ Description
Logout and retry as guest when access to another user's Tweets is blocked.
extractor.twitter.metadata-user
-------------------------------
Type
``bool``
Default
``false``
Description
Extract additional metadata for user accounts (``author``, ``user``)
* ``based_in``
* ``location_accurate``
* ``name_changes``
* ``source``
Note
This requires 1 additional HTTP request per user.
extractor.twitter.pinned
------------------------
Type

View File

@@ -881,6 +881,7 @@
"limit" : 50,
"locked" : "abort",
"logout" : true,
"metadata-user": false,
"pinned" : false,
"quoted" : false,
"ratelimit" : "wait",

View File

@@ -572,6 +572,15 @@ class TwitterExtractor(Extractor):
url = entities["url"]["urls"][0]
udata["url"] = url.get("expanded_url") or url.get("url")
if self.config("metadata-user", False) and (
about := self.api.user_about_account(
udata["name"]).get("about_profile")):
udata["source"] = about.get("source")
udata["based_in"] = about.get("account_based_in")
udata["location_accurate"] = about.get("location_accurate")
udata["name_changes"] = (d := about.get(
"username_changes")) and d.get("count") or 0
return udata
def _assign_user(self, user):
@@ -1692,6 +1701,13 @@ class TwitterAPI():
}
return self._call(endpoint, params)["data"]["user"]["result"]
@memcache(keyarg=1)
def user_about_account(self, screen_name):
endpoint = "/graphql/zs_jFPFT78rBpXv9Z3U2YQ/AboutAccountQuery"
params = {"variables": self._json_dumps({"screenName": screen_name})}
return (self._call(endpoint, params)
["data"]["user_result_by_screen_name"]["result"])
def _user_id_by_screen_name(self, screen_name):
user = ()
try: