[instagram]
it is now possible to use 'id:…' instead of a user's screen name:
- https://www.instagram.com/instagram/
- https://www.instagram.com/id:25025320/
similar to the same functionality for twitter:
a3b473bd2f
for /tagged/ URLs, using a user ID will only have 'tagged_owner_id'
defined. 'tagged_username' and 'tagged_full_name', which are available
when using a screen name, will not be defined.
This commit is contained in:
@@ -140,10 +140,21 @@ class InstagramExtractor(Extractor):
|
|||||||
screen_name)
|
screen_name)
|
||||||
headers = {
|
headers = {
|
||||||
"Referer": "https://www.instagram.com/{}/".format(screen_name),
|
"Referer": "https://www.instagram.com/{}/".format(screen_name),
|
||||||
|
"X-CSRFToken" : self.csrf_token,
|
||||||
"X-IG-App-ID" : "936619743392459",
|
"X-IG-App-ID" : "936619743392459",
|
||||||
|
"X-IG-WWW-Claim" : self.www_claim,
|
||||||
"X-Requested-With": "XMLHttpRequest",
|
"X-Requested-With": "XMLHttpRequest",
|
||||||
}
|
}
|
||||||
return self.request(url, headers=headers).json()["graphql"]["user"]
|
cookies = {
|
||||||
|
"csrftoken": self.csrf_token,
|
||||||
|
}
|
||||||
|
return self.request(
|
||||||
|
url, headers=headers, cookies=cookies).json()["graphql"]["user"]
|
||||||
|
|
||||||
|
def _uid_by_screen_name(self, screen_name):
|
||||||
|
if screen_name.startswith("id:"):
|
||||||
|
return screen_name[3:]
|
||||||
|
return self._user_by_screen_name(screen_name)["id"]
|
||||||
|
|
||||||
def _media_by_id(self, post_id):
|
def _media_by_id(self, post_id):
|
||||||
endpoint = "/v1/media/{}/info/".format(post_id)
|
endpoint = "/v1/media/{}/info/".format(post_id)
|
||||||
@@ -450,6 +461,7 @@ class InstagramUserExtractor(InstagramExtractor):
|
|||||||
test = (
|
test = (
|
||||||
("https://www.instagram.com/instagram/"),
|
("https://www.instagram.com/instagram/"),
|
||||||
("https://www.instagram.com/instagram/?hl=en"),
|
("https://www.instagram.com/instagram/?hl=en"),
|
||||||
|
("https://www.instagram.com/id:25025320/"),
|
||||||
)
|
)
|
||||||
|
|
||||||
def items(self):
|
def items(self):
|
||||||
@@ -475,10 +487,8 @@ class InstagramPostsExtractor(InstagramExtractor):
|
|||||||
})
|
})
|
||||||
|
|
||||||
def posts(self):
|
def posts(self):
|
||||||
user = self._user_by_screen_name(self.item)
|
|
||||||
|
|
||||||
query_hash = "69cba40317214236af40e7efa697781d"
|
query_hash = "69cba40317214236af40e7efa697781d"
|
||||||
variables = {"id": user["id"], "first": 50}
|
variables = {"id": self._uid_by_screen_name(self.item), "first": 50}
|
||||||
return self._pagination_graphql(query_hash, variables)
|
return self._pagination_graphql(query_hash, variables)
|
||||||
|
|
||||||
|
|
||||||
@@ -497,7 +507,12 @@ class InstagramTaggedExtractor(InstagramExtractor):
|
|||||||
})
|
})
|
||||||
|
|
||||||
def metadata(self):
|
def metadata(self):
|
||||||
self.user = user = self._user_by_screen_name(self.item)
|
if self.item.startswith("id:"):
|
||||||
|
self.user_id = self.item[3:]
|
||||||
|
return {"tagged_owner_id": self.user_id}
|
||||||
|
|
||||||
|
user = self._user_by_screen_name(self.item)
|
||||||
|
self.user_id = user["id"]
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"tagged_owner_id" : user["id"],
|
"tagged_owner_id" : user["id"],
|
||||||
@@ -506,7 +521,7 @@ class InstagramTaggedExtractor(InstagramExtractor):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def posts(self):
|
def posts(self):
|
||||||
endpoint = "/v1/usertags/{}/feed/".format(self.user["id"])
|
endpoint = "/v1/usertags/{}/feed/".format(self.user_id)
|
||||||
params = {"count": 50}
|
params = {"count": 50}
|
||||||
return self._pagination_api(endpoint, params)
|
return self._pagination_api(endpoint, params)
|
||||||
|
|
||||||
@@ -521,10 +536,8 @@ class InstagramChannelExtractor(InstagramExtractor):
|
|||||||
})
|
})
|
||||||
|
|
||||||
def posts(self):
|
def posts(self):
|
||||||
user = self._user_by_screen_name(self.item)
|
|
||||||
|
|
||||||
query_hash = "bc78b344a68ed16dd5d7f264681c4c76"
|
query_hash = "bc78b344a68ed16dd5d7f264681c4c76"
|
||||||
variables = {"id": user["id"], "first": 50}
|
variables = {"id": self._uid_by_screen_name(self.item), "first": 50}
|
||||||
return self._pagination_graphql(query_hash, variables)
|
return self._pagination_graphql(query_hash, variables)
|
||||||
|
|
||||||
|
|
||||||
@@ -535,10 +548,8 @@ class InstagramSavedExtractor(InstagramExtractor):
|
|||||||
test = ("https://www.instagram.com/instagram/saved/",)
|
test = ("https://www.instagram.com/instagram/saved/",)
|
||||||
|
|
||||||
def posts(self):
|
def posts(self):
|
||||||
user = self._user_by_screen_name(self.item)
|
|
||||||
|
|
||||||
query_hash = "2ce1d673055b99250e93b6f88f878fde"
|
query_hash = "2ce1d673055b99250e93b6f88f878fde"
|
||||||
variables = {"id": user["id"], "first": 50}
|
variables = {"id": self._uid_by_screen_name(self.item), "first": 50}
|
||||||
return self._pagination_graphql(query_hash, variables)
|
return self._pagination_graphql(query_hash, variables)
|
||||||
|
|
||||||
|
|
||||||
@@ -739,7 +750,7 @@ class InstagramStoriesExtractor(InstagramExtractor):
|
|||||||
if self.highlight_id:
|
if self.highlight_id:
|
||||||
reel_id = "highlight:" + self.highlight_id
|
reel_id = "highlight:" + self.highlight_id
|
||||||
else:
|
else:
|
||||||
reel_id = self._user_by_screen_name(self.user)["id"]
|
reel_id = self._uid_by_screen_name(self.item)
|
||||||
|
|
||||||
endpoint = "/v1/feed/reels_media/"
|
endpoint = "/v1/feed/reels_media/"
|
||||||
params = {"reel_ids": reel_id}
|
params = {"reel_ids": reel_id}
|
||||||
@@ -764,9 +775,8 @@ class InstagramHighlightsExtractor(InstagramExtractor):
|
|||||||
test = ("https://www.instagram.com/instagram/highlights",)
|
test = ("https://www.instagram.com/instagram/highlights",)
|
||||||
|
|
||||||
def posts(self):
|
def posts(self):
|
||||||
user = self._user_by_screen_name(self.item)
|
endpoint = "/v1/highlights/{}/highlights_tray/".format(
|
||||||
|
self._uid_by_screen_name(self.item))
|
||||||
endpoint = "/v1/highlights/{}/highlights_tray/".format(user["id"])
|
|
||||||
tray = self._request_api(endpoint)["tray"]
|
tray = self._request_api(endpoint)["tray"]
|
||||||
reel_ids = [highlight["id"] for highlight in tray]
|
reel_ids = [highlight["id"] for highlight in tray]
|
||||||
|
|
||||||
@@ -795,7 +805,7 @@ class InstagramReelsExtractor(InstagramExtractor):
|
|||||||
def posts(self):
|
def posts(self):
|
||||||
endpoint = "/v1/clips/user/"
|
endpoint = "/v1/clips/user/"
|
||||||
data = {
|
data = {
|
||||||
"target_user_id": self._user_by_screen_name(self.item)["id"],
|
"target_user_id": self._uid_by_screen_name(self.item),
|
||||||
"page_size" : "50",
|
"page_size" : "50",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user