Source code for instapi.endpoints.igtv
import re
from ..compatpatch import ClientCompatPatch
USER_CHANNEL_ID_RE = r'^user_[1-9]\d+$'
class IGTVEndpointsMixin(object):
"""For endpoints in ``/igtv/``."""
def tvchannel(self, channel_id, **kwargs):
"""
Get channel
:param channel_id: One of 'for_you', 'chrono_following', 'popular', 'continue_watching'
(as returned by :meth:`tvguide`) or for a user 'user_12345' where user_id = '12345'
"""
if channel_id not in (
'for_you',
'chrono_following',
'popular',
'continue_watching',
) and not re.match(USER_CHANNEL_ID_RE, channel_id):
raise ValueError('Invalid channel_id: {}'.format(channel_id))
endpoint = 'igtv/channel/'
params = {'id': channel_id}
params.update(self.authenticated_params)
if kwargs:
params.update(kwargs)
res = self._call_api(endpoint, params=params)
if self.auto_patch:
[
ClientCompatPatch.media(m, drop_incompat_keys=self.drop_incompat_keys)
for m in res.get('items', [])
]
return res
def tvguide(self):
"""TV guide to popular, following, suggested channels, etc"""
res = self._call_api('igtv/tv_guide/')
if self.auto_patch:
for c in res.get('channels', []):
[
ClientCompatPatch.media(
m, drop_incompat_keys=self.drop_incompat_keys
)
for m in c.get('items', [])
]
[
ClientCompatPatch.media(m, drop_incompat_keys=self.drop_incompat_keys)
for m in res.get('my_channel', {}).get('items', [])
]
return res
def search_igtv(self, text):
"""
Search igtv
:param text: Search term
"""
text = text.strip()
if not text.strip():
raise ValueError('Search text cannot be empty')
res = self._call_api('igtv/search/', query={'query': text})
if self.auto_patch:
for r in res.get('results', []):
[
ClientCompatPatch.media(
m, drop_incompat_keys=self.drop_incompat_keys
)
for m in r.get('channel', {}).get('items', [])
]
if r.get('user'):
ClientCompatPatch.user(
r['user'], drop_incompat_keys=self.drop_incompat_keys
)
return res