在 iOS 中获取特定网站 URL 的缩略图和标题?

Get Thumb image and title of particular Website URL in iOS?

我必须显示缩略图并获取 WEB 的标题 URL 与 iOS 中的 LinkedIN 应用程序和 Skype 应用程序相同?

有什么解决办法吗?

您需要下载站点的 html,然后解析它以获得 <title> 标记(它为您提供标题)

<link rel="icon" ... > 标签为您提供网站图标。 Wikipedia article on Favicon link

请注意,标题和网站图标都不能保证存在,尽管大多数网站确实提供了标题,而且大多数主要网站都提供了网站图标。

这是查找 URL

的网站图标的最简单方法
NSString *myURLString = @"http://www.google.com/s2/favicons?domain=www.facebook.com";
NSURL *myURL=[NSURL URLWithString: myURLString];
NSData *myData=[NSData dataWithContentsOfURL:myURL];

UIImage *myImage=[[UIImage alloc] initWithData:myData];

Swift版本:

let myURLString = "http://www.google.com/s2/favicons?domain=www.facebook.com"
let myURL = NSURL(string: myURLString)!
let myData = NSData.dataWithContentsOfURL(myURL)
let myImage = UIImage(data: myData)!

希望这对很多人有帮助

更新

下面是 swift 库,可帮助您按需加载图像。

URLEmbeddedView

Here You can check actual work of library.

  1. 下载主页
  2. 解析元属性 像 og:image 和 og:url
  3. 他们的内容就是你需要的。

其他答案是正确的,但值得注意的是,网站图标是 16x16 像素32x32 像素。对于您希望达到的大小和分辨率,这可能不够。

教科书中没有实现此目的的方法,但一种方法是向 google 发送请求以获取 网站标题 +“图标”(例如"Facebook icon"), 并选择第一个结果。

至于网站的标题,如果您要查找进入网站时浏览器中显示的标题,则必须解析 html 以查找 <title> </title> 标记。

同时实现这两个目标可能具有挑战性,但这绝对不是不可能的。可能有某种服务可以提供这种服务,但据我所知不是。

你可以参考这个:"An NSURL extension for showing preview info of webpages" https://www.cocoacontrols.com/controls/urlpreview

func fetchPageInfo(completion: ((title: String?, description: String?, previewImage: String?) -> Void), failure: ((errorMessage: String) -> Void)) {

        let request = NSMutableURLRequest(URL: self)
        let newUserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36"
        request.setValue(newUserAgent, forHTTPHeaderField: "User-Agent")
        ValidationQueue.queue.cancelAllOperations()

        NSURLConnection.sendAsynchronousRequest(request, queue: ValidationQueue.queue, completionHandler: { (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in
            if error != nil {
                dispatch_async(dispatch_get_main_queue(), {
                    failure(errorMessage: "Url receive no response")
                })
                return
            }

            if let urlResponse = response as? NSHTTPURLResponse {
                if urlResponse.statusCode >= 200 && urlResponse.statusCode < 400 {
                    if let data = data {

                        if let doc = Kanna.HTML(html: data, encoding: NSUTF8StringEncoding) {
                            let title = doc.title
                            var description: String? = nil
                            var previewImage: String? = nil
                            print("title: \(title)")
                            if let nodes = doc.head?.xpath("//meta").enumerate() {
                                for node in nodes {
                                    if node.element["property"]?.containsString("description") == true ||
                                    node.element["name"] == "description" {
                                        print("description: \(node.element["content"])")
                                        description = node.element["content"]
                                    }

                                    if node.element["property"]?.containsString("image") == true &&
                                        node.element["content"]?.containsString("http") == true {
                                            previewImage = node.element["content"]
                                    }
                                }
                            }

                            dispatch_async(dispatch_get_main_queue(), {
                                completion(title: title, description: description, previewImage: previewImage)
                            })
                        }

                    }
                } else {
                    dispatch_async(dispatch_get_main_queue(), {
                        failure(errorMessage: "Url received \(urlResponse.statusCode) response")
                    })
                    return
                }
            }
        })
    }

我试过这个库,它适用于 youtube、flipkart。

https://github.com/myell0w/MTDURLPreview

[MTDURLPreview loadPreviewWithURL:[NSURL URLWithString:@"http://www.flipkart.com"] completion:^(MTDURLPreview *preview, NSError *error) {

    }];

Printing description of preview->_title:
Online Shopping India | Buy Mobiles, Electronics, Appliances, Clothing and More Online at Flipkart.com
Printing description of preview->_domain:
www.flipkart.com
Printing description of preview->_imageURL:
http://img1a.flixcart.com/www/promos/new/20160701_015447_730x300_monsoon.jpg

URLEmbeddedView写在Swift,但你可以在Objective-C.

中使用

This 是 Objective-C 示例代码。请查收。

#import <URLEmbeddedView/URLEmbeddedView-Swift.h>
#import <MisterFusion/MisterFusion-Swift.h>

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UITextView *textView;
@property (strong, nonatomic) URLEmbeddedView *embeddedView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.textView.text = @"https://github.com/";

    [OGDataProvider sharedInstance].updateInterval = [NSNumber days:10];

    self.embeddedView = [[URLEmbeddedView alloc] initWithUrl:@""];
    [self.containerView addLayoutSubview:self.embeddedView andConstraints:@[
        self.embeddedView.Top,
        self.embeddedView.Right,
        self.embeddedView.Left,
        self.embeddedView.Bottom
    ]];
}

- (IBAction)didTapFetchButton:(id)sender {
    [self.embeddedView loadURL:self.textView.text completion:nil];
}

@end