instagrapi 3.2.2__tar.gz → 3.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {instagrapi-3.2.2 → instagrapi-3.2.3}/PKG-INFO +4 -4
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/password.py +29 -4
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/private.py +3 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi.egg-info/PKG-INFO +4 -4
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi.egg-info/requires.txt +3 -3
- {instagrapi-3.2.2 → instagrapi-3.2.3}/pyproject.toml +4 -4
- {instagrapi-3.2.2 → instagrapi-3.2.3}/LICENSE +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/README.md +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/__init__.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/config.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/exceptions.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/extractors.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/image_util.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/__init__.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/account.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/album.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/attestation.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/auth.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/bloks.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/captcha.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/challenge.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/clip.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/collection.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/comment.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/crossposting.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/direct.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/explore.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/fbsearch.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/fundraiser.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/graphql.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/hashtag.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/highlight.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/igtv.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/insights.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/location.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/media.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/multiple_accounts.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/note.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/notification.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/photo.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/public.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/quicksnap.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/realtime.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/share.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/signup.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/story.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/timeline.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/totp.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/track.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/user.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/mixins/video.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/native/LICENSES.txt +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/native/bridge.go +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/native/contracts_test.go +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/native/go.mod +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/native/go.sum +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/native/patches.json +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/native/peer_contracts_test.go +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/realtime/__init__.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/realtime/client.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/realtime/fbns.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/realtime/mqttot.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/story.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/transports.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/types.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/utils/__init__.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/utils/auth.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/utils/ids.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/utils/iterators.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/utils/logging.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/utils/serialization.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/utils/timing.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/utils/upload.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/utils/validation.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/utils/video.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/utls.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/utls_build.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/utls_native.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi/zones.py +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi.egg-info/SOURCES.txt +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi.egg-info/dependency_links.txt +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/instagrapi.egg-info/top_level.txt +0 -0
- {instagrapi-3.2.2 → instagrapi-3.2.3}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: instagrapi
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.3
|
|
4
4
|
Summary: Fast and effective Instagram Private API wrapper
|
|
5
5
|
Author-email: Mark Subzeroid <143403577+subzeroid@users.noreply.github.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -46,16 +46,16 @@ Requires-Dist: h2<5,>=4.3; extra == "test"
|
|
|
46
46
|
Requires-Dist: mike==2.2.0; extra == "test"
|
|
47
47
|
Requires-Dist: setuptools==84.2.1; extra == "test"
|
|
48
48
|
Requires-Dist: markdown-include==0.8.1; extra == "test"
|
|
49
|
-
Requires-Dist: mkdocs-material==9.
|
|
49
|
+
Requires-Dist: mkdocs-material==9.8.0; extra == "test"
|
|
50
50
|
Requires-Dist: mkdocstrings[python]==1.0.8; extra == "test"
|
|
51
51
|
Requires-Dist: numpy>=1.25.0; extra == "test"
|
|
52
52
|
Requires-Dist: pip-audit==2.10.1; extra == "test"
|
|
53
53
|
Requires-Dist: pre-commit==4.7.0; extra == "test"
|
|
54
54
|
Requires-Dist: proglog<=1.0.0; extra == "test"
|
|
55
55
|
Requires-Dist: pytest-xdist==3.8.0; extra == "test"
|
|
56
|
-
Requires-Dist: pytest==9.
|
|
56
|
+
Requires-Dist: pytest==9.2.0; extra == "test"
|
|
57
57
|
Requires-Dist: python-dotenv>=0.10; extra == "test"
|
|
58
|
-
Requires-Dist: ruff==0.17.
|
|
58
|
+
Requires-Dist: ruff==0.17.3; extra == "test"
|
|
59
59
|
Dynamic: license-file
|
|
60
60
|
|
|
61
61
|
# instagrapi
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import base64
|
|
2
2
|
import time
|
|
3
3
|
|
|
4
|
+
import requests
|
|
4
5
|
from Cryptodome.Cipher import AES, PKCS1_v1_5
|
|
5
6
|
from Cryptodome.PublicKey import RSA
|
|
6
7
|
from Cryptodome.Random import get_random_bytes
|
|
7
8
|
|
|
9
|
+
from instagrapi.exceptions import ClientError
|
|
10
|
+
|
|
8
11
|
|
|
9
12
|
class PasswordMixin:
|
|
10
13
|
def password_encrypt(self, password):
|
|
@@ -36,7 +39,29 @@ class PasswordMixin:
|
|
|
36
39
|
return f"#PWD_INSTAGRAM:4:{timestamp}:{payload.decode()}"
|
|
37
40
|
|
|
38
41
|
def password_publickeys(self):
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
failure = None
|
|
43
|
+
try:
|
|
44
|
+
# Inspect the first response before retry/challenge handling can replace it.
|
|
45
|
+
self.private_requests_count += 1
|
|
46
|
+
self._send_private_request(
|
|
47
|
+
"launcher/sync/",
|
|
48
|
+
{"id": self.uuid, "server_config_retrieval": "1"},
|
|
49
|
+
login=True,
|
|
50
|
+
headers={"Authorization": self.authorization} if self.authorization else None,
|
|
51
|
+
return_response=True,
|
|
52
|
+
)
|
|
53
|
+
except ClientError as error:
|
|
54
|
+
failure = error
|
|
55
|
+
headers = self.last_response.headers if self.last_response is not None else {}
|
|
56
|
+
publickeyid = headers.get("ig-set-password-encryption-key-id")
|
|
57
|
+
publickey = headers.get("ig-set-password-encryption-pub-key")
|
|
58
|
+
if not publickeyid or not publickey:
|
|
59
|
+
if self.last_response is not None:
|
|
60
|
+
try:
|
|
61
|
+
self.last_response.raise_for_status()
|
|
62
|
+
except requests.HTTPError as error:
|
|
63
|
+
failure = error
|
|
64
|
+
raise ClientError(
|
|
65
|
+
"Instagram did not return the password encryption key", response=self.last_response
|
|
66
|
+
) from failure
|
|
67
|
+
return int(publickeyid), publickey
|
|
@@ -474,6 +474,7 @@ class PrivateRequestMixin:
|
|
|
474
474
|
headers=None,
|
|
475
475
|
extra_sig=None,
|
|
476
476
|
domain: str = None,
|
|
477
|
+
return_response=False,
|
|
477
478
|
):
|
|
478
479
|
self.last_response = None
|
|
479
480
|
self.last_json = last_json = {} # for Sentry context in traceback
|
|
@@ -533,6 +534,8 @@ class PrivateRequestMixin:
|
|
|
533
534
|
self.mid = mid
|
|
534
535
|
self.request_log(response)
|
|
535
536
|
self.last_response = response
|
|
537
|
+
if return_response:
|
|
538
|
+
return response
|
|
536
539
|
response.raise_for_status()
|
|
537
540
|
# last_json - for Sentry context in traceback
|
|
538
541
|
self.last_json = last_json = response.json()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: instagrapi
|
|
3
|
-
Version: 3.2.
|
|
3
|
+
Version: 3.2.3
|
|
4
4
|
Summary: Fast and effective Instagram Private API wrapper
|
|
5
5
|
Author-email: Mark Subzeroid <143403577+subzeroid@users.noreply.github.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -46,16 +46,16 @@ Requires-Dist: h2<5,>=4.3; extra == "test"
|
|
|
46
46
|
Requires-Dist: mike==2.2.0; extra == "test"
|
|
47
47
|
Requires-Dist: setuptools==84.2.1; extra == "test"
|
|
48
48
|
Requires-Dist: markdown-include==0.8.1; extra == "test"
|
|
49
|
-
Requires-Dist: mkdocs-material==9.
|
|
49
|
+
Requires-Dist: mkdocs-material==9.8.0; extra == "test"
|
|
50
50
|
Requires-Dist: mkdocstrings[python]==1.0.8; extra == "test"
|
|
51
51
|
Requires-Dist: numpy>=1.25.0; extra == "test"
|
|
52
52
|
Requires-Dist: pip-audit==2.10.1; extra == "test"
|
|
53
53
|
Requires-Dist: pre-commit==4.7.0; extra == "test"
|
|
54
54
|
Requires-Dist: proglog<=1.0.0; extra == "test"
|
|
55
55
|
Requires-Dist: pytest-xdist==3.8.0; extra == "test"
|
|
56
|
-
Requires-Dist: pytest==9.
|
|
56
|
+
Requires-Dist: pytest==9.2.0; extra == "test"
|
|
57
57
|
Requires-Dist: python-dotenv>=0.10; extra == "test"
|
|
58
|
-
Requires-Dist: ruff==0.17.
|
|
58
|
+
Requires-Dist: ruff==0.17.3; extra == "test"
|
|
59
59
|
Dynamic: license-file
|
|
60
60
|
|
|
61
61
|
# instagrapi
|
|
@@ -23,16 +23,16 @@ h2<5,>=4.3
|
|
|
23
23
|
mike==2.2.0
|
|
24
24
|
setuptools==84.2.1
|
|
25
25
|
markdown-include==0.8.1
|
|
26
|
-
mkdocs-material==9.
|
|
26
|
+
mkdocs-material==9.8.0
|
|
27
27
|
mkdocstrings[python]==1.0.8
|
|
28
28
|
numpy>=1.25.0
|
|
29
29
|
pip-audit==2.10.1
|
|
30
30
|
pre-commit==4.7.0
|
|
31
31
|
proglog<=1.0.0
|
|
32
32
|
pytest-xdist==3.8.0
|
|
33
|
-
pytest==9.
|
|
33
|
+
pytest==9.2.0
|
|
34
34
|
python-dotenv>=0.10
|
|
35
|
-
ruff==0.17.
|
|
35
|
+
ruff==0.17.3
|
|
36
36
|
|
|
37
37
|
[video]
|
|
38
38
|
decorator<6.0,>=4.0.2
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "instagrapi"
|
|
7
|
-
version = "3.2.
|
|
7
|
+
version = "3.2.3"
|
|
8
8
|
authors = [
|
|
9
9
|
{name = "Mark Subzeroid", email = "143403577+subzeroid@users.noreply.github.com"}
|
|
10
10
|
]
|
|
@@ -92,7 +92,7 @@ test = [
|
|
|
92
92
|
# https://github.com/jimporter/mike/issues/148
|
|
93
93
|
"setuptools==84.2.1",
|
|
94
94
|
"markdown-include==0.8.1",
|
|
95
|
-
"mkdocs-material==9.
|
|
95
|
+
"mkdocs-material==9.8.0",
|
|
96
96
|
# 1.0.7 supports pymdown-extensions 12.2 and requires Python >=3.11.
|
|
97
97
|
"mkdocstrings[python]==1.0.8",
|
|
98
98
|
"numpy>=1.25.0",
|
|
@@ -100,9 +100,9 @@ test = [
|
|
|
100
100
|
"pre-commit==4.7.0",
|
|
101
101
|
"proglog<=1.0.0",
|
|
102
102
|
"pytest-xdist==3.8.0",
|
|
103
|
-
"pytest==9.
|
|
103
|
+
"pytest==9.2.0",
|
|
104
104
|
"python-dotenv>=0.10",
|
|
105
|
-
"ruff==0.17.
|
|
105
|
+
"ruff==0.17.3",
|
|
106
106
|
]
|
|
107
107
|
|
|
108
108
|
[tool.setuptools]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|