Skip to main content

Fast and effective RadioJavan Private API

Project description

radiojavanapi

radiojavanapi is a Python library for accessing RadioJavan's features. With this library you can create Telegram Bots with ease and simplicity.

Support Python >= 3.6

RadioJavan API valid for 8 February 2021 (last reverse-engineering check)

Features

  • Get full info of a Song/Video/Podcast/Story/Playlist/Artist/Album/Account
  • Like/Unlike Song/Video/Podcast/Story
  • Follow/Unfollow a Artist/MusicPlaylist
  • Create/Rename/Delete a playlist and Add song/video to it or Remove from it
  • Edit/Deactive account
  • Upload/Remove profile photo
  • Search and get trending/popular/... medias
    and much more else

Install

pip install git+https://github.com/xHossein/radiojavanapi

Usage

Create the client

from radiojavanapi import Client
from radiojavanapi.exceptions import *

# Create a Client object. and set a proxy (Optional)
client = Client()
client.set_proxy({'http':'socks5://127.0.0.1:8087'})

Please note that set_proxy only gets proxy as dict.

Log in to radiojavan (Optional)
for some methods you must been authorized.

from radiojavanapi.exceptions import *

try:
    client.login(email="YOUR EMAIL", password="YOUR PASSWORD")
except BadCredentials:
    # raise due to wrong email or password
    # do something

Types

The current types are in types.py:

Model Description
Account Full private info for your account (e.g. email, stories)
Song Full public Song(mp3) data
Video Full public Video data
Podcast Full public Podcast data
Artist Full public Artist data
MusicPlaylist Full public Music Playlist data
VideoPlaylist Full public Video Playlist data
Album Full public Album data
Story Full public Story(selfies) data
Profile Full public data of user who uploaded story
ComingSoon Full public data of coming soon song/video
SearchResults Result of search

Account

This is your authorized account

Method Return Description Login Require
Client() bool Init radiojavanapi client NO
login(email: str, password: str) bool Login by email and password NO
set_proxy(proxy: dict) None Support socks and http/https proxy NO
unset_proxy() None Remove proxy NO
account_info() Account Get private info for your account (e.g. email, stories) YES
account_edit(data: dict) Account Change profile data (e.g. email, firstname, lastname, username) YES
change_photo(photo_path: str) bool Set photo as your profile photo (support jpg/png) YES
remove_photo() Account Remove your current profile photo YES
change_password(password: str) bool Change account password YES
deactive_account() bool Deactive the account and logout YES
my_following() List[str] Get list of artists name which you follow YES
my_playlists() Dict Return video & music playlist's id and title as dict YES

Example:

>>> client.account_info().dict()
{'name': 'Hossein xxxxxxx',
'firstname': 'Hossein',
'lastname': 'xxxxxxx',
'display_name': '@Hossein',
'username': 'xhosseinxxx',
'share_link': HttpUrl('https://rj.app/u/xhosseinxxx',...'),
'email': 'testacc@test.com',
'has_subscription': False,
'custom_photo': False,
'photo': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/profiles/default-profile.jpg',...'),
'thumbnail': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/profiles/default-profile-thumb.jpg', ...'),
'playlists_count': 5,
'songs_count': 132,
'artists_count': 1,
'artists_name': ['Ashvan'],
'stories': []
}


>>> client.account_edit({'username':'your new username'})
# return Account object

>>> client.account_edit({'firstname':'fname','lastname':'lname','email':'new email'})
# return Account object

>>> client.change_photo('./folder/image.jpg')
True

>>> client.my_playlists()
{
'music_playlists': [
    {'id': 'f72225afg2da', 'title': 'test1'},
    {'id': '7222629c22f9', 'title': 'test2'}
    ],
'video_playlists': [
    {'id': '26276c622618', 'title': 'test1'},
    {'id': 'e6261s6c22c8', 'title': 'test2'},
    {'id': '9226c6c79sa3', 'title': 'test3'}
    ]
}



Song ( RJ api calls it mp3 )

