从任何网站提取 iOS 图标

Mor*_*len 6 favicon objective-c ios swift

大多数网站的根目录中都有一个适用于 iOS 的图标,例如:

https://www.apple.com/apple-touch-icon.png

然而,有很多网站这不起作用。

我希望能够将一个大的网站图标(与 Apple 在将网站添加到主屏幕时下载的图标非常相似)下载到我的 iOS 应用程序中。我不想要最小的图标,我可以从以下网站做到这一点:

https://www.google.com/s2/favicons?domain=www.google.com

在此输入图像描述

我的目的也不是使用开放图谱,因为这给了我错误的印象。例如,当我只想要报纸的徽标时,与文章相关的图像。

任何帮助将不胜感激!

meo*_*meo 7

您可以使用隐藏的谷歌 API 从任何域获取网站图标

这是它的 Swift 结构:

struct FavIcon {
    enum Size: Int, CaseIterable { case s = 16, m = 32, l = 64, xl = 128, xxl = 256, xxxl = 512 }
    private let domain: String
    init(_ domain: String) { self.domain = domain }
    subscript(_ size: Size) -> String {
        "https://www.google.com/s2/favicons?sz=\(size.rawValue)&domain=\(domain)"
    }
}
Run Code Online (Sandbox Code Playgroud)

那么你可以像这样使用它

FavIcon("apple.com")[.l]
Run Code Online (Sandbox Code Playgroud)

您可以使用此 SwiftUI 代码在预览中自行测试它们

struct TestFavIconView: View {
    let domains = "apple.com,stackoverflow.com,github.com".components(separatedBy: ",")
    
    var body: some View {
        List {
            ForEach(domains, id:\.self) { domain in
                Section {
                    ForEach(FavIcon.Size.allCases, id:\.rawValue) { size in
                        HStack {
                            Text("\(size.rawValue)x\(size.rawValue)").font(.footnote)
                            Spacer()
                            AsyncImage(url: URL(string: FavIcon(domain)[size]))
                        }
                    }
                } header: {
                    Text(domain)
                }
            }
        }
    }
}

struct TestFavIconView_Previews: PreviewProvider {
    static var previews: some View {
        TestFavIconView()
    }
}
Run Code Online (Sandbox Code Playgroud)

网站图标获取器


小智 0

yourImageView.sd_setImage(with: URL(string: "https://www.google.com/s2/favicons?sz=64&domain=yourUrl"), 
                          placeholderImage: nil)
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到 StackOverflow。虽然此代码可以回答问题,但提供有关“如何”和/或“为什么”解决问题的附加上下文将提高​​答案的长期价值。 (2认同)
  • 这会从 Google 下载一些 favicon,但它并不能解决 OP 的问题,即从任何网站下载 *favicon*。 (2认同)