From ae584c1375ff648c5d4fe22c6c3b6c259864c974 Mon Sep 17 00:00:00 2001 From: Binux <17175297.hk@gmail.com> Date: Sun, 25 Dec 2011 03:10:43 +0800 Subject: [PATCH] add new api: is_miaoxia --- DOCUMENT | 79 +++++++++++++++++++++++++++++++++- libs/lixian_api.py | 104 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 182 insertions(+), 1 deletion(-) diff --git a/DOCUMENT b/DOCUMENT index df94857..4800497 100644 --- a/DOCUMENT +++ b/DOCUMENT @@ -234,7 +234,7 @@ jsonp1324179064325( "bindex":"0", "url":"http:\/\/gdl.lixian.vip.xunlei.com\/download?dt=16&g=2738997E19696B3306FE13D3313344D947554559&t=2&ui=186811758&n=0C0AB2F3F70A0B7C70389BC1B92014716704AECD9F2E20576804AEF38E08364D5D3EF1A38C1A38465D3EF7A0E131222A6D15F492D1417F0400&s=140108353&v_type=-1&scn=c8", "data":{ - "miaoxia":"0", // 秒下? + "miaoxia":"0", // 秒下? 当为0时能够秒下 "gcid":"9B0A77EAEE46D79F39D429769A26D22D234F7AC1", "cid":"0229511EE1EDBB6D80B6AACC59AC860C97B2983F", "filesize":"135120182", @@ -343,3 +343,80 @@ http://gdl.lixian.vip.xunlei.com/download?dt=16&g=2738997E19696B3306FE13D3313344 same file from differant source: http://gdl.lixian.vip.xunlei.com/download?fid=YCByyucuMkakVrcwCTBhKbxuqWDplo0GAAAAANvXe0bxIDIOrmGbiY6M6+qMg+Rq&mid=666&threshold=150&tid=4376E8C1240AD9864EB8C06D8771E525&srcid=4&verno=1&g=DBD77B46F120320EAE619B898E8CEBEA8C83E46A&scn=c10&i=A29D9468556CF73AFB48A3A8427629DC&t=4&ui=191942368&ti=49494160385&s=109942505&m=0&n=014200D46F206373640F1C328FCEC46974A8D623A72D363030ACC3CA2D61720000 http://gdl.lixian.vip.xunlei.com/download?fid=YCByyucuMkakVrcwCTBhKbxuqWDplo0GAAAAANvXe0bxIDIOrmGbiY6M6+qMg+Rq&mid=666&threshold=150&tid=4376E8C1240AD9864EB8C06D8771E525&srcid=4&verno=1&g=DBD77B46F120320EAE619B898E8CEBEA8C83E46A&scn=c10&i=DBD77B46F120320EAE619B898E8CEBEA8C83E46A&t=1&ui=191942368&ti=50881479681&s=109942505&m=0&n=012262A0112DD6D0CEA578B096E7C7F82D5701D492F22E72611331E45F00000000 + + +VOD: +1. trial_play cookie: + if(this.playType=='demo' || !this.isLogin() || !this.isVip()){//试播新流程 + var leave_time = 3600*24*7; + this.setGdCookie("trial_play",'trial_play',leave_time); + } + + + +vod_get_bt_pic sample output: +{u'list': {u'10': {u'bindex': u'10', + u'cid': u'E91C9ECDB1E1A6CE2193F32EEA314EC8256E3D47', + u'filesize': u'477', + u'gcid': u'19A004FA45003D34800E18E8285C6D4BE4C6584F', + u'img': u'images/no_img.png', + u'ip': u'2071233843', + u'miaoxia': u'0', + u'section_type': u'1'}, + u'11': {u'bindex': u'11', + u'cid': u'D1D243118578D29C9EACB9A201EA51C7E00C9901', + u'filesize': u'106291200', + u'gcid': u'B01E4632E426F1D590BE894B4BC018C178411708', + u'img': u'http://t28a26.sandai.net:8808/pic/B0/08/B01E4632E426F1D590BE894B4BC018C178411708_S.jpg', + u'ip': u'2071233843', + u'miaoxia': u'0', + u'section_type': u'1'}, + u'12': {u'bindex': u'12', + u'cid': u'5847F58810C98559477DA3BBB0F425885FCBE8AA', + u'filesize': u'477', + u'gcid': u'A8BC6FA50C3A407F2C9390057A2AFA398D0BC584', + u'img': u'images/no_img.png', + u'ip': u'2071233843', + u'miaoxia': u'0', + u'section_type': u'1'}, + u'13': {u'bindex': u'13', + u'img': u'images/no_img.png', + u'ip': u'2071233843', + u'miaoxia': u'1'}, + u'14': {u'bindex': u'14', + u'cid': u'C4CDEA0BFB57FF62733FEC924EF35F786273F0D2', + u'filesize': u'106352640', + u'gcid': u'8A787C2AB4F0E0DCD69E23C44D336F6822ABB10F', + u'img': u'http://t28a24.sandai.net:8808/pic/8A/0F/8A787C2AB4F0E0DCD69E23C44D336F6822ABB10F_S.jpg', + u'ip': u'2071233843', + u'miaoxia': u'0', + u'section_type': u'1'}, + u'6': {u'bindex': u'6', + u'cid': u'5E3370EF69D713FB41A4F1268E50A50593ADB860', + u'filesize': u'467', + u'gcid': u'0BECC1499106A021CA33056776F1BE01566B3F4A', + u'img': u'images/no_img.png', + u'ip': u'2071233843', + u'miaoxia': u'0', + u'section_type': u'1'}, + u'7': {u'bindex': u'7', + u'cid': u'6073947D8F203F6286F94A4B4986076EEDEEE96F', + u'filesize': u'106641408', + u'gcid': u'26733402C401ECD750A2F473182C768722DB0703', + u'img': u'http://t0626.sandai.net:8808/pic/26/03/26733402C401ECD750A2F473182C768722DB0703_S.jpg', + u'ip': u'2071233843', + u'miaoxia': u'0', + u'section_type': u'1'}, + u'8': {u'bindex': u'8', + u'img': u'images/no_img.png', + u'ip': u'2071233843', + u'miaoxia': u'1'}, + u'9': {u'bindex': u'9', + u'cid': u'60E721ECDE98F408EE26447D598CB473E38D0037', + u'filesize': u'107164909', + u'gcid': u'76A6CAB7DCA4A11038D5C11DA6FE3C4683DEA12B', + u'img': u'http://t28a04.sandai.net:8808/pic/76/2B/76A6CAB7DCA4A11038D5C11DA6FE3C4683DEA12B_S.jpg', + u'ip': u'2071233843', + u'miaoxia': u'0', + u'section_type': u'1'}}, + u'result': 0} diff --git a/libs/lixian_api.py b/libs/lixian_api.py index fc4cf03..e6ac221 100644 --- a/libs/lixian_api.py +++ b/libs/lixian_api.py @@ -606,3 +606,107 @@ def logout(self): self.session.cookies.clear() self.islogin = False self.task_url = None + +# functions for vod.lixian.xunlei.com + + VOD_REDIRECT_PLAY_URL = "http://dynamic.vod.lixian.xunlei.com/play" + def vod_redirect_play(self, url, fp=None): + params = { + "action": "http_sec", + "location": "home", + "from": "", + "go": "check", + "furl": url, + } + if fp: + files = {'filepath': (url, fp)} + else: + files = None + r = self.session.post(self.VOD_REDIRECT_PLAY_URL, params=params, files=files) + if r.error: + r.raise_for_status() + DEBUG(pformat(r.content)) + m = re.search("""top.location.href="(.*?)";""", + r.content) + assert m + return m.group(1) + + VOD_GET_PLAY_URL = "http://dynamic.vod.lixian.xunlei.com/interface/get_play_url" + def vod_get_play_url(self, url, bindex=-1): + params = { + "callback": "jsonp1234567890", + "t": self._now, + "check": 0, + "url": cid, + "format": 225536, #225536:g, 282880:p + "bindex": ",".join(map(str, bindex)), + "isipad": 0, + } + r = self.session.get(self.VOD_GET_PLAY_URL, params=params) + if r.error: + r.raise_for_status() + function, args = parser_js_function_call(r.content) + DEBUG(pformat(args)) + assert args + return args[0] + + VOD_CHECK_VIP = "http://dynamic.vod.lixian.xunlei.com/interface/check_vip" + def vod_check_vip(self): + pass + + VOD_GET_BT_LIST = "http://dynamic.vod.lixian.xunlei.com/interface/get_bt_list" + def vod_get_bt_list(self, cid): + pass + + def vod_get_list_pic(self, gcid): + pass + + VOD_GET_BT_PIC = "http://dynamic.vod.lixian.xunlei.com/interface/get_bt_pic" + def vod_get_bt_pic(self, cid, bindex=[]): + params = { + "callback" : "jsonp1234567890", + "t" : self._now, + "infohash" : cid, + "bindex" : ",".join(map(str, bindex)), + } + r = self.session.get(self.VOD_GET_BT_PIC, params=params) + if r.error: + r.raise_for_status() + function, args = parser_js_function_call(r.content) + DEBUG(pformat(args)) + assert args + return args[0] + + VOD_GET_PROCESS = "http://dynamic.vod.lixian.xunlei.com/interface/get_progress/" + def vod_get_process(self, url_list): + params = { + "callback": "jsonp1234567890", + "t": self._now, + "url_list": "####".join(url_list), + "id_list": "####".join(["list_bt_%d" % x for x in range(len(url_list))]), + "palform": 0, + } + r = self.session.get(self.VOD_GET_PROCESS, params=params) + if r.error: + r.raise_for_status() + function, args = parser_js_function_call(r.content) + DEBUG(pformat(args)) + assert args + return args[0] + + def is_miaoxia(self, url, bindex=[]): + if bindex: + info = self.vod_get_bt_pic(url, bindex) + if info['result'] != 0: + return False + for k, v in info['list'].iteritems(): + if int(v.get('miaoxia', 1)) == 1: + return False + return True + else: + info = self.vod_get_play_url(url) + if info['result'] == -5: + return False + if int(info.get('data', {}).get('miaoxia', 1)) == 1: + return False + return True