Method Return Description Login Require
get_song_by_url(url: str) Song Return song info by site url (radiojavan.com) NO
get_song_by_id(id: int) Song Return song info by id NO
like_song(song: Song) bool Like a song YES
unlike_song(song: Song) bool UnLike a song YES
liked_songs() List[Song] Get list of songs you liked YES


Example:

>>> client.get_song_by_url('https://www.radiojavan.com/mp3s/mp3/Nikita-SheryM-Boom-Boom').dict()
{
'id': 94010,
'title': 'Nikita & SheryM - "Boom Boom"',
'artist': 'Nikita & SheryM',
'song': 'Boom Boom',
'likes': 6268,
'dislikes': 64,
'plays': 3837527,
'downloads': 3837527,
'type': 'mp3',
'item': None,
'album': None,
'date': 'Aug 7, 2020',
'created_at': '2020-08-07T18:38:55-04:00',
'duration': 201.665,
'permlink': 'Nikita-SheryM-Boom-Boom',
'link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/mp3/mp3-256/94010-e68b5de09360ffe.mp3',...),
'hq_link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/mp3/aac-256/94010-e68b5de09360ffe.m4a',...),
'lq_link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/mp3/aac-128/94010-e68b5de09360ffe.m4a',...), 
'hls_link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/mp3/mp3-hls/94010-e68b5de09360ffe/playlist.m3u8',...),
'hq_hls': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/mp3/mp3-hls/94010-e68b5de09360ffe/playlist.m3u8', ...),
'lq_hls': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/mp3/mp3-hls/94010-e68b5de09360ffe/file-96k.m3u8',...),
'comments_link': HttpUrl('https://www.radiojavan.com/services/comments?type=mp3&id=94010',...'),
'photo': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/mp3/nikita-sherym-boom-boom/1dbc026b08d8b4c.jpg',...),
'photo_player': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/mp3/nikita-sherym-boom-boom/d6374f71fc0bd15-player.jpg',...),
'share_link': HttpUrl('https://rj.app/m/dv2P1Xwq',...),
'thumbnail': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/mp3/nikita-sherym-boom-boom/1dbc026b08d8b4c-thumb.jpg',...),
'credit_tags': ['nikita', 'sherym'],
'credits': None,
'artist_tags': ['Nikita', 'SheryM'],
'lyric': 'موزیکامون بوم بوم بوم \nچشا رومه زوم زوم زوم\nبیا نزدیکتر پیشم انگار گوله آتیشم \nهمه پیکا بالاس بیا آ\n\nمیخوای که مال تو باشم \nرو کن چی داری تو واسم \nبعد یه سره حواسم از دست تو\n\nمستیم پع نوش غم فراموش \nهستیم تا خود صبح فردا رو پامون\n\nموزیکامون بوم بوم بوم \nچشا رومه زوم زوم زوم\nخود بازیا ازم راضین \nتوی هم جمعا من آس بازیم\n\nمیگم پا نمیده بد ازش شاکین\nکل شهر دنبالمه تو هم سر خط منتظر تو ایستگاه\nپا رو گاز یکیم میگه واینستا قفلی بزارش رو تکرار\n\nموزیکامون 
بوم بوم بوم \nچشا رومه زوم زوم زوم\nکل شهر دنبالم میگه هواتو دارم\nاگه بشی صاحب قلبم میدم دنیارو واست\n\nبدی عشقو نشونم یکی یدونم \nفقط یادت باشه نشکنی دلو آروم جونم\nموزیکامون بوم بوم بوم چشا رومه زوم زوم زوم\n\nمیای جلو میگی خوبم خودم میدونم \nدعوا سر منه هر جا برم دیوونم\nمیشن میفتن همه دنبال ردم\n\nمنم واسه خودم یه گوشه ای سرگرم \nاینجا همه کولیم فاز بالا گنگ گنگ\nپیکو برو بالا سلامتی جمع اینجا \nجای عاشقی نیس پسر خوب اصلا',
'related_songs_id': [
93312, 91891, 91020, 96448, 96288, 82969, 87697, 85457, 85089, 94136, 82967, 88146, 83723, 77401, 94639, 88976, 80945, 92558, 58758, 81550, 68648, 93717, 86527, 82970, 94774, 72749, 93479, 88416, 86866, 78988
],
'stories': [ .. list of stories object .. ]
}

