Skip to content

Commit d222b77

Browse files
committed
Implement list of likes in Media object [#74] Added cl.media_likers -> List[UserShort]
1 parent 066f3ac commit d222b77

File tree

5 files changed

+40
-23
lines changed

5 files changed

+40
-23
lines changed

README.md

+22-19
Original file line numberDiff line numberDiff line change
@@ -160,20 +160,22 @@ Viewing and editing publications (medias)
160160
* `code` - Short code (slug for media), example `BjNLpA1AhXM` from `"https://www.instagram.com/p/BjNLpA1AhXM/"`
161161
* `url` - URL to media publication
162162

163-
| Method | Return | Description |
164-
| -------------------------------------------------- | ------------------ | ------------------------------------------------------------- |
165-
| media_id(media_pk: int) | str | Return media_id by media_pk (e.g. 2277033926878261772 -> 2277033926878261772_1903424587) |
166-
| media_pk(media_id: str) | int | Return media_pk by media_id (e.g. 2277033926878261772_1903424587 -> 2277033926878261772) |
167-
| media_pk_from_code(code: str) | int | Return media_pk |
168-
| media_pk_from_url(url: str) | int | Return media_pk |
169-
| user_medias(user_id: int, amount: int = 20) | List\[Media] | Get list of medias by user_id |
170-
| media_info(media_pk: int) | Media | Return media info |
171-
| media_delete(media_pk: int) | bool | Delete media |
172-
| media_edit(media_pk: int, caption: str, title: str, usertags: List[Usertag], location: Location) | dict | Change caption for media |
173-
| media_user(media_pk: int) | User | Get user info for media |
174-
| media_oembed(url: str) | MediaOembed | Return short media info by media URL |
175-
| media_like(media_id: str) | bool | Like media |
176-
| media_unlike(media_id: str) | bool | Unlike media |
163+
| Method | Return | Description |
164+
| --------------------------------------------------------------- | ------------------ | -------------------------------------------- |
165+
| media_id(media_pk: int) | str | Return media_id by media_pk (e.g. 2277033926878261772 -> 2277033926878261772_1903424587)
166+
| media_pk(media_id: str) | int | Return media_pk by media_id (e.g. 2277033926878261772_1903424587 -> 2277033926878261772)
167+
| media_pk_from_code(code: str) | int | Return media_pk
168+
| media_pk_from_url(url: str) | int | Return media_pk
169+
| user_medias(user_id: int, amount: int = 20) | List\[Media] | Get list of medias by user_id
170+
| media_info(media_pk: int) | Media | Return media info
171+
| media_delete(media_pk: int) | bool | Delete media
172+
| media_edit(media_pk: int, caption: str, title: str, usertags: List[Usertag], location: Location) | dict | Change caption for media
173+
| media_user(media_pk: int) | User | Get user info for media
174+
| media_oembed(url: str) | MediaOembed | Return short media info by media URL
175+
| media_like(media_id: str) | bool | Like media
176+
| media_unlike(media_id: str) | bool | Unlike media
177+
| media_seen(media_ids: List[str], skipped_media_ids: List[str]) | bool | Mark a story as seen
178+
| media_likers(media_id: str) | List\[UserShort] | Return list of users who liked this post
177179

178180
Example:
179181

@@ -255,11 +257,12 @@ Example:
255257

256258
#### Story
257259

258-
| Method | Return | Description |
259-
| -------------------------------------------------- | ----------- | ------------------------------------------------------------- |
260-
| user_stories(user_id: int, amount: int = None) | List[Story] | Get list of stories by user_id |
261-
| story_info(story_pk: int, use_cache: bool = True) | Story | Return story info |
262-
| story_delete(story_pk: int) | bool | Delete story |
260+
| Method | Return | Description
261+
| --------------------------------------------------------------- | ----------- | ---------------------------------- |
262+
| user_stories(user_id: int, amount: int = None) | List[Story] | Get list of stories by user_id
263+
| story_info(story_pk: int, use_cache: bool = True) | Story | Return story info
264+
| story_delete(story_pk: int) | bool | Delete story
265+
| story_seen(story_pks: List[int], skipped_story_pks: List[int]) | bool | Mark a story as seen
263266

264267

265268
#### Comment

instagrapi/mixins/collection.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def collections(self) -> List[Collection]:
2424
while True:
2525
try:
2626
result = self.private_request(
27-
"/collections/list/",
27+
"collections/list/",
2828
params={
2929
"collection_types": '["ALL_MEDIA_AUTO_COLLECTION","PRODUCT_AUTO_COLLECTION","MEDIA"]',
3030
"max_id": next_max_id,

instagrapi/mixins/media.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
from instagrapi.exceptions import (ClientError, ClientLoginRequired,
1010
ClientNotFoundError, MediaNotFound)
1111
from instagrapi.extractors import (extract_location, extract_media_gql,
12-
extract_media_oembed, extract_media_v1)
12+
extract_media_oembed, extract_media_v1,
13+
extract_user_short)
1314
from instagrapi.types import Location, Media, UserShort, Usertag
1415
from instagrapi.utils import InstagramIdCodec, json_value
1516

@@ -565,3 +566,8 @@ def gen(media_ids):
565566
self.with_default_data(data)
566567
)
567568
return result["status"] == "ok"
569+
570+
def media_likers(self, media_id: str) -> List[UserShort]:
571+
media_id = self.media_id(media_id)
572+
result = self.private_request(f"media/{media_id}/likers/")
573+
return [extract_user_short(u) for u in result['users']]

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.5',
32+
version='1.4.6',
3333
author='Mikhail Andreev',
3434
author_email='[email protected]',
3535
license='MIT',

tests.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,13 @@ def test_media_like_and_unlike(self):
428428
media = self.api.media_info_v1(media_pk) # refresh after unlike
429429
self.assertEqual(media.like_count, like_count)
430430

431+
def test_media_likers(self):
432+
media = self.api.user_medias(self.api.user_id, amount=3)[-1]
433+
self.assertIsInstance(media, Media)
434+
likers = self.api.media_likers(media.pk)
435+
self.assertTrue(len(likers) > 0)
436+
self.assertIsInstance(likers[0], UserShort)
437+
431438

432439
class ClientCommentTestCase(ClientPrivateTestCase):
433440

@@ -1206,11 +1213,12 @@ def test_user_stories(self):
12061213

12071214
def test_story_info(self):
12081215
user_id = self.api.user_id_from_username("dhbastards")
1209-
stories = self.api.user_stories(user_id, 1)
1216+
stories = self.api.user_stories(user_id, amount=1)
12101217
story = self.api.story_info(stories[0].pk)
12111218
self.assertIsInstance(story, Story)
12121219
story = self.api.story_info(stories[0].id)
12131220
self.assertIsInstance(story, Story)
1221+
self.assertTrue(self.api.story_seen(story.pk))
12141222

12151223

12161224
if __name__ == '__main__':

0 commit comments

Comments
 (0)