1. 程式人生 > >Java,IOS,Nodejs, HTML5,全棧工程師

Java,IOS,Nodejs, HTML5,全棧工程師

各大視訊網站的視訊地址在手機或者個人網站上面播放有時是不固定的。比方說,你用http://www.flvxz.com這樣的第三方解析出來的網址,可能過一天就不能用了。對於m3u8格式的沒有太多的問題,尤其是mp4格式,很快就會變動,沒有實用效果。所以如何才能夠自己解析出各大視訊網站的真實地址便是一個很重要的問題。下面給出方案:

本人做的是IOS的視訊地址解析,但是在不同的語言之間是沒有界限的。我先把IOS的程式碼貼在這裡,然後介紹其他的語言的辦法:

//得到騰訊的視訊真實url
- (NSString *)getQQUrl:(NSString *)qqVideoUrl {
    NSString *vid = nil;
    NSString *targetUrl = nil;
    
    NSRange vidRange = [qqVideoUrl rangeOfString:@"vid="];
    if (vidRange.location > 0 && vidRange.location < 10000) {
        vid = [qqVideoUrl substringWithRange:NSMakeRange(vidRange.location + 4, 11)];
    } else {
        int loc=5;
        for(int i=0;i<qqVideoUrl.length;i++){
            NSString *s = [qqVideoUrl substringWithRange:NSMakeRange(i, 1)];
            if([s isEqualToString:@"/"])
                loc=i;
        }
        vid=[qqVideoUrl substringWithRange:NSMakeRange(loc+1,qqVideoUrl.length-6-loc)];

        NSLog(@"**********************對不起,您輸入的網址沒有vid標誌,目前正在url地址中匹配vid");
    }
    
    NSString *requestUrl = [NSString stringWithFormat:
                            @"http://vv.video.qq.com/geturl?vid=%@&otype=xml&platform=1&ran=0%%2E9652906153351068", vid];
    NSData * data = [NSData dataWithContentsOfURL:[NSURL URLWithString:requestUrl]];
    GDataXMLDocument *xmlDoc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
    GDataXMLElement *rootElement = [xmlDoc rootElement];
    NSArray *first = [rootElement elementsForName:@"vd"];
    if (first.count > 0) {
        NSArray *second = [[first objectAtIndex:0] elementsForName:@"vi"];
        if (second.count > 0) {
            NSArray *third = [[second objectAtIndex:0] elementsForName:@"url"];
            if (third.count > 0) {
                targetUrl = [[third objectAtIndex:0] stringValue];
            }
        }
    }
    
    return targetUrl;
}
//得到優酷的視訊真實url
- (NSString *)getYouKuUrl:(NSString *)qqVideoUrl {
    NSString *targetUrl = nil;
    
    NSRange vidRange = [qqVideoUrl rangeOfString:@"id_"];
    if (vidRange.location > 0 && vidRange.location < 10000) {
        targetUrl = [qqVideoUrl substringWithRange:NSMakeRange(vidRange.location + 3, 13)];
    } else {
        NSLog(@"**********************對不起,您輸入的網址沒有'id_'的優酷標誌,請確認");
    }
    targetUrl = [NSString stringWithFormat:@"http://v.youku.com/player/getRealM3U8/vid/%@/type//video.m3u8", targetUrl];
    return targetUrl;
}

我這裡選了三個大型視訊平臺,分別是騰訊,優酷還有樂視。但是最後只是解析出來了騰訊和優酷,樂視搞死搞不出來,要是有人有辦法,還請賜教啊,萬謝先。

對於優酷,還是很簡單的,就是字串的拼接,沒有特別的麻煩事。優酷的地址一般都是這樣的:http://v.youku.com/v_show/id_XNjg0ODM3NTcy.html

對於id_後面的那個就是重點,就是你當前播放視訊的視訊id了,也是全球唯一的一個了。然後進行一下拼接就好了。拼接方法如下:

http://v.youku.com/player/getRealM3U8/vid/+“xxxxxxxxxxx”+/type//video.m3u8
就是把視訊的id放在上面的xxx的位置,然後就可以用瀏覽器或者手機上面的播放器播放了。

對於騰訊的,一開始我使用了複雜的辦法,用了很長的時間最後做出來的還是有問題,因為有很多因素需要考慮。在最後我找到了一個非常簡單的辦法,讓我十分的開心。那就是這樣:

2、http://v.qq.com/cover/o/o4bmve7g33cqqr9.html,其中第一個直接給出了id,第二個需要自己檢視網頁的原始碼才能夠得到,自己想辦法了,我推薦一個網址在這裡:http://www.cnblogs.com/bobzhou/archive/2013/02/20/qq.html)

拿到視訊的id之後便是拼接成一個url然後訪問,伺服器會返回一個xml文件回來,一般返回來的會有四個連結,當然了,每一個都是可以使用的,我使用的是第一個,解析的方便了。(只是url的請求訪問以及返回來的xml資料的xml解析自己知道最好嘛,不知道,自己想辦法嘍),這樣便是又拿到了騰訊的真是地址。

重複上面的一句話,樂視的如何都是拿不到,但是上面給出的飛驢網站確是可以拿到,我很奇怪,網上的方法都是找遍了還是沒有辦法突破樂視,我覺得是樂視臨時加強了自己網站的防止偷鏈等等其他因素的能力。要是有人拿到了,不放留言在下,好讓我知道,謝謝先,