Skip to content

Commit d491564

Browse files
committed
[instagram] add 'user-strategy' option (#8978 #9025)
1 parent a8376f2 commit d491564

File tree

3 files changed

+33
-13
lines changed

3 files changed

+33
-13
lines changed

docs/configuration.rst

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3881,6 +3881,22 @@ Description
38813881
Cache user data in memory
38823882

38833883

3884+
extractor.instagram.user-strategy
3885+
---------------------------------
3886+
Type
3887+
``string``
3888+
Default
3889+
``"topsearch"``
3890+
Description
3891+
Selects how to retrieve user profile data.
3892+
3893+
``"topsearch"`` | ``"search"``
3894+
Use `topsearch` results
3895+
``"web_profile_info"`` | ``"info"``
3896+
| Use `web_profile_info` results
3897+
| (high liklyhood of ``429 Too Many Requests`` errors)
3898+
3899+
38843900
extractor.instagram.videos
38853901
--------------------------
38863902
Type

docs/gallery-dl.conf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,8 @@
474474
"order-files": "asc",
475475
"order-posts": "asc",
476476
"previews" : false,
477-
"user-cache" : "disk",
477+
"user-cache" : "disk",
478+
"user-strategy": "topsearch",
478479
"videos" : true,
479480
"warn-images": true,
480481
"warn-videos": true,

gallery_dl/extractor/instagram.py

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -811,6 +811,13 @@ def __init__(self, extractor):
811811
self.user_by_name = _cache(36500*86400, 0)(self.user_by_name)
812812
self.user_by_search = _cache(36500*86400, 0)(self.user_by_search)
813813

814+
strategy = self.extractor.config("user-strategy")
815+
if strategy is not None and strategy in {
816+
"web_profile_info", "profile_info", "info"}:
817+
self._topsearch = False
818+
else:
819+
self._topsearch = True
820+
814821
def guide(self, guide_id):
815822
endpoint = "/v1/guides/web_info/"
816823
params = {"guide_id": guide_id}
@@ -899,18 +906,14 @@ def user_by_search(self, username):
899906
return user
900907

901908
def user_by_screen_name(self, screen_name):
902-
if user := self.user_by_search(screen_name):
903-
return user
904-
905-
self.user_by_search.invalidate(screen_name)
906-
self.extractor.log.warning(
907-
"Failed to find profile '%s' via search. "
908-
"Trying 'web_profile_info' fallback", screen_name)
909-
910-
if user := self.user_by_name(screen_name):
911-
return user
912-
913-
self.user_by_name.invalidate(screen_name)
909+
if self._topsearch:
910+
if user := self.user_by_search(screen_name):
911+
return user
912+
self.user_by_search.invalidate(screen_name)
913+
else:
914+
if user := self.user_by_name(screen_name):
915+
return user
916+
self.user_by_name.invalidate(screen_name)
914917
raise exception.NotFoundError("user")
915918

916919
def user_id(self, screen_name, check_private=True):

0 commit comments

Comments
 (0)