SwiftによるシンプルなRSSリーダーの作り方、を試してみた 2
SwiftによるシンプルなRSSリーダーの作り方、を試してみた 1
二日目
サムネが読み込めない
OGP("og:image")がなんか取ってこれなかったので、HTMLReaderを使いmetaタグから 持ってくる方法にシフト。
これを使いするため、クラス名のYqlと関係なくなるので、APIManagerに 名前を変更。
import Alamofire import HTMLReader class APIManager { class func test_request() { APIManager.yqlRequest( url: "http://d.hatena.ne.jp/nitoyon/rss", query: "select title from rss", success: { (data: Dictionary) in print(data) }, fail: { (error: Error?) in print(error!) } ) } // rssデータからjsonへの変換 // https://qiita.com/tmf16/items/d2f13088dd089b6bb3e4 // https://qiita.com/mishimay/items/1232dbfe8208e77ed10e class func yqlRequest( url: String, query: String, limit: Int = 0, success: @escaping (_ data: Dictionary<String, Any>) -> Void, fail: @escaping (_ error: Error?) -> Void) { let host = "https://query.yahooapis.com/v1/public/yql" let limit_query = (limit == 0) ? "" : "limit \(limit)" let param: Parameters = [ "format": "json", "q": "\(query) where url='\(url)' \(limit_query)" ] Alamofire.request(host, method: .get, parameters: param).responseJSON { response in if response.result.isSuccess { success(response.result.value as! Dictionary) } else { fail(response.result.error) } } } // ["og:image": "http://image.png"] class func ogRequest( url: String, success: @escaping (_ data: Dictionary<String, String>) -> Void, fail: @escaping(_ error: Error?) -> Void) { Alamofire.request(url, method: .get).responseString { response in if response.result.isFailure { print(response.result.error!) return let html = HTMLDocument(string: response.result.value!) let ogTags:[HTMLElement] = html.nodes(matchingSelector: "meta[property^=\"og:\"]") var dict = Dictionary<String, String>() ogTags.forEach { let property = $0.attributes["property"]! let content = $0.attributes["content"]! dict[property] = content } success(dict) } } }
一応完成。
感想
- UITableViewのスクロールで画像がずれるとかいろいろ問題あり。
- なんかロードが遅い。
- 使えそうなやつをぶっこんでいったせいで、他の利用法とか調べてない。
- リロード機能とかまだ実装が足りていない部分が多々。
- 起動しているが、たまにrssを読み込んでくれない?バグが発生する。
やはり作ってみることで、問題→解決策という手順で学べる事が多い。
rssからのデータ整形、og:image=http...
からサムネ取得、
YQLの使い方など今後も役に立つ知識なので、やってよかった。
特にCocoaPodsは、Podfileに記述するだけで利用でき、削除も不要な行を消せば できるので、理解すれば超絶楽だった。
完成品は自分のgithubに保存しておきます。
https://github.com/tikyuu/RssReader-Swift