Skip to content

Commit 614e1a5

Browse files
committed
[twitter] implement 'metadata-user' option (#8984)
1 parent 2cbd974 commit 614e1a5

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

docs/configuration.rst

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6554,6 +6554,23 @@ Description
65546554
Logout and retry as guest when access to another user's Tweets is blocked.
65556555

65566556

6557+
extractor.twitter.metadata-user
6558+
-------------------------------
6559+
Type
6560+
``bool``
6561+
Default
6562+
``false``
6563+
Description
6564+
Extract additional metadata for user accounts (``author``, ``user``)
6565+
6566+
* ``based_in``
6567+
* ``location_accurate``
6568+
* ``name_changes``
6569+
* ``source``
6570+
Note
6571+
This requires 1 additional HTTP request per user.
6572+
6573+
65576574
extractor.twitter.pinned
65586575
------------------------
65596576
Type

docs/gallery-dl.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -881,6 +881,7 @@
881881
"limit" : 50,
882882
"locked" : "abort",
883883
"logout" : true,
884+
"metadata-user": false,
884885
"pinned" : false,
885886
"quoted" : false,
886887
"ratelimit" : "wait",

gallery_dl/extractor/twitter.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,6 +572,15 @@ def _transform_user(self, user):
572572
url = entities["url"]["urls"][0]
573573
udata["url"] = url.get("expanded_url") or url.get("url")
574574

575+
if self.config("metadata-user", False) and (
576+
about := self.api.user_about_account(
577+
udata["name"]).get("about_profile")):
578+
udata["source"] = about.get("source")
579+
udata["based_in"] = about.get("account_based_in")
580+
udata["location_accurate"] = about.get("location_accurate")
581+
udata["name_changes"] = (d := about.get(
582+
"username_changes")) and d.get("count") or 0
583+
575584
return udata
576585

577586
def _assign_user(self, user):
@@ -1692,6 +1701,13 @@ def user_by_screen_name(self, screen_name):
16921701
}
16931702
return self._call(endpoint, params)["data"]["user"]["result"]
16941703

1704+
@memcache(keyarg=1)
1705+
def user_about_account(self, screen_name):
1706+
endpoint = "/graphql/zs_jFPFT78rBpXv9Z3U2YQ/AboutAccountQuery"
1707+
params = {"variables": self._json_dumps({"screenName": screen_name})}
1708+
return (self._call(endpoint, params)
1709+
["data"]["user_result_by_screen_name"]["result"])
1710+
16951711
def _user_id_by_screen_name(self, screen_name):
16961712
user = ()
16971713
try:

0 commit comments

Comments
 (0)