SwiftによるシンプルなRSSリーダーの作り方、を試してみた 1

SwiftによるシンプルなRSSリーダーの作り方

上記の記事を見て作成していたが、 結構前の記事らしくエラーが出まくって1日では半分も終わらなかった。

引っかかった点

Swift3.0でPageMenuが大量のエラー

https://teratail.com/questions/58575

Google Feed APIがすでに終了

ググってみるとYQL APIがでてきたので、それを使ってみる。 が、情報なさすぎるので、適当に作って見た。

Yql.swift

import Alamofire
class Yql {
    class func test_request() {
        Yql.request(
            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!) }
        )
    }

    // https://qiita.com/tmf16/items/d2f13088dd089b6bb3e4
    // https://qiita.com/mishimay/items/1232dbfe8208e77ed10e
    class func request(
        url: String,
        query: String,
        success: @escaping (_ data: Dictionary<String, Any>) -> Void,
        fail: @escaping (_ error: Error?) -> Void) {
        
        let host = "https://query.yahooapis.com/v1/public/yql"
        // let _url = url.addingPercentEncoding(withAllowedCharacters: NSCharacterSet.urlQueryAllowed)!
        let param: Parameters = [
            "format": "json",
            "q": "\(query) where url='\(url)'"
        ]
        
        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)
            }
        }
    }
}

jsonの形式がちょっと変わってた。 ViewController.swift

override func viewDidLoad() {
  super.viewDidLoad()

  Yql.request(
      url: "http://menthas.com/javascript/rss",
      query: "select * from rss",
      success: { (str: Dictionary) -> Void in
          let json = JSON(str)
          let items = json["query"]["results"]["item"]
          if let _items = items.array {
              for item in _items {
                  print(item["title"])
                  print(item["link"])
              }
          }
      },
      fail: { (error: Error?) -> Void in
          print(error!)
      }
  )
}