From 852b175c6a47c3931e9795eac93e75020315aeb7 Mon Sep 17 00:00:00 2001 From: horacio9a Date: Wed, 3 Jan 2018 12:04:22 +0100 Subject: [PATCH] v.1.0.8 Cam4 Remote 24/7 Anonymous STREAMLINK Recorder --- c4slr.py | 117 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 62 insertions(+), 55 deletions(-) diff --git a/c4slr.py b/c4slr.py index 36407e8..51eeeff 100644 --- a/c4slr.py +++ b/c4slr.py @@ -1,4 +1,4 @@ -# Cam4 Remote Anonymous STREAMLINK Recorder v.1.0.7 by horacio9a for Python 2.7.13 +# Cam4 Remote Anonymous STREAMLINK Recorder v.1.0.8 by horacio9a for Python 2.7.14 import sys, os, urllib, urllib3, ssl, re, time, datetime, command urllib3.disable_warnings() @@ -12,9 +12,7 @@ config = ConfigParser.ConfigParser() config.read('config.cfg') init() -print -print(colored(" => START <=", 'yellow', 'on_blue')) -print +print(colored('\n => START <=', 'yellow', 'on_blue')) if __name__=='__main__': import sys @@ -30,24 +28,13 @@ dec=urllib.unquote(enc).decode() state0 = dec.split("showState: '")[1] state = state0.split("'")[0] -if len(state) == 0: - print(colored(" => Model is OFFLINE or wrong name<=", 'yellow','on_blue')) - print - print(colored(" => END <=", 'yellow','on_blue')) - sys.exit() -else: - pass - -print (colored(' => Model State => {} <=', 'white', 'on_green')).format(state) -print - if len(state) > 0: try: age0 = dec.split('Age:')[1] + age = age1.split('">')[1] except: - age = '' + age = '-' try: loc0 = dec.split('Location: 0: loc3 = re.sub(',', '', loc2) loc = re.sub(' ', '', loc3) except: - loc = '' + loc = '-' try: sta0 = dec.split('Status:')[1] + sta = sta1.split('">')[1] except: - sta = '' + sta = '-' try: - occ0 = dec.split('Occupation:')[1] + room0 = dec.split('room":"')[1] + room = room0.split('"')[0] except: - occ = '' + room = '-' - print (colored(' => Age:{} * Location:{} * Status:{} * Job:{} <=', 'yellow', 'on_blue')).format(age,loc,sta,occ) - print + try: + ms0 = dec.split('Member since:')[1] + ms3 = re.sub(' ', '-', ms2) + ms = re.sub(',', '', ms3) + except: + ms = '-' - vau0 = dec.split('rtmp://')[1] - vau = vau0.split('/')[0] + try: + eth0 = dec.split('Ethnicity:')[1] + eth = re.sub(' ', '', eth2) + except: + eth = '-' - if len(vau) > 30: - print(colored(" => TRY AGAIN <=", 'yellow','on_blue')) + vpu0 = dec.split('videoPlayUrl":"')[1] + vpu = vpu0.split('"')[0] + + if len(vpu) > 80: + print(colored('\n => TRY AGAIN <=', 'yellow','on_blue')) + time.sleep(3) + print(colored('\n => END <=', 'yellow','on_blue')) + time.sleep(1) sys.exit() else: pass - if len(vau) > 1: - vpu0 = dec.split('videoPlayUrl":"')[1] - vpu = vpu0.split('"')[0] - rname = vpu.split('-')[0] - lwcdn = vpu.split('-')[1] + wcdn = vpu.split('-')[1] - hlsurl1 = 'https://lwcdn-{}.cam4.com/cam4-origin-live/ngrp:{}_all/playlist.m3u8'.format(lwcdn,vpu) - hlsurl2 = 'https://lwcdn-{}.cam4.com/cam4-origin-live/amlst:{}_aac/playlist.m3u8'.format(lwcdn,vpu) - hlsurl = 'https://lwcdn-{}.cam4.com/cam4-origin-live/{}_aac/playlist.m3u8'.format(lwcdn,vpu) - hlsurl0 = dec.split("hlsUrl: '")[1] -# hlsurl = hlsurl0.split("'")[0] - purl0 = hlsurl.split('live/')[1] - purl = purl0.split('/')[0] - print (colored(' => Play URL => {} <=', 'yellow', 'on_blue')).format(purl) - print + print (colored('\n => Room: ({}) * State: ({}) * Member since: ({}) <=', 'white', 'on_blue')).format(room,state,ms) + print (colored('\n => Age: ({}) * Location: ({}) * Status: ({}) * Ethnic: ({}) <=', 'yellow', 'on_blue')).format(age,loc,sta,eth) - timestamp = str(time.strftime("%d%m%Y-%H%M%S")) - path = config.get('folders', 'output_folder') - filename = rname + '_C4_' + timestamp - streamlink = config.get('files', 'streamlink') - fn = filename + '.mp4' - pf = (path + fn) - print (colored(' => SL-REC >>> {} <<<', 'yellow', 'on_red')).format(fn) - print - command = ('{} hls://"{}" best -Q -o "{}"'.format(streamlink,hlsurl,pf)) - os.system(command) - print(colored(" => END <=", 'yellow','on_blue')) + hlsurl1 = 'https://lwcdn-{}.cam4.com/cam4-origin-live/ngrp:{}_all/playlist.m3u8'.format(wcdn,vpu) + hlsurl2 = 'https://lwcdn-{}.cam4.com/cam4-origin-live/amlst:{}_aac/playlist.m3u8'.format(wcdn,vpu) + hlsurl = 'https://lwcdn-{}.cam4.com/cam4-origin-live/{}_aac/playlist.m3u8'.format(wcdn,vpu) + hls_url0 = dec.split("hlsUrl: '")[1] + hls_url1 = hls_url0.split("'")[0] + hls_url2 = hls_url1.split('live/')[1] + hls_url = hls_url2.split('/')[0] + print (colored('\n => Play URL => {} <=', 'yellow', 'on_blue')).format(hls_url) + + timestamp = str(time.strftime('%d%m%Y-%H%M%S')) + path = config.get('folders', 'output_folder') + streamlink = config.get('files', 'streamlink') + filename = room + '_C4_' + timestamp + '.mp4' + pf = path + filename + print (colored('\n => SL-REC >>> {} <<<', 'yellow', 'on_red')).format(filename) + print + command = ('{} hls://"{}" best -Q -o "{}"'.format(streamlink,hlsurl,pf)) + os.system(command) + print(colored('\n => END <=', 'yellow','on_blue')) + sys.exit() + +else: + print (colored('\n => Model ({}) is OFFLINE or ERROR name <=', 'white', 'on_red')).format(model) + time.sleep(3) + print(colored('\n => END <=', 'yellow','on_blue')) + time.sleep(1) sys.exit()