>>> songObj = client.get_song_by_url('https://www.radiojavan.com/mp3s/mp3/Nikita-SheryM-Boom-Boom')
... client.like_song(songObj)
True

>>> client.liked_songs()
[ list of song object ]



Video

Method Return Description Login Require
get_video_by_url(url: str) Video Return video info by site url (radiojavan.com) NO
get_video_by_id(id: int) Video Return video info by id NO
like_video(video: Video) bool Like a video YES
unlike_video(video: Video) bool UnLike a video YES
liked_videos() List[Video] Get list of videos you liked YES


Example:

>>> client.get_video_by_url('https://www.radiojavan.com/mp3s/mp3/Nikita-SheryM-Boom-Boom').dict()
{
'id': 7302,
'title': 'Nikita & SheryM - "Boom Boom"',
'artist': 'Nikita & SheryM',
'song': 'Boom Boom',
'likes': 1379,
'dislikes': 38,
'views': 708370,
'type': 'video',
'item': None,
'date': 'Sep 7, 2020',
'created_at': '2020-09-07T20:34:05-04:00',
'artist_tags': ['Nikita', 'SheryM'],
'credit_tags': ['nikita', 'sherym'],
'permlink': 'nikita-sherym-boom-boom',
'link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/music_video/hq/nikita-sherym-boom-boom.mp4',...),
'hq_link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/music_video/hd/nikita-sherym-boom-boom.mp4',...),
'lq_link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/music_video/hq/nikita-sherym-boom-boom.mp4',...),
'hq_hls': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/music_video/hls/nikita-sherym-boom-boom/playlist.m3u8',...),
'lq_hls': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/music_video/hls/nikita-sherym-boom-boom/playlist.m3u8',...),
'comments_link': HttpUrl('https://www.radiojavan.com/services/comments?type=video&id=7302',...),
'photo': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/musicvideos/images/f89b8151c74f74f-original-larger.jpeg',...),
'photo_player': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/musicvideos/images/nikita-sherym-boom-boom/d8c59c40700b4d2-player.jpg',...),
'share_link': HttpUrl('https://rj.app/v/BN0WmaPk',...),
'related_video_id': [
5542, 7160, 6751, 6848, 6496, 5886, 5635, 4693, 5483, 6519, 7601, 6458, 4152, 5307, 6507, 5644, 4797, 6026, 4009, 5742, 7447, 5413, 5740, 6366, 5201, 6003, 3521, 3932, 2086, 6894
    ]
}

>>> videoObj = client.get_video_by_url('https://www.radiojavan.com/videos/video/nikita-sherym-boom-boom')
... client.like_video(videoObj)
True

>>> client.liked_videos()
[ list of video object ]



Podcast

Method Return Description Login Require
get_podcast_by_url(url: str) Podcast Return podcast info by site url (radiojavan.com) NO
get_podcast_by_id(id: int) Podcast Return podcast info by id NO
like_podcast(podcast: Podcast) bool Like a podcast YES
unlike_podcast(podcast: Podcast) bool UnLike a podcast YES


Example:

