From 3083fd5ac84d115d096ada85826efcabe7a074b0 Mon Sep 17 00:00:00 2001 From: jackyzy823 Date: Sun, 9 Aug 2015 21:41:46 +0800 Subject: [PATCH 01/10] update key for iqiyi,thanks to @Freshman585 --- src/you_get/extractors/iqiyi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/you_get/extractors/iqiyi.py b/src/you_get/extractors/iqiyi.py index 1fe85338..61507d78 100644 --- a/src/you_get/extractors/iqiyi.py +++ b/src/you_get/extractors/iqiyi.py @@ -43,7 +43,7 @@ bid meaning for quality def mix(tvid): enc = [] - enc.append('8e29ab5666d041c3a1ea76e06dabdffb') + enc.append('7c4d2505ad0544b88c7679c65d6748a1') tm = str(randint(2000,4000)) src = 'hsalf' enc.append(str(tm)) From 8ae1184f0bd3697a027dfd657f729c54b77a508f Mon Sep 17 00:00:00 2001 From: jackyzy823 Date: Mon, 10 Aug 2015 14:15:17 +0800 Subject: [PATCH 02/10] [iqiyi] new enckey --- src/you_get/extractors/iqiyi.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/you_get/extractors/iqiyi.py b/src/you_get/extractors/iqiyi.py index 61507d78..a88ad9c3 100644 --- a/src/you_get/extractors/iqiyi.py +++ b/src/you_get/extractors/iqiyi.py @@ -12,6 +12,10 @@ import hashlib ''' Changelog: +-> http://www.iqiyi.com/common/flashplayer/20150805/MainPlayer_5_2_26_c3_3_7.swf + former key still works until 20150809 + In Zombie kcuf = [13, 3, 0, 15, 8, 2, 11, 7, 10, 1, 12, 9, 14, 6, 4, 5] ,which is construct in LogManager,CoreManager,impls.pub.setting,impls.pub.statistics,StageVideoManager + thd create a array of ['2', 'd', 'f', 'e', '0', 'c', '5', '3', '8', 'b', '9', '6', 'a', '7', '4', '1'] -> http://www.iqiyi.com/common/flashplayer/20150710/MainPlayer_5_2_25_c3_3_5_1.swf -> http://www.iqiyi.com/common/flashplayer/20150703/MainPlayer_5_2_24_1_c3_3_3.swf @@ -43,7 +47,7 @@ bid meaning for quality def mix(tvid): enc = [] - enc.append('7c4d2505ad0544b88c7679c65d6748a1') + enc.append('65096542539c4e529c8ee97511cd979f') tm = str(randint(2000,4000)) src = 'hsalf' enc.append(str(tm)) From 771fbf08a266b3b5ef705895840f58e692b36423 Mon Sep 17 00:00:00 2001 From: jackyzy823 Date: Mon, 10 Aug 2015 14:17:49 +0800 Subject: [PATCH 03/10] [iqiyi] new src --- src/you_get/extractors/iqiyi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/you_get/extractors/iqiyi.py b/src/you_get/extractors/iqiyi.py index a88ad9c3..2359d1a9 100644 --- a/src/you_get/extractors/iqiyi.py +++ b/src/you_get/extractors/iqiyi.py @@ -49,7 +49,7 @@ def mix(tvid): enc = [] enc.append('65096542539c4e529c8ee97511cd979f') tm = str(randint(2000,4000)) - src = 'hsalf' + src = 'eknas' enc.append(str(tm)) enc.append(tvid) sc = hashlib.new('md5',bytes("".join(enc),'utf-8')).hexdigest() From 13f3f4175bd750485fe4e69622796ac21bba3ae5 Mon Sep 17 00:00:00 2001 From: jackyzy823 Date: Wed, 12 Aug 2015 12:48:31 +0800 Subject: [PATCH 04/10] [iqiyi] update key --- src/you_get/extractors/iqiyi.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/you_get/extractors/iqiyi.py b/src/you_get/extractors/iqiyi.py index 2359d1a9..1f124590 100644 --- a/src/you_get/extractors/iqiyi.py +++ b/src/you_get/extractors/iqiyi.py @@ -12,6 +12,10 @@ import hashlib ''' Changelog: +-> http://www.iqiyi.com/common/flashplayer/20150810/MainPlayer_5_2_26_c3_3_7_1.swf + http://www.iqiyi.com/common/flashplayer/20150811/MainPlayer_5_2_26_c3_3_7_2.swf + some small changes in Zombie.bite function + -> http://www.iqiyi.com/common/flashplayer/20150805/MainPlayer_5_2_26_c3_3_7.swf former key still works until 20150809 In Zombie kcuf = [13, 3, 0, 15, 8, 2, 11, 7, 10, 1, 12, 9, 14, 6, 4, 5] ,which is construct in LogManager,CoreManager,impls.pub.setting,impls.pub.statistics,StageVideoManager @@ -24,11 +28,6 @@ Changelog: -> http://www.iqiyi.com/common/flashplayer/20150618/MainPlayer_5_2_24_1_c3_3_2.swf In this version Z7elzzup.cexe,just use node.js to run this code(with some modification) and get innerkey. --> http://www.iqiyi.com/common/flashplayer/20150612/MainPlayer_5_2_23_1_c3_2_6_5.swf - In this version do not directly use enc key - gen enc key (so called sc ) in DMEmagelzzup.mix(tvid) -> (tm->getTimer(),src='hsalf',sc) - encrypy alogrithm is md5(DMEmagelzzup.mix.genInnerKey +tm+tvid) - how to gen genInnerKey ,can see first 3 lin in mix function in this file ''' ''' @@ -47,7 +46,7 @@ bid meaning for quality def mix(tvid): enc = [] - enc.append('65096542539c4e529c8ee97511cd979f') + enc.append('3601ba290e4f4662848c710e2122007e') tm = str(randint(2000,4000)) src = 'eknas' enc.append(str(tm)) From 822b128a80c147f5fa78b19e00aba16b1b61b761 Mon Sep 17 00:00:00 2001 From: jackyzy823 Date: Wed, 12 Aug 2015 13:17:15 +0800 Subject: [PATCH 05/10] fix #582 --- src/you_get/extractors/iqiyi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/you_get/extractors/iqiyi.py b/src/you_get/extractors/iqiyi.py index 1f124590..bd0b25ab 100644 --- a/src/you_get/extractors/iqiyi.py +++ b/src/you_get/extractors/iqiyi.py @@ -95,7 +95,7 @@ def getDispathKey(rid): return hashlib.new("md5",bytes(t+tp+rid,"utf-8")).hexdigest() -def iqiyi_download(url, output_dir = '.', merge = True, info_only = False): +def iqiyi_download(url, output_dir = '.', merge = True, info_only = False, **kwargs): gen_uid=uuid4().hex html = get_html(url) From 5e032d5f8e26a5c247438a6e9e07d26d6a428c3f Mon Sep 17 00:00:00 2001 From: sceext Date: Mon, 17 Aug 2015 19:33:02 +0800 Subject: [PATCH 06/10] [iqiyi] fix 1080p parse by set um=1 --- src/you_get/extractors/iqiyi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/you_get/extractors/iqiyi.py b/src/you_get/extractors/iqiyi.py index bd0b25ab..20e2d38c 100644 --- a/src/you_get/extractors/iqiyi.py +++ b/src/you_get/extractors/iqiyi.py @@ -84,7 +84,7 @@ def getVMS(tvid,vid,uid): vmsreq='http://cache.video.qiyi.com/vms?key=fvip&src=1702633101b340d8917a69cf8a4b8c7' +\ "&tvId="+tvid+"&vid="+vid+"&vinfo=1&tm="+tm+\ "&enc="+sc+\ - "&qyid="+uid+"&tn="+str(random()) +"&um=0" +\ + "&qyid="+uid+"&tn="+str(random()) +"&um=1" +\ "&authkey="+hashlib.new('md5',bytes(''+str(tm)+tvid,'utf-8')).hexdigest() return json.loads(get_content(vmsreq)) From 89c301a7cdaed7b370b395346dd62356e9d79075 Mon Sep 17 00:00:00 2001 From: cnbeining Date: Thu, 20 Aug 2015 00:45:32 -0400 Subject: [PATCH 07/10] Add support for Qianmo http://qianmo.com/ Tested on my machine. --- README.md | 1 + src/you_get/common.py | 3 ++- src/you_get/extractors/__init__.py | 1 + src/you_get/extractors/qianmo.py | 40 ++++++++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) mode change 100644 => 100755 src/you_get/extractors/__init__.py create mode 100644 src/you_get/extractors/qianmo.py diff --git a/README.md b/README.md index 0e4fa5ad..46bf5fd0 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ Fork me on GitHub: * NetEase (网易视频) * NetEase Music (网易云音乐) * PPTV +* QianMo (阡陌视频) * QQ (腾讯视频) * Sina (新浪视频) * Sohu (搜狐视频) diff --git a/src/you_get/common.py b/src/you_get/common.py index 3cb72805..ed305518 100755 --- a/src/you_get/common.py +++ b/src/you_get/common.py @@ -922,7 +922,7 @@ def script_main(script_name, download, download_playlist = None): sys.exit(1) def url_to_module(url): - from .extractors import netease, w56, acfun, baidu, baomihua, bilibili, blip, catfun, cntv, cbs, coursera, dailymotion, dongting, douban, douyutv, ehow, facebook, freesound, google, sina, ifeng, alive, instagram, iqiyi, joy, jpopsuki, khan, ku6, kugou, kuwo, letv, lizhi, magisto, miomio, mixcloud, mtv81, nicovideo, pptv, qq, sohu, songtaste, soundcloud, ted, theplatform, tudou, tucao, tumblr, twitter, vid48, videobam, vidto, vimeo, vine, vk, xiami, yinyuetai, youku, youtube, zhanqi + from .extractors import netease, w56, acfun, baidu, baomihua, bilibili, blip, catfun, cntv, cbs, coursera, dailymotion, dongting, douban, douyutv, ehow, facebook, freesound, google, sina, ifeng, alive, instagram, iqiyi, joy, jpopsuki, khan, ku6, kugou, kuwo, letv, lizhi, magisto, miomio, mixcloud, mtv81, nicovideo, pptv, qianmo, qq, sohu, songtaste, soundcloud, ted, theplatform, tudou, tucao, tumblr, twitter, vid48, videobam, vidto, vimeo, vine, vk, xiami, yinyuetai, youku, youtube, zhanqi video_host = r1(r'https?://([^/]+)/', url) video_url = r1(r'https?://[^/]+(.*)', url) @@ -974,6 +974,7 @@ def url_to_module(url): 'mtv81': mtv81, 'nicovideo': nicovideo, 'pptv': pptv, + 'qianmo':qianmo, 'qq': qq, 'sina': sina, 'smgbb': bilibili, diff --git a/src/you_get/extractors/__init__.py b/src/you_get/extractors/__init__.py old mode 100644 new mode 100755 index 9dcfdb30..5abc0d8c --- a/src/you_get/extractors/__init__.py +++ b/src/you_get/extractors/__init__.py @@ -33,6 +33,7 @@ from .mtv81 import * from .netease import * from .nicovideo import * from .pptv import * +from .qianmo import * from .qq import * from .sina import * from .sohu import * diff --git a/src/you_get/extractors/qianmo.py b/src/you_get/extractors/qianmo.py new file mode 100644 index 00000000..cec8a14a --- /dev/null +++ b/src/you_get/extractors/qianmo.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python + +__all__ = ['qianmo_download'] + +from ..common import * +import urllib.error +import json + +def qianmo_download(url, output_dir = '.', merge = False, info_only = False): + if re.match(r'http://qianmo.com/\w+', url): + html = get_html(url) + match = re.search(r'(.+?)var video =(.+?);', html) + + if match: + video_info_json = json.loads(match.group(2)) + title = video_info_json['title'] + ext_video_id = video_info_json['ext_video_id'] + + html = get_content('http://v.qianmo.com/player/{ext_video_id}'.format(ext_video_id = ext_video_id)) + c = json.loads(html) + url_list = [] + for i in c['seg']: #Cannot do list comprehensions + for a in c['seg'][i]: + for b in a['url']: + url_list.append(b[0]) + + type_ = '' + size = 0 + for url in url_list: + _, type_, temp = url_info(url) + size += temp + + type, ext, size = url_info(url) + print_info(site_info, title, type_, size) + if not info_only: + download_urls(url_list, title, type_, total_size=None, output_dir=output_dir, merge=merge) + +site_info = "qianmo" +download = qianmo_download +download_playlist = playlist_not_supported('qianmo') \ No newline at end of file From c39927e9311bff1ade7c27399d09bd8d6b8b3cab Mon Sep 17 00:00:00 2001 From: cnbeining Date: Thu, 20 Aug 2015 02:22:19 -0400 Subject: [PATCH 08/10] Try adding Funshion(fun.tv) support, fix #215 I have made those functions to allow full drama download, but do not know how to integrate with the programme. Please offer your help. Many thanks. --- src/you_get/extractors/funshion.py | 86 ++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/you_get/extractors/funshion.py diff --git a/src/you_get/extractors/funshion.py b/src/you_get/extractors/funshion.py new file mode 100644 index 00000000..04967946 --- /dev/null +++ b/src/you_get/extractors/funshion.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python + +__all__ = ['funshion_download'] + +from ..common import * +import urllib.error +import json + +#---------------------------------------------------------------------- +def funshion_download_by_drama_url(url): + """str->None + url = 'http://www.fun.tv/vplay/g-95785/' + """ + if re.match(r'http://www.fun.tv/vplay/g-(\w+)', url): + match = re.search(r'http://www.fun.tv/vplay/g-(\d+)(.?)', url) + id = match.group(1) + video_list = funshion_drama_id_to_vid(id) + for video in video_list: + funshion_download_by_vid(vid) + +#---------------------------------------------------------------------- +def funshion_drama_id_to_vid(id): + """int->[(int,int),...] + id: 95785 + ->[('626464', '1'), ('626466', '2'), ('626468', '3'),... + """ + html = get_content('http://pm.funshion.com/v5/media/episode?id={episode_id}&cl=aphone&uc=5'.format(episode_id = episode_id)) + c = json.loads(html) + #{'definition': [{'name': '流畅', 'code': 'tv'}, {'name': '标清', 'code': 'dvd'}, {'name': '高清', 'code': 'hd'}], 'retmsg': 'ok', 'total': '32', 'sort': '1', 'prevues': [], 'retcode': '200', 'cid': '2', 'template': 'grid', 'episodes': [{'num': '1', 'id': '624728', 'still': None, 'name': '第1集', 'duration': '45:55'}, ], 'name': '太行山上', 'share': 'http://pm.funshion.com/v5/media/share?id=201554&num=', 'media': '201554'} + return [(i['id'], i['num']) for i in c['episodes']] + +#---------------------------------------------------------------------- +def funshion_vid_to_urls(vid): + """int->list of URL + Choose the best one. + + code definition: + {'tv': 'liuchang', + 'dvd': 'biaoqing', + 'hd': 'gaoqing', + 'sdvd': 'chaoqing'} + """ + html = get_content('http://pm.funshion.com/v5/media/play/?id={vid}&cl=aphone&uc=5'.format(vid = vid)) + c = json.loads(html) + #{'retmsg': 'ok', 'retcode': '200', 'selected': 'tv', 'mp4': [{'filename': '', 'http': 'http://jobsfe.funshion.com/query/v1/mp4/7FCD71C58EBD4336DF99787A63045A8F3016EC51.json', 'filesize': '96748671', 'code': 'tv', 'name': '流畅', 'infohash': '7FCD71C58EBD4336DF99787A63045A8F3016EC51'}...], 'episode': '626464'} + video_dic = {} + url = '' + for i in c['mp4']: + video_dic[i['code']] = i['http'] + if 'sdvd' in video_dic: + url = video_dic['hd'] + elif 'hd' in video_dic: + url = video_dic['hd'] + elif 'dvd' in video_dic: + url = video_dic['dvd'] + elif 'sd' in video_dic: + url = video_dic['sd'] + html = get_html(url) + c = json.loads(html) + #'{"return":"succ","client":{"ip":"107.191.**.**","sp":"0","loc":"0"},"playlist":[{"bits":"1638400","tname":"dvd","size":"555811243","urls":["http:\\/\\/61.155.217.4:80\\/play\\/1E070CE31DAA1373B667FD23AA5397C192CA6F7F.mp4",...]}]}' + return [i['urls'][0] for i in c['playlist']] + +#---------------------------------------------------------------------- +def funshion_get_title_by_vid(vid): + """int->str""" + #http://pm.funshion.com/v5/media/profile?id=109229&cl=aphone&uc=5 + html = get_content('http://pm.funshion.com/v5/media/profile?id={vid}&cl=aphone&uc=5'.format(vid = vid)) + c = json.loads(html) + return c['name'] + +#---------------------------------------------------------------------- +def funshion_download_by_url(url, output_dir = '.', merge = False, info_only = False): + if re.match(r'http://www.fun.tv/vplay/v-(\w+)', url): + match = re.search(r'http://www.fun.tv/vplay/v-(\d+)(.?)', url) + vid = match.group(1) + title = funshion_get_title_by_vid(vid) + url_list = funshion_vid_to_urls(vid) + for url in url_list: + type, ext, size = url_info(url) + print_info(site_info, title, type_, size) + if not info_only: + download_urls(url_list, title, type_, total_size=None, output_dir=output_dir, merge=merge) + +site_info = "fun.tv/Funshion" +download = funshion_download +download_playlist = playlist_not_supported('funshion') \ No newline at end of file From 726a29e69620f5ac9e671c00b0459ac7e0a811cd Mon Sep 17 00:00:00 2001 From: cnbeining Date: Thu, 20 Aug 2015 02:27:48 -0400 Subject: [PATCH 09/10] Revert "Try adding Funshion(fun.tv) support, fix #215" This reverts commit c39927e9311bff1ade7c27399d09bd8d6b8b3cab. --- src/you_get/extractors/funshion.py | 86 ------------------------------ 1 file changed, 86 deletions(-) delete mode 100644 src/you_get/extractors/funshion.py diff --git a/src/you_get/extractors/funshion.py b/src/you_get/extractors/funshion.py deleted file mode 100644 index 04967946..00000000 --- a/src/you_get/extractors/funshion.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python - -__all__ = ['funshion_download'] - -from ..common import * -import urllib.error -import json - -#---------------------------------------------------------------------- -def funshion_download_by_drama_url(url): - """str->None - url = 'http://www.fun.tv/vplay/g-95785/' - """ - if re.match(r'http://www.fun.tv/vplay/g-(\w+)', url): - match = re.search(r'http://www.fun.tv/vplay/g-(\d+)(.?)', url) - id = match.group(1) - video_list = funshion_drama_id_to_vid(id) - for video in video_list: - funshion_download_by_vid(vid) - -#---------------------------------------------------------------------- -def funshion_drama_id_to_vid(id): - """int->[(int,int),...] - id: 95785 - ->[('626464', '1'), ('626466', '2'), ('626468', '3'),... - """ - html = get_content('http://pm.funshion.com/v5/media/episode?id={episode_id}&cl=aphone&uc=5'.format(episode_id = episode_id)) - c = json.loads(html) - #{'definition': [{'name': '流畅', 'code': 'tv'}, {'name': '标清', 'code': 'dvd'}, {'name': '高清', 'code': 'hd'}], 'retmsg': 'ok', 'total': '32', 'sort': '1', 'prevues': [], 'retcode': '200', 'cid': '2', 'template': 'grid', 'episodes': [{'num': '1', 'id': '624728', 'still': None, 'name': '第1集', 'duration': '45:55'}, ], 'name': '太行山上', 'share': 'http://pm.funshion.com/v5/media/share?id=201554&num=', 'media': '201554'} - return [(i['id'], i['num']) for i in c['episodes']] - -#---------------------------------------------------------------------- -def funshion_vid_to_urls(vid): - """int->list of URL - Choose the best one. - - code definition: - {'tv': 'liuchang', - 'dvd': 'biaoqing', - 'hd': 'gaoqing', - 'sdvd': 'chaoqing'} - """ - html = get_content('http://pm.funshion.com/v5/media/play/?id={vid}&cl=aphone&uc=5'.format(vid = vid)) - c = json.loads(html) - #{'retmsg': 'ok', 'retcode': '200', 'selected': 'tv', 'mp4': [{'filename': '', 'http': 'http://jobsfe.funshion.com/query/v1/mp4/7FCD71C58EBD4336DF99787A63045A8F3016EC51.json', 'filesize': '96748671', 'code': 'tv', 'name': '流畅', 'infohash': '7FCD71C58EBD4336DF99787A63045A8F3016EC51'}...], 'episode': '626464'} - video_dic = {} - url = '' - for i in c['mp4']: - video_dic[i['code']] = i['http'] - if 'sdvd' in video_dic: - url = video_dic['hd'] - elif 'hd' in video_dic: - url = video_dic['hd'] - elif 'dvd' in video_dic: - url = video_dic['dvd'] - elif 'sd' in video_dic: - url = video_dic['sd'] - html = get_html(url) - c = json.loads(html) - #'{"return":"succ","client":{"ip":"107.191.**.**","sp":"0","loc":"0"},"playlist":[{"bits":"1638400","tname":"dvd","size":"555811243","urls":["http:\\/\\/61.155.217.4:80\\/play\\/1E070CE31DAA1373B667FD23AA5397C192CA6F7F.mp4",...]}]}' - return [i['urls'][0] for i in c['playlist']] - -#---------------------------------------------------------------------- -def funshion_get_title_by_vid(vid): - """int->str""" - #http://pm.funshion.com/v5/media/profile?id=109229&cl=aphone&uc=5 - html = get_content('http://pm.funshion.com/v5/media/profile?id={vid}&cl=aphone&uc=5'.format(vid = vid)) - c = json.loads(html) - return c['name'] - -#---------------------------------------------------------------------- -def funshion_download_by_url(url, output_dir = '.', merge = False, info_only = False): - if re.match(r'http://www.fun.tv/vplay/v-(\w+)', url): - match = re.search(r'http://www.fun.tv/vplay/v-(\d+)(.?)', url) - vid = match.group(1) - title = funshion_get_title_by_vid(vid) - url_list = funshion_vid_to_urls(vid) - for url in url_list: - type, ext, size = url_info(url) - print_info(site_info, title, type_, size) - if not info_only: - download_urls(url_list, title, type_, total_size=None, output_dir=output_dir, merge=merge) - -site_info = "fun.tv/Funshion" -download = funshion_download -download_playlist = playlist_not_supported('funshion') \ No newline at end of file From 0dce74da99275afa985ab3a22781247c8c332ace Mon Sep 17 00:00:00 2001 From: fffonion Date: Sat, 22 Aug 2015 01:43:08 +0800 Subject: [PATCH 10/10] fix iqiyi(20150820) --- src/you_get/extractors/iqiyi.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/you_get/extractors/iqiyi.py b/src/you_get/extractors/iqiyi.py index 20e2d38c..b1fc5deb 100644 --- a/src/you_get/extractors/iqiyi.py +++ b/src/you_get/extractors/iqiyi.py @@ -14,6 +14,7 @@ import hashlib Changelog: -> http://www.iqiyi.com/common/flashplayer/20150810/MainPlayer_5_2_26_c3_3_7_1.swf http://www.iqiyi.com/common/flashplayer/20150811/MainPlayer_5_2_26_c3_3_7_2.swf + http://www.iqiyi.com/common/flashplayer/20150820/MainPlayer_5_2_27_2_c3_3_7_3.swf some small changes in Zombie.bite function -> http://www.iqiyi.com/common/flashplayer/20150805/MainPlayer_5_2_26_c3_3_7.swf @@ -46,7 +47,7 @@ bid meaning for quality def mix(tvid): enc = [] - enc.append('3601ba290e4f4662848c710e2122007e') + enc.append('3cba91f1453145438ac5e4f5983bc086') tm = str(randint(2000,4000)) src = 'eknas' enc.append(str(tm))