import json
from ..compatpatch import ClientCompatPatch
class CollectionsEndpointsMixin(object):
"""For endpoints in related to collections functionality."""
def list_collections(self):
return self._call_api('collections/list/')
def collection_feed(self, collection_id, **kwargs):
"""
Get the items in a collection.
:param collection_id: Collection ID
:return:
"""
endpoint = 'feed/collection/{collection_id!s}/'.format(**{'collection_id': collection_id})
res = self._call_api(endpoint, query=kwargs)
if self.auto_patch and res.get('items'):
[ClientCompatPatch.media(m['media'], drop_incompat_keys=self.drop_incompat_keys)
for m in res.get('items', []) if m.get('media')]
return res
def create_collection(self, name, added_media_ids=None):
"""
Create a new collection.
:param name: Name for the collection
:param added_media_ids: list of media_ids
:return:
.. code-block:: javascript
{
"status": "ok",
"collection_id": "1700000000123",
"cover_media": {
"media_type": 1,
"original_width": 1080,
"original_height": 1080,
"id": 1492726080000000,
"image_versions2": {
"candidates": [
{
"url": "http://scontent-xx4-1.cdninstagram.com/...123.jpg",
"width": 1080,
"height": 1080
},
...
]
}
},
"collection_name": "A Collection"
}
"""
params = {'name': name}
if added_media_ids and isinstance(added_media_ids, str):
added_media_ids = [added_media_ids]
if added_media_ids:
params['added_media_ids'] = json.dumps(added_media_ids, separators=(',', ':'))
params.update(self.authenticated_params)
return self._call_api('collections/create/', params=params)
def edit_collection(self, collection_id, added_media_ids):
"""
Add media IDs to an existing collection.
:param collection_id: Collection ID
:param added_media_ids: list of media IDs
:return: Returns same object as :meth:`create_collection`
"""
if isinstance(added_media_ids, str):
added_media_ids = [added_media_ids]
params = {
'added_media_ids': json.dumps(added_media_ids, separators=(',', ':'))
}
params.update(self.authenticated_params)
endpoint = 'collections/{collection_id!s}/edit/'.format(**{'collection_id': collection_id})
return self._call_api(endpoint, params=params)
def delete_collection(self, collection_id):
"""
Delete a collection.
:param collection_id: Collection ID
:return:
.. code-block:: javascript
{
"status": "ok"
}
"""
params = self.authenticated_params
endpoint = 'collections/{collection_id!s}/delete/'.format(**{'collection_id': collection_id})
return self._call_api(endpoint, params=params)