Skip to content

Instantly share code, notes, and snippets.

@He1my
Created May 8, 2016 15:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save He1my/dfb00fdd3107141e5035a94c4a01fa9e to your computer and use it in GitHub Desktop.
Save He1my/dfb00fdd3107141e5035a94c4a01fa9e to your computer and use it in GitHub Desktop.
#!/usr/bin/python
# coding: utf-8
try:
from urlparse import urlparse
from urllib2 import Request, urlopen
from urllib import urlencode
v = 2
except:
from urllib.parse import urlparse, urlencode
from urllib.request import Request, urlopen
v = 3;
raw_input = input;
xrange = range
import random, base64, json, time, re
import configparser, argparse
class cc:
pass
class main:
def __init__(self):
self.ua = 'AudioAddict-di/1.4.7 iOS/8.1'
self.auth = "ephemeron:dayeiph0ne@pp"
self.auth_b = 'ZXBoZW1lcm9uOmRheWVpcGgwbmVAcHA='
self.json_urls = []
self.json_urls.append("http://listen.di.fm/premium_high.json")
self.json_urls.append("http://listen.sky.fm/premium_high.json")
self.json_urls.append("http://listen.jazzradio.com/premium_high.json")
self.json_urls.append("http://listen.rockradio.com/premium_high.json")
def decode(self, data):
try:
data = data.decode('utf8')
return (data)
except:
return (data)
def encode(self, data):
try:
data = data.encode('utf8')
return (data)
except:
return (data)
def run(self):
t1 = time.time()
r = self.login_and_get_pre()
if r:
for i in self.json_urls:
p = urlparse(i).netloc.split('.')
if len(p) < 2: continue
p = '%s.%s.m3u' % (p[-2], p[-1])
self.playlist_generator(p, i)
t2 = time.time()
raw_input('[+] program finished (%.2f seconds), press any key to exit' % float(t2 - t1))
def get(self, url, data=None, headers=None):
try:
if data:
data = self.encode(urlencode(data))
if headers:
r = Request(url, data, headers=headers)
else:
r = Request(url, data)
else:
if headers:
r = Request(url, headers=headers)
else:
r = Request(url)
r = urlopen(r)
c = cc()
c.h = dict(r.headers)
c.r = r.read()
c.code = r.code
c.c = int(str(r.code)[0])
try:
c.j = json.loads(self.decode(c.r))
except:
c.j = None
return (c)
except Exception as e:
pass
def random_pass(self, llength=8):
c = '0123456789abcdefghijklmnoprstuvyzqwxABCDEFGHIJKLMNOPRSTUVYZQWX!@&%#'
return (''.join([random.choice(c) for i in xrange(llength)]))
def random_number(self, llength=8):
return (''.join([str(random.randint(0, 9)) for i in xrange(llength)]))
def random_sleep(self):
t = random.random() * 4
while int(t) < 1:
t = random.random() * 4
print('[+] wait %.2f seconds' % float(t))
time.sleep(t)
def random_auth(self):
try:
h = {'User-Agent': 'Mozilla/5.0'}
r = self.get('http://www.fakenamegenerator.com/', headers=h)
if not r.c < 4: raise (BaseException)
r = re.findall('(?i)<h3>([^<]*?)</h3>', self.decode(r.r))[0].strip()
d = {}
d['full'] = r
d['login'] = r.split(' ')[0] + self.random_number()
d['last'] = r.split(' ')[-1]
d['pass'] = self.random_pass()
d['email'] = d['login'] + '@gmail.com'
self.d = d
print('[+] fake id generated')
print('email: ' + d['email'])
print('pass: ' + d['pass'])
return (d)
except Exception as e:
print('[-] fake id generation error')
def register(self):
try:
h = {'User-Agent': self.ua}
h['Authorization'] = 'Basic %s' % self.auth_b
d = self.random_auth()
if not d: raise (BaseException)
dd = {}
dd['member[first_name]'] = d['login']
dd['member[last_name]'] = d['last']
dd['member[password_confirmation]'] = d['pass']
dd['member[password]'] = d['pass']
dd['member[email]'] = d['email']
r = self.get('https://api.audioaddict.com/v1/di/members', data=dd, headers=h)
if r.c == 2 and r.j:
self.id = r.j['id']
self.api_key = r.j['api_key']
self.listen_key = r.j['listen_key']
if r.j['activated']:
print('[+] register completed')
print('listen key: ' + self.listen_key)
if args.clementine:
from os import path
config = configparser.ConfigParser()
config_file = path.join(path.expanduser('~'), '.config', 'Clementine', 'Clementine.conf')
config.read(config_file)
config['digitally_imported']['username'] = d['email']
config['digitally_imported']['listen_hash'] = self.listen_key
# config.set('digitally_imported','username',d['email'])
# config.set('digitally_imported','listen_hash',self.listen_key)
with open(config_file, 'w') as configfile:
config.write(configfile)
return (True)
else:
raise (BaseException)
else:
raise (BaseException)
except Exception as e:
print('[-] register error' + e.message)
def login_and_get_pre(self):
r = self.register()
if not r: return ()
self.random_sleep()
try:
h = {'User-Agent': self.ua}
h['Authorization'] = 'Basic %s' % self.auth_b
r = self.get('https://api.audioaddict.com/v1/di/members/authenticate',
data={'username': self.d['email'], 'password': self.d['pass']}, headers=h)
if not r.c < 4: raise (BaseException)
c = {}
for i in r.h:
if i.lower().startswith('x-'):
h[i] = r.h[i]
c[i] = ''
if not c: raise (BaseException)
print('[+] login ok')
self.random_sleep()
r = self.get('https://api.audioaddict.com/v1/di/members/8948397/subscriptions/trial/premium-pass',
data={'api_key': self.api_key}, headers=h)
if not r.c < 4: raise (BaseException)
print('[+] you got premium!')
return (True)
except Exception as e:
print('[-] login/premium error')
def playlist_generator(self, filename, json_url):
try:
d = []
r = self.get(json_url, headers={'User-Agent': 'Mozilla/5.0'})
if r.c < 4 and r.j:
for i in r.j:
try:
n = i['name']
v = i['playlist']
if not n or not v: raise (BaseException)
m = '%s?%s\t#EXTINF:0, %s' % (v, self.listen_key, n)
d.append(m)
except Exception as e:
pass
if d:
d = '\n'.join(map(lambda x: '%s\n%s' % (x.split('\t')[1], x.split('\t')[0]), sorted(list(set(d)))))
if globals()['v'] == 2: d = self.encode(d)
open(filename, 'w').write(d)
print('[+] playlist %s created' % filename)
else:
print('[-] playlist empty')
else:
raise (BaseException)
except Exception as e:
print('[-] playlist error: %s' % filename)
#
if __name__ == '__main__':
# create the parser
p = argparse.ArgumentParser(description='generate premium account')
p.add_argument('-c', '--clementine', action='store_true',
help='modifiy Clementine config file and add the generated account to it')
# parse the command line
args = p.parse_args()
app = main()
app.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment