如何在不使用UIWebView的情况下获取标题和网站描述?

时间:2016-09-16 08:08:41

标签: ios objective-c

我想进行网址预览,例如在此图片中 - enter image description here

所以,我使用谷歌favicons得到网站的图像。 但我不明白如何获得网页的标题和描述。 我认识一个好的图书馆URLEmbeddedView,它很棒! 但我想写自己的。
我在stackoverflow上发现了许多类似的问题,但没有答案描述如何在没有UIWebView的情况下获取网站标题。

2 个答案:

答案 0 :(得分:1)

使用stock API,您可以执行以下操作:

- (void)getSiteHtml
{
    NSURLSession *session = NSURLSession.sharedSession;
    NSURLSessionDataTask *dataTask = [session dataTaskWithURL:[NSURL URLWithString:@"https://www.stackoverflow.com"]
           completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
               NSString *htmlString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
               NSLog(@"http string: %@", htmlString);
           }];
    [dataTask resume];
}

此代码当然应该在后台会话中运行。

对于StackOverflow,您将获得这样的字符串:

 <!DOCTYPE html>
<html>
<head>

<title>Stack Overflow</title>
    <link rel="shortcut icon" href="//cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico?v=4f32ecc8f43d">
    <link rel="apple-touch-icon image_src" href="//cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png?v=c78bd457575a">
    <link rel="search" type="application/opensearchdescription+xml" title="Stack Overflow" href="/opensearch.xml">
    <meta name="twitter:card" content="summary">
    <meta name="twitter:domain" content="stackoverflow.com"/>
    <meta property="og:type" content="website" />

    <meta property="og:image" itemprop="image primaryImageOfPage" content="http://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon@2.png?v=73d79a89bded&a" />
    <meta name="twitter:title" property="og:title" itemprop="title name" content="Stack Overflow" />
    <meta name="twitter:description" property="og:description" itemprop="description" content="Q&amp;A for professional and enthusiast programmers" />
    <meta property="og:url" content="http://stackoverflow.com/"/>

    
    
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script src="//cdn.sstatic.net/Js/stub.en.js?v=b84e3ec1d0b3"></script>
    <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/Sites/stackoverflow/all.css?v=ef9c49b839e0">

    <link rel="alternate" type="application/atom+xml" title="Feed of recent questions" href="/feeds">
    

    <script>

然后,您必须解析字符串,尤其是<head>部分,以查找<title>条目,<link >shortcut icon<meta> { {1}}获取所需信息,无需UIWebView。

例如,可以使用XML解析器完成。

答案 1 :(得分:0)

您可以使用API​​调用网页获取HTML字符串。使用一些third party AP I来解析HTML字符串并收集所需信息。

    NSURL *URL = [NSURL URLWithString:@"http://stackoverflow.com/questions/39526606/objective-c-how-can-i-get-title-and-description-of-website-without-using-uiw"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:URL];
    AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];
    [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
    {
        NSString* htmlString = [operation responseString]
        // parse HTML string to gather required information.
    }