[twitter] implement 'metadata-user' option (#8984)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -881,6 +881,7 @@
|
||||
"limit" : 50,
|
||||
"locked" : "abort",
|
||||
"logout" : true,
|
||||
"metadata-user": false,
|
||||
"pinned" : false,
|
||||
"quoted" : false,
|
||||
"ratelimit" : "wait",
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user