Skip to content

Commit 066f3ac

Browse files
committed
Create method view count for story objects [#59] Added story_seen/media_seen
1 parent 36f539e commit 066f3ac

File tree

5 files changed

+63
-8
lines changed

5 files changed

+63
-8
lines changed

instagrapi/config.py

-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
SIG_KEY_VERSION = "4"
22
IG_SIG_KEY = "a86109795736d73c9a94172cd9b736917d7d94ca61c9101164894b3f0d43bef4"
3-
43
API_DOMAIN = "i.instagram.com"
5-
API_URL = "https://{domain}/api/v1/".format(domain=API_DOMAIN)
64

75
# Instagram 134.0.0.26.121
86
# Android (26/8.0.0;

instagrapi/mixins/media.py

+39
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import random
33
import time
44
from copy import deepcopy
5+
from datetime import datetime
56
from typing import Dict, List
67
from urllib.parse import urlparse
78

@@ -526,3 +527,41 @@ def user_medias(self, user_id: int, amount: int = 50) -> List[Media]:
526527
# it is better to try through a Private API)
527528
medias = self.user_medias_v1(user_id, amount)
528529
return medias
530+
531+
def media_seen(self, media_ids: List[str], skipped_media_ids: List[str] = []):
532+
"""
533+
Mark a media as seen
534+
535+
Parameters
536+
----------
537+
media_id: str
538+
539+
Returns
540+
-------
541+
bool
542+
A boolean value
543+
"""
544+
545+
def gen(media_ids):
546+
result = {}
547+
for media_id in media_ids:
548+
media_pk, user_id = self.media_id(media_id).split('_')
549+
end = int(datetime.now().timestamp())
550+
begin = end - random.randint(100, 3000)
551+
result[f"{media_pk}_{user_id}_{user_id}"] = [f"{begin}_{end}"]
552+
return result
553+
554+
data = {
555+
"container_module": "feed_timeline",
556+
"live_vods_skipped": {},
557+
"nuxes_skipped": {},
558+
"nuxes": {},
559+
"reels": gen(media_ids),
560+
"live_vods": {},
561+
"reel_media_skipped": gen(skipped_media_ids)
562+
}
563+
result = self.private_request(
564+
"/v2/media/seen/?reel=1&live_vod=0",
565+
self.with_default_data(data)
566+
)
567+
return result["status"] == "ok"

instagrapi/mixins/private.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -174,15 +174,16 @@ def _send_private_request(
174174
self.last_response = None
175175
self.last_json = last_json = {} # for Sentry context in traceback
176176
self.private.headers.update(self.base_headers)
177-
if endpoint.startswith("/"):
178-
endpoint = endpoint[1:]
179177
if headers:
180178
self.private.headers.update(headers)
181179
if not login:
182180
time.sleep(self.request_timeout)
183181
if self.user_id and login:
184182
raise Exception(f"User already login ({self.user_id})")
185183
try:
184+
if not endpoint.startswith('/'):
185+
endpoint = f"/v1/{endpoint}"
186+
api_url = f"https://{config.API_DOMAIN}/api{endpoint}"
186187
if data: # POST
187188
# Client.direct_answer raw dict
188189
# data = json.dumps(data)
@@ -192,11 +193,10 @@ def _send_private_request(
192193
if extra_sig:
193194
data += "&".join(extra_sig)
194195
response = self.private.post(
195-
config.API_URL + endpoint, data=data, params=params
196+
api_url, data=data, params=params
196197
)
197198
else: # GET
198-
response = self.private.get(
199-
config.API_URL + endpoint, params=params)
199+
response = self.private.get(api_url, params=params)
200200
self.logger.debug(
201201
"private_request %s: %s (%s)", response.status_code, response.url, response.text
202202
)

instagrapi/mixins/story.py

+18
Original file line numberDiff line numberDiff line change
@@ -126,3 +126,21 @@ def user_stories(self, user_id: int, amount: int = None) -> List[Story]:
126126
"""
127127
# TODO: Add user_stories_gql
128128
return self.user_stories_v1(user_id, amount)
129+
130+
def story_seen(self, story_pks: List[int], skipped_story_pks: List[int] = []):
131+
"""
132+
Mark a story as seen
133+
134+
Parameters
135+
----------
136+
story_pk: int
137+
138+
Returns
139+
-------
140+
bool
141+
A boolean value
142+
"""
143+
return self.media_seen(
144+
[self.media_id(mid) for mid in story_pks],
145+
[self.media_id(mid) for mid in skipped_story_pks]
146+
)

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
setup(
3131
name='instagrapi',
32-
version='1.4.4',
32+
version='1.4.5',
3333
author='Mikhail Andreev',
3434
author_email='[email protected]',
3535
license='MIT',

0 commit comments

Comments
 (0)