123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- import eventlet
- requests = eventlet.import_patched('requests')
- from deezer.gw import GW
- from deezer.api import API
- import json
- __version__ = "0.0.9"
- class TrackFormats():
- """Number associtation for formats"""
- FLAC = 9
- MP3_320 = 3
- MP3_128 = 1
- MP4_RA3 = 15
- MP4_RA2 = 14
- MP4_RA1 = 13
- DEFAULT = 8
- LOCAL = 0
- class Deezer:
- def __init__(self):
- self.http_headers = {
- "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) " \
- "Chrome/79.0.3945.130 Safari/537.36",
- "Accept-Language": None
- }
- self.session = requests.Session()
- self.session.mount('http://', requests.adapters.HTTPAdapter(pool_maxsize=100))
- self.session.mount('https://', requests.adapters.HTTPAdapter(pool_maxsize=100))
- self.logged_in = False
- self.current_user = {}
- self.childs = []
- self.selected_account = 0
- self.api = API(self.session, self.http_headers)
- self.gw = GW(self.session, self.http_headers)
- def set_accept_language(self, lang):
- self.http_headers['Accept-Language'] = lang
- def get_accept_language(self):
- return self.http_headers['Accept-Language']
- def login(self, email, password, re_captcha_token, child=0):
- # Check if user already logged in
- user_data = self.gw.get_user_data()
- if user_data['USER']['USER_ID'] == 0:
- self.logged_in = False
- return False
- # Get the checkFormLogin
- check_form_login = user_data['checkFormLogin']
- login = self.session.post(
- "https://www.deezer.com/ajax/action.php",
- data={
- 'type': 'login',
- 'mail': email,
- 'password': password,
- 'checkFormLogin': check_form_login,
- 'reCaptchaToken': re_captcha_token
- },
- headers={'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', **self.http_headers}
- )
- # Check if user logged in
- if 'success' not in login.text:
- self.logged_in = False
- return False
- user_data = self.gw.get_user_data()
- self._post_login(user_data)
- self.change_account(child)
- self.logged_in = True
- return True
- def login_via_arl(self, arl, child=0):
- arl = arl.strip()
- cookie_obj = requests.cookies.create_cookie(
- domain='.deezer.com',
- name='arl',
- value=arl,
- path="/",
- rest={'HttpOnly': True}
- )
- self.session.cookies.set_cookie(cookie_obj)
- user_data = self.gw.get_user_data()
- # Check if user logged in
- if user_data["USER"]["USER_ID"] == 0:
- self.logged_in = False
- return False
- self._post_login(user_data)
- self.change_account(child)
- self.logged_in = True
- return True
- def _post_login(self, user_data):
- self.childs = []
- family = user_data["USER"]["MULTI_ACCOUNT"]["ENABLED"]
- if family:
- childs = self.gw.get_child_accounts()
- for child in childs:
- self.childs.append({
- 'id': child["USER_ID"],
- 'name': child["BLOG_NAME"],
- 'picture': child.get("USER_PICTURE", "")
- })
- else:
- self.childs.append({
- 'id': user_data["USER"]["USER_ID"],
- 'name': user_data["USER"]["BLOG_NAME"],
- 'picture': user_data["USER"].get("USER_PICTURE", "")
- })
- def change_account(self, child_n):
- if len(self.childs)-1 >= child_n:
- self.current_user =self.childs[child_n]
- self.selected_account = child_n
- else:
- self.current_user = self.childs[0]
- self.selected_account = 0
- return (self.current_user, self.selected_account)
|