Created
May 8, 2016 15:24
-
-
Save He1my/dfb00fdd3107141e5035a94c4a01fa9e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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