ios解析愛奇藝的視頻地址

思路和前面解析其它視頻網(wǎng)站的差不多竞思,都是一層層的撥開隱藏的東西表谊,獲取到真正的視頻地址。

1)需要準(zhǔn)備視頻網(wǎng)址盖喷。

2)一些驗證碼解析視頻固定的參數(shù)

3)從網(wǎng)址的地址中獲取需要的參數(shù)

4)解析視頻的鏈接地址

一)準(zhǔn)備參數(shù)(一些需要驗證的參數(shù))

self.scUrl= url;

self.MD5_KEY = @"d5fb4bd9d50c4be6948c97edd7254b0e";

self.SRC = @"76f90cbd92f94a2e925d83e8ccd22cb7";?

NSString *htmlString = [NSString stringWithContentsOfURL:[NSURL URLWithString:url] encoding:NSUTF8StringEncoding error:nil];

?NSString * tvid = [[[[[self matchString:htmlString toRegexString:@"data-(?:player|shareplattrigger)-tvid\\s*=\\s*[\\'\"](\\d+)"] firstObject] componentsSeparatedByString:@"="] lastObject] substringFromIndex:1];

?NSString * videoId = [[[[[self matchString:htmlString toRegexString:@"data-(?:player|shareplattrigger)-videoid\\s*=\\s*[\\'\"]([a-f\\d]+)"] firstObject] componentsSeparatedByString:@"="] lastObject] substringFromIndex:1];?

2)上步中用到了利用正則表達式去獲取到想要的信息

-(NSArray*)matchString:(NSString*)string toRegexString:(NSString*)regexStr{

? ? NSRegularExpression * regex = [NSRegularExpression regularExpressionWithPattern:regexStr options:NSRegularExpressionCaseInsensitive error:nil];

? ? NSArray* matches = [regex matchesInString:string options:0 range:NSMakeRange(0, [stringlength])];

? ? //match: 所有匹配到的字符,根據(jù)() 包含級

? ? NSMutableArray *array = [NSMutableArray array];

? ? for(NSTextCheckingResult * match in matches) {

? ? ? ? for(inti =0; i < [match numberOfRanges]; i++) {

? ? ? ? ? ? //以正則中的(),劃分成不同的匹配部分

? ? ? ? ? ? NSString * component = [string substringWithRange:[match rangeAtIndex:i]];

? ? ? ? ? ? [array addObject:component];

? ? ? ? }

? ? }

? ? return array;

二)拼接需要的解析視頻的地址

1)拼接地址

-(NSString*)rawDaTa:(NSString*)tvid videoId:(NSString*)videoId{

? ? NSString* raw =@"";

? ? NSString * time =[NSString stringWithFormat:@"%ld",(long)[NSDate date].timeIntervalSince1970];

? ? NSString* pa = [NSString stringWithFormat:@"%@%@%@",time,self.MD5_KEY,tvid];

? ? NSString* sc = [XJMD5 MD5ForLower32Bate:pa];

? ? self.api = @"http://cache.m.iqiyi.com/jp/tmts/%@/%@/?tvid=%@&vid=%@&src=%@&sc=%@&t=%@";

? ? raw = [NSString stringWithFormat:self.api,tvid,videoId,tvid,videoId,self.SRC,sc,time];

? ? return raw;

}

2)獲取到地址后爆办,就能直接去進行網(wǎng)絡(luò)請求,然后解析反回來的json數(shù)據(jù)课梳,獲取到視頻真正的地址

-(void)getVideoData:(NSString*)url{

? ? AFHTTPSessionManager * mn = [AFHTTPSessionManager manager];

? ? mn.responseSerializer = [AFHTTPResponseSerializer serializer];

? ? [mn GET:url parameters:nil progress:^(NSProgress *_Nonnull downloadProgress) {

? ? } success:^(NSURLSessionDataTask *_Nonnull task,id? _Nullable responseObject) {

? ? ? ? NSString * str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];

? ? ? ? NSString * reStr = [str stringByReplacingOccurrencesOfString:@"var tvInfoJs="withString:@""];

? ? ? ? NSData * data = [reStr dataUsingEncoding:NSUTF8StringEncoding];

? ? ? ? NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

? ? ? ? if(![[dic objectForKey:@"code"] isEqualToString:@"A00000"])//error ?{

? ? ? ? ? ? self.anLyBlock([NSMutableArray array]);

? ? ? ? }

? ? ? ? else {

? ? ? ? ? ? NSArray * ary = [[dic objectForKey:@"data"] objectForKey:@"vidl"];

? ? ? ? ? ? NSMutableArray * videoAry = [[NSMutableArray alloc] init];

? ? ? ? ? ? //這里獲取第一個視頻的地址

? ? ? ? ? ? NSDictionary * videoDic = [ary firstObject];

? ? ? ? ? ? VideoModel * video = [VideoModel new];

? ? ? ? ? ? video.videoUrl = [videoDic objectForKey:@"m3utx"];

? ? ? ? ? ? video.srcUrl =self.scUrl;

? ? ? ? ? ? [videoAry addObject:video];

? ? ? ? ? ? if(self.anLyBlock)

? ? ? ? ? ? self.anLyBlock(videoAry);

? ? ? ? }

? ? } failure:^(NSURLSessionDataTask *_Nullable task, NSError *_Nonnull error) {

? ? ? ? if(self.anLyBlock)

? ? ? ? self.anLyBlock([NSMutableArray array]);

? ? }];

}


上面的解析方法中距辆,可能會有一些參數(shù)會被愛奇藝修改掉。如果解析不成功暮刃,看看是否是參數(shù)的問題跨算。

申明:這只是自己的一些研究而已,請不要用于商業(yè)用途椭懊。如果影響到你的利益诸蚕,請聯(lián)系我。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市挫望,隨后出現(xiàn)的幾起案子立润,更是在濱河造成了極大的恐慌,老刑警劉巖媳板,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桑腮,死亡現(xiàn)場離奇詭異,居然都是意外死亡蛉幸,警方通過查閱死者的電腦和手機破讨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奕纫,“玉大人提陶,你說我怎么就攤上這事∑ゲ悖” “怎么了隙笆?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長升筏。 經(jīng)常有香客問我撑柔,道長,這世上最難降的妖魔是什么您访? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任铅忿,我火速辦了婚禮,結(jié)果婚禮上灵汪,老公的妹妹穿的比我還像新娘檀训。我一直安慰自己,他們只是感情好享言,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布峻凫。 她就那樣靜靜地躺著,像睡著了一般览露。 火紅的嫁衣襯著肌膚如雪蔚晨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天肛循,我揣著相機與錄音铭腕,去河邊找鬼。 笑死多糠,一個胖子當(dāng)著我的面吹牛累舷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夹孔,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼被盈,長吁一口氣:“原來是場噩夢啊……” “哼析孽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起只怎,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤袜瞬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后身堡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邓尤,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年贴谎,在試婚紗的時候發(fā)現(xiàn)自己被綠了汞扎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出惧笛,到底是詐尸還是另有隱情,我是刑警寧澤痹扇,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站溯香,受9級特大地震影響帘营,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逐哈,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望问顷。 院中可真熱鬧昂秃,春花似錦、人聲如沸杜窄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽塞耕。三九已至蚀腿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扫外,已是汗流浹背莉钙。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留筛谚,地道東北人磁玉。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像驾讲,于是被迫代替她去往敵國和親蚊伞。 傳聞我的和親對象是個殘疾皇子席赂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容