55 lines
2 KiB
Swift
55 lines
2 KiB
Swift
|
//
|
||
|
// ogHtmlParser.swift
|
||
|
// Monal
|
||
|
//
|
||
|
// Created by Friedrich Altheide on 27.06.22.
|
||
|
// Copyright © 2022 Monal.im. All rights reserved.
|
||
|
//
|
||
|
|
||
|
@objc class MLOgHtmlParser: NSObject {
|
||
|
var og_title: String?
|
||
|
var og_image_url: URL?
|
||
|
|
||
|
@objc init(html: String, andBaseUrl baseUrl: URL?) {
|
||
|
super.init()
|
||
|
let parsedSite = HtmlParserBridge(html:html)
|
||
|
|
||
|
self.og_title = try? parsedSite.select("meta[property=og\\:title]", attribute:"content").first
|
||
|
if self.og_title == nil {
|
||
|
self.og_title = try? parsedSite.select("html head title").first
|
||
|
}
|
||
|
if self.og_title == nil {
|
||
|
DDLogWarn("Could not find any site title")
|
||
|
}
|
||
|
|
||
|
if let image_url = try? parsedSite.select("meta[property=og\\:image]", attribute:"content").first?.removingPercentEncoding {
|
||
|
self.og_image_url = self.parseUrl(image_url, baseUrl)
|
||
|
} else if let image_url = try? parsedSite.select("html head link[rel=apple-touch-icon]", attribute:"href").first?.removingPercentEncoding {
|
||
|
self.og_image_url = self.parseUrl(image_url, baseUrl)
|
||
|
} else if let image_url = try? parsedSite.select("html head link[rel=icon]", attribute:"href").first?.removingPercentEncoding {
|
||
|
self.og_image_url = self.parseUrl(image_url, baseUrl)
|
||
|
} else if let image_url = try? parsedSite.select("html head link[rel=shortcut icon]", attribute:"href").first?.removingPercentEncoding {
|
||
|
self.og_image_url = self.parseUrl(image_url, baseUrl)
|
||
|
} else {
|
||
|
DDLogWarn("Could not find any site image in html")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private func parseUrl(_ url: String, _ baseUrl: URL?) -> URL? {
|
||
|
if url.hasPrefix("http") {
|
||
|
return URL.init(string:url)?.absoluteURL
|
||
|
} else if let baseUrl = baseUrl {
|
||
|
return URL.init(string:url, relativeTo:baseUrl)?.absoluteURL
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
@objc func getOgTitle() -> String? {
|
||
|
self.og_title
|
||
|
}
|
||
|
|
||
|
@objc func getOgImage() -> URL? {
|
||
|
self.og_image_url
|
||
|
}
|
||
|
}
|