したいこと
「SwiftからHTMLをリクエストするときに、スマホ用ページとPC用ページを切り替えたい」
同じURLのサイトでもPCでみた時と、スマホでみた時はレイアウトが変わっている。
スマホ版は情報を少なくするため、PC用のHTMLだと一発で取れた値でも、スマホ版では隠されていることがある。
場合によって、PC版とスマホ版のアクセスを切り替える。
PC版とスマホ版は何が違う?
URLをリクエストするときにヘッダに User-Agent
という情報を付加して、どちらのHTMLを要求するかを決めている。
なので、スマホ版のHTMLが欲しければスマホのUser-Agentを、PC版のHTMLが欲しければPCのUser-Agentを付加しなければいけない。
User-Agentに関してはこちらを参照した。
https://qiita.com/kapiecii/items/093ffd6f0b09ad775250
方法
- URLリクエストにはAlamofireを使用した。
- HTMLのparseには、Kannaを使用した。
import Alamofire
import Kanna
override func viewDidLoad() {
let url = "https://qiita.com/"
let parameters: Parameters = [:]
// PC版
let headers: HTTPHeaders = ["User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36"]
// スマホ版
// let headers: HTTPHeaders = ["User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1"]
AF.request(url,
method: .get,
parameters: parameters,
encoding: URLEncoding(destination: .queryString),
headers: headers
).responseData(completionHandler: { (data) in
if let d = data.data {
self.parse(data: d)
}
})
}
func parse(data: Data) {
do {
let articles = try HTML(html: data, encoding: .utf8).css("article")
for article in articles {
if let h2 = article.css("h2").first?.text {
print(h2)
}
}
} catch {
print("error while parsing")
print("data:", data)
}
}
感想
Alamofire.request
じゃなくて AF.request
なのにちょっとつまづいた。
あまり記事がなかったので、最近の変更?