Skip to content

Commit 9ee50ba

Browse files
committed
Like and Unlike features [#28] Added media_like and media_unlike
1 parent 1882e39 commit 9ee50ba

File tree

3 files changed

+65
-1
lines changed

3 files changed

+65
-1
lines changed

instagrapi/media.py

+39
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import json
2+
import random
23
from typing import List
34
from copy import deepcopy
45
from urllib.parse import urlparse
@@ -238,3 +239,41 @@ def media_comment(self, media_id: str, text: str) -> Comment:
238239
),
239240
)
240241
return extract_comment(result["comment"])
242+
243+
def media_like(self, media_id: str) -> bool:
244+
"""Like media
245+
"""
246+
assert self.user_id, "Login required"
247+
media_id = self.media_id(media_id)
248+
data = {
249+
"inventory_source": "media_or_ad",
250+
"media_id": media_id,
251+
"radio_type": "wifi-none",
252+
"is_carousel_bumped_post": "false",
253+
"container_module": "feed_timeline",
254+
"feed_position": str(random.randint(0, 6))
255+
}
256+
result = self.private_request(
257+
f"media/{media_id}/like/",
258+
self.with_action_data(data)
259+
)
260+
return result['status'] == 'ok'
261+
262+
def media_unlike(self, media_id: str) -> bool:
263+
"""Unlike media
264+
"""
265+
assert self.user_id, "Login required"
266+
media_id = self.media_id(media_id)
267+
data = {
268+
"inventory_source": "media_or_ad",
269+
"media_id": media_id,
270+
"radio_type": "wifi-none",
271+
"is_carousel_bumped_post": "false",
272+
"container_module": "feed_timeline",
273+
"feed_position": str(random.randint(0, 6))
274+
}
275+
result = self.private_request(
276+
f"media/{media_id}/unlike/",
277+
self.with_action_data(data)
278+
)
279+
return result['status'] == 'ok'

setup.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
setup(
2222
name='instagrapi',
23-
version='1.2.7',
23+
version='1.2.8',
2424
author='Mikhail Andreev',
2525
author_email='[email protected]',
2626
license='MIT',

tests.py

+25
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,31 @@ def test_media_comment(self):
390390
for field in ["pk", "username", "full_name", "profile_pic_url"]:
391391
self.assertIn(field, user_fields)
392392

393+
def test_media_like_by_pk(self):
394+
media_pk = self.api.media_pk_from_url(
395+
"https://www.instagram.com/p/ByU3LAslgWY/"
396+
)
397+
self.assertTrue(
398+
self.api.media_like(media_pk)
399+
)
400+
401+
def test_media_like_and_unlike(self):
402+
media_pk = self.api.media_pk_from_url(
403+
"https://www.instagram.com/p/B3mr1-OlWMG/"
404+
)
405+
self.assertTrue(self.api.media_unlike(media_pk))
406+
media = self.api.media_info_v1(media_pk)
407+
like_count = int(media.like_count)
408+
# like
409+
self.assertTrue(self.api.media_like(media.id))
410+
media = self.api.media_info_v1(media_pk) # refresh after like
411+
new_like_count = int(media.like_count)
412+
self.assertEqual(new_like_count, like_count + 1)
413+
# unlike
414+
self.assertTrue(self.api.media_unlike(media.id))
415+
media = self.api.media_info_v1(media_pk) # refresh after unlike
416+
self.assertEqual(media.like_count, like_count)
417+
393418

394419
class ClientCompareExtractTestCase(ClientPrivateTestCase):
395420
def assertLocation(self, v1, gql):

0 commit comments

Comments
 (0)