如何从html格式文件中获取M3u8的接口

一般的移动端的开发接口都是固定的,比如一个连接http://www.baidu,com/vide.///请求过来的数据是json或者是xml格式文件  但是也有是webViewd的接口这样的话我们不免会一头雾水,如何下手获取我们想要的接口呢 ,下面一个例子说明一下HTML中获取M3u8连接


#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@class URLRetreive;

@protocol URLRetreiveDelegate <NSObject>//自定义协议
- (void)retreiveDidFinshedWithURLString:(NSString *)urlString;//获取连接方法
- (void)retreiveDidFailedWithError:(NSError *)error;//出错方法
@end

@interface URLRetreive : NSObject
@property (nonatomic, assign) id<URLRetreiveDelegate> delegate;//设置代理属性
@property (nonatomic, strong) NSString *videoOriginalUrlString;//视频的原始地址
@property (nonatomic, strong) NSString *errorMessage;
+ (id)retreive;//单例方法
- (void)start;//开始解析

#import "URLRetreive.h"

@interface URLRetreive ()<UIWebViewDelegate>
@property (nonatomic, strong) UIWebView *webContent;//加载网页源码,并解析
- (void)_loadWebContent;//加载网页内容方法
- (void)_retreiveURL;//解析网页
@end

@implementation URLRetreive
+ (id)retreive{
    static URLRetreive *retreive = nil;
    if (retreive == nil) {
        retreive = [[URLRetreive alloc] init];
    }
    return  retreive;
}
- (void)start{
    [self _loadWebContent];
    self.errorMessage = nil;
}

- (void)_loadWebContent{
    self.webContent = [[UIWebView alloc] init];
    self.webContent.delegate = self;
    NSURL *url = [NSURL URLWithString:self.videoOriginalUrlString];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
        [self.webContent loadData:data MIMEType:@"text/html" textEncodingName:@"gbk" baseURL:url];
    }];
}

- (void)_retreiveURL{
    NSString *m3u8Url = [self.webContent stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"video\").src"];
    //判断是否是真实的m3u8地址
    NSRange range = [m3u8Url rangeOfString:@"m3u8"];
    if (range.length != 0) {
        if (self.delegate && [self.delegate respondsToSelector:@selector(retreiveDidFinshedWithURLString:)]) {
            [self.delegate retreiveDidFinshedWithURLString:m3u8Url];
        }
    }
    //如果视频正在审核,无法观看,需要主动提示给用户
    NSString *errorMsg = [self.webContent stringByEvaluatingJavaScriptFromString:@"document.getElementById(\"msg\").innerHTML"];
    if (errorMsg.length != 0) {
        @synchronized(self.errorMessage){
            if (!self.errorMessage) {
                self.errorMessage = [errorMsg stringByReplacingOccurrencesOfString:@"<br>" withString:@"\r\n"];
                NSLog(@"错误信息 = %@", self.errorMessage);
                
                NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain code:0 userInfo:@{@"errorMessage": self.errorMessage}];
                if (self.delegate && [self.delegate respondsToSelector:@selector(retreiveDidFailedWithError:)]) {
                    [self.delegate retreiveDidFailedWithError:error];
                }
            }
        }
    }
    
}

#pragma mark UIWebview Delegate Methods -
- (void)webViewDidFinishLoad:(UIWebView *)webView{
    //网页加载完成,开始解析地址
    [self _retreiveURL];
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{
    if (self.delegate && [self.delegate respondsToSelector:@selector(retreiveDidFailedWithError:)]) {
        [self.delegate retreiveDidFailedWithError:error];
    }
}


@end

使用
<pre name="code" class="objc"> URLRetreive *urret = [URLRetreive retreive];
   
    urret.videoOriginalUrlString = @"http://v.youku.com/v_show/id_XOTU4MDAwODI0_ev_1.html";
    urret.delegate = self;
     [urret start];


 

实现代理方法


- (void)retreiveDidFinshedWithURLString:(NSString *)urlString {
    NSLog(@"22222");
    NSLog(@"%@", urlString);
}
- (void)retreiveDidFailedWithError:(NSError *)error {
    NSLog(@"%@", error);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值