2021-03-09 12:20:51 -08:00
|
|
|
//
|
|
|
|
|
// SearchProvider.swift
|
|
|
|
|
// App
|
|
|
|
|
//
|
|
|
|
|
// Created by James Magahern on 3/9/21.
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
import Foundation
|
|
|
|
|
|
|
|
|
|
class SearchProvider
|
|
|
|
|
{
|
|
|
|
|
static let google = SearchProvider(resolver: { query in
|
|
|
|
|
// gbv=1: no JS
|
|
|
|
|
URL(string: "https://google.com/search?q=\(query.sanitized())&gbv=1")!
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
static let duckduckgo = SearchProvider(resolver: { query in
|
|
|
|
|
// html version is the one without JS
|
|
|
|
|
URL(string: "https://html.duckduckgo.com/html/?q=\(query.sanitized())")!
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
static let searxnor = SearchProvider(resolver: { query in
|
|
|
|
|
URL(string: "http://searx.nor/search?q=\(query.sanitized())&categories=general")!
|
|
|
|
|
})
|
|
|
|
|
|
2021-11-29 10:55:55 -10:00
|
|
|
static let whoogle = SearchProvider(resolver: { query in
|
|
|
|
|
URL(string: "http://whoogle.nor/search?q=\(query.sanitized())")!
|
|
|
|
|
})
|
|
|
|
|
|
2021-03-09 12:20:51 -08:00
|
|
|
func searchURLWithQuery(_ query: String) -> URL {
|
|
|
|
|
return resolver(query)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal let resolver: (String) -> URL
|
|
|
|
|
internal init(resolver: @escaping (String) -> URL) {
|
|
|
|
|
self.resolver = resolver
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fileprivate extension String {
|
|
|
|
|
func sanitized() -> String {
|
|
|
|
|
self
|
|
|
|
|
.replacingOccurrences(of: " ", with: "+")
|
|
|
|
|
.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!
|
|
|
|
|
}
|
|
|
|
|
}
|