>>> client.get_podcast_by_url('https://www.radiojavan.com/podcasts/podcast/Abo-Atash-118').dict()
{
'id': 3111,
'title': 'Abo Atash',
'likes': 5325,
'dislikes': 27,
'plays': 1553141,
'type': 'podcast',
'talk': False,
'date': 'Episode 118',
'short_date': 'Episode 118',
'created_at': '2021-01-26T00:00:00-05:00',
'duration': 2686.69,
'permlink': 'Abo-Atash-118',
'show_permlink': 'Abo-Atash',
'credit_tags': ['dj taba'],
'link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/podcast/mp3-192/3111-44693e07c51c098.mp3',...),
'hq_link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/podcast/aac-192/3111-44693e07c51c098.m4a',...),
'lq_link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/podcast/aac-128/3111-44693e07c51c098.m4a',...),
'hls_link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/podcast/podcast-hls/3111-44693e07c51c098/playlist.m3u8',...),
'hq_hls': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/podcast/podcast-hls/3111-44693e07c51c098/playlist.m3u8',...),
'lq_hls': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/podcast/podcast-hls/3111-44693e07c51c098/file-96k.m3u8',...),
'comments_link': HttpUrl('https://www.radiojavan.com/services/comments?type=podcast&id=3111',...),
'photo': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/podcasts/abo-atash-118/5618b07d818299c.jpg',...),
'photo_player': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/podcasts/abo-atash-118/5cef5f1f0d1b737-player.jpg',...),
'share_link': HttpUrl('https://rj.app/p/RyY7QOxv',...),
'thumbnail': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/podcasts/abo-atash-118/5618b07d818299c-thumb.jpg',...),
'tracklist': 'Arta - Erade Kon (Ft Koorosh & Khashayar SR) Remix\r\nBuray - Karma (Aytac 
Kart Remix) Aytac Kart Remix \r\nAnita - Vaghti Hava Migire\r\nPuzzle - Memorable Medley 2\r\nShadmehr Aghili - Baroon Delam Khast \r\nSogand - Tehran\r\nAmir Tataloo - Rooz Be Rooz (Remix)\r\nNaser Zeynali - Delbare Nab\r\nOffaiah - Play It By Ear (Club Mix) \r\nKiyarash - Baghal\r\nHayedeh - Golvajeh (Dynatonic Remix)\r\nEbi - Goriz \r\nGoogoosh - Talagh (Extended Club Mix)\r\nFranky Rizardo - Olympus\r\nClaptone - Under The Moon (Ft Nathan Nicholson)\r\nAlireza JJ, Sijal, & Nassim - Hese Lamese (Ft Sami Low) \r\nDavi - Lie Machine (Gorgon City Remix) \r\nJim Rider - In Theory (Original Mix)\r\nHomayoun Shajarian - Ahay Khabardar (Remix)\r\nDJ Dark & MD DJ - Il padrino (Extended Mix)\r\nNamito - Stone Flower',
'related_podcast_id': [
3073, 2893, 2836, 2767, 2729, 2650, 2594, 2447, 2308, 2248, 2194, 2146, 2116, 2069, 1962, 1820, 1774, 1751, 1653, 1590, 1552, 1416, 1383, 1352, 1314, 1244, 1237, 1203, 1183, 1116
    ]
}

>>> podcastObj = client.get_podcast_by_url('https://www.radiojavan.com/podcasts/podcast/Abo-Atash-118')
... client.like_podcast(podcastObj)
True



Album

Method Return Description Login Require
get_album_by_url(url: str) Optional[Album] Return album info by site url (radiojavan.com) NO
get_album_by_id(id: int) Optional[Album] Return album info by id (this id belong to one of tracks) NO


Example:

>>> client.get_album_by_url('https://www.radiojavan.com/mp3s/album/Sogand-Man').dict()
{
'id': '96327',
'created_at': '2020-12-24T07:33:55-05:00',
'date': 'Dec 24, 2020',
'tracks': [ list of songs object],
'album': 'Man',
'artist': 'Sogand',
'share_link': HttpUrl('https://rj.app/ma/e7YWjW18',...)
}



Artist

Method Return Description Login Require
get_artist_by_url(url: str) Artist Return artist info by site url (radiojavan.com) NO
get_artist_by_name(name: int) Artist Return artist info by name (must be correct name) NO
follow_artist(artist: Artist) bool Follow a artist YES
unfollow_artist(artist: Artist) bool UnFollow a artist YES


Example:

>>> client.get_artist_by_url('https://www.radiojavan.com/artist/Satin').dict()
{
'name': 'Satin',
'latest_song_id': 96242,
'followers_count': 30270,
'following': False,
'plays': '294M',
'background': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/artists/photos/satin-f2a8958ded0b763-photo.jpg',...),
'photo': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/artists/photos/satin-f2a8958ded0b763-photo.jpg',...),
'photo_player': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/artists/photos/satin-88b142dfb09c009-player.jpg',...),
'photo_thumb': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/artists/photos/satin-f2a8958ded0b763-photo-thumb.jpg',...),
'share_link': HttpUrl('https://rj.app/a/WMvMR2yZ',...),
'prereleases': [],
'events': [],
'photos': [],
'songs_id': [
96118, 94639, 88146, 91078, 93479, 87259, 94638, 86293, 89582, 94640, 96242, 83102, 90267, 82753, 82913, 85772, 92694, 84907, 86529, 88858, 83077, 85431, 83635, 77005, 73645, 82203, 80536, 76254, 72394, 69936, 59001
],
'albums_id': [
    94638
],
'videos_id': [
7601, 6458, 5644, 5635, 6026, 5665, 6803, 7210, 5912
], 
'podcasts_id': [],
'playlists_id': [
    '37635f81c823'
    ]
}

>>> artistObj = client.get_artist_by_url('https://www.radiojavan.com/artist/Satin')
... client.follow_artist(artistObj)
True



Story ( RJ api calls it selfie )

Method Return Description Login Require
get_story_by_url(url: str) Story Return story info by site url (radiojavan.com) NO
get_story_by_hash_id(hash_id: str) Story Return story info by hash_id NO
like_story(story: Story) bool Like a story YES
unlike_story(story: Story) bool UnLike a story YES


Example:

>>> client.get_story_by_url('https://www.radiojavan.com/story/mxE3Ybyg').dict()
{
'id': 289965,
'hash_id': 'mxE3Ybyg',
'title': 'Shadmehr Aghili - "Avaz Nemishi"',
'song': 'Avaz Nemishi',
'song_id': 96835,
'artist': 'Shadmehr Aghili',
'verified': False,
'type': 'selfie',
'likes': '681', 
'likes_pretty': '681',
'filename': '289965-ee9c65128c566f5',
'link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/selfie/7677570/289965-ee9c65128c566f5.mp4',...),
'lq_link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/selfie/7677570/hd/289965-ee9c65128c566f5.mp4',...),
'hq_link': HttpUrl('https://d1ek016ppw7pfv.cloudfront.net/media/selfie/7677570/289965-ee9c65128c566f5.mp4',...),
'share_link': HttpUrl('https://rj.app/story/mxE3Ybyg',...),
'photo': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/selfie/7677570/66eb9642897545d.jpg',...),
'thumbnail': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/selfie/7677570/66eb9642897545d-thumb.jpg',...),
'user': { #this is profileObject.dict()
    'thumbnail': HttpUrl('https://d2hudtqn98uvom.cloudfront.net/static/profiles/7677570/fd7f44f9ddbfe5b-thumb.jpg',...),
    'username': 'hengamehtorknezhad',
    'display_name': '@hengamehtorknezhad'
    },
'location': 'Germany',
'is_mystory': False
}

>>> storyObj = client.get_story_by_url('https://www.radiojavan.com/story/mxE3Ybyg')
... client.like_story(storyObj)
True



MusicPlaylist

Method Return Description Login Require
get_music_playlist_by_url(url: str) MusicPlaylist Return music playlist info by site url (radiojavan.com) NO
get_music_playlist_by_id(id: str) MusicPlaylist Return music playlist info by id NO
follow_music_playlist(music_playlist: MusicPlaylist) bool Follow a music playlist YES
unfollow_music_playlist(music_playlist: MusicPlaylist) bool UnFollow a music playlist YES
create_music_playlist(name: str, song: Song) Optional[str] Create a music playlist and return its id YES
rename_music_playlist(music_playlist: MusicPlaylist, new_name: str) bool Rename your music playlist YES
delete_music_playlist(music_playlist: MusicPlaylist) bool Delete your music playlist YES
add_to_music_playlist(music_playlist: MusicPlaylist, song: Song) bool Add a song to your music playlist YES
remove_from_music_playlist(music_playlist: MusicPlaylist, song: Song) bool Remove a song from your music playlist YES

VideoPlaylist

Method Return Description Login Require
get_video_playlist_by_url(url: str) VideoPlaylist Return video playlist info by site url (radiojavan.com) NO
get_video_playlist_by_id(id: str) VideoPlaylist Return video playlist info by id NO
create_video_playlist(name: str, video: Video) Optional[str] Create a video playlist and return its id YES
rename_video_playlist(video_playlist: VideoPlaylist, new_name: str) bool Rename your video playlist YES
delete_video_playlist(video_playlist: VideoPlaylist) bool Delete your video playlist YES
add_to_video_playlist(video_playlist: VideoPlaylist, video: Video) bool Add a video to your video playlist YES
remove_from_video_playlist(video_playlist: VideoPlaylist, video: Video) bool Remove a video from your video playlist YES

Search

Method Return Description Login Require
search(query: str) SearchResults Return search results object NO
get_trending_searches() List[str] Return string list of trending searches NO


Example:

>>> client.search('nikita boom boom').dict()
{
'query': 'nikita boom boom',
'songs_id': [
    94010, 96448, 76841, 80945, 88976, 82964, 83723, 87697, 81999, 84468, 85457, 72749, 82966, 82967, 86866, 82965, 82970, 78988, 82968, 82969
    ],
'albums_id': [82964],
'videos_id': [7302, 5542, 6751, 6496, 5270, 5413],
'podcasts_id': [],
'playlists_id': [],
'artists_name': [],
'lyrics': [],
'shows': [],
'profiles': []
}

>>> client.get_trending_searches()
['tm bax', 'mohsen ebrahimzadeh', 'mohsen chavoshi', 'moein', 'sohrab mj']



Browse

Method Return Description Login Require
get_latest_stories() List[Story] Return list of latest stories NO
get_trending_songs() List[Song] Return list of trending songs NO
get_popular_songs() List[Song] Return list of popular songs NO
get_featured_songs() List[Song] Return list of featured songs NO
get_latest_albums() List[Album] Return list of latest albums NO
get_trending_videos() List[Video] Return list of trending videos NO
get_popular_videos() List[Video] Return list of popular videos NO
get_featured_videos() List[Video] Return list of featured videos NO
get_latest_videos() List[Video] Return list of latest videos NO
get_popular_podcasts() List[Podcast] Return list of popular podcasts NO
get_featured_podcasts() List[Podcast] Return list of featured podcasts NO
get_talk_podcasts() List[Podcast] Return list of talk podcasts NO
get_shows_podcasts() List[Podcast] Return list of shows podcasts NO
get_popular_artists() List[Artist] Return list of popular artists NO
get_coming_soon() List[ComingSoon] Return list of comingsoon songs/videos NO

Common Exceptions

Exception Base Description
ClientError Exception Base Exception for RadioJavan calls
ClientJSONDecodeError ClientError JSON Exception
ClientLoginRequired ClientError Raised when RadioJavan required Login

Private Exceptions

Exception Base Description
PrivateError ClientError Base Exception for Private calls
BadCredentials PrivateError Raise when email/password is wrong
OnlyContainLetters PrivateError Raise when firstname/lastname contains digits (edit account)
LongString PrivateError Raise when string is too long (edit account)
EmailExists PrivateError Raise when email used by another account (edit account)
UsernameExists PrivateError Raise when username used by another account (edit account)
NameExists PrivateError Raise when use duplicate name (rename playlist)
PlayListExists PrivateError Raise when use duplicate name (create playlist)
UnknownError PrivateError Raise when get unknown message (new message from radiojavan)

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning. Hence, when pushing commits, it is encouraged to use the described formatting and use the following keywords:

  • Added for new features.
  • Changed for changes in existing functionality.
  • Deprecated for soon-to-be removed features.
  • Removed for now removed features.
  • Fixed for any bug fixes.

Changelog

You can find this repository's changelog here: CHANGELOG

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

radiojavanapi-0.1.0.tar.gz (26.1 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page