swift + json via wordpress
TRANSCRIPT
Swift +
JSON via WordPress
中島真洋(ナカシマ マサヒロ)
“SwiftyJSON”で簡単にJSONを扱う
自己紹介
中島真洋(ナカシマ マサヒロ)出身:熊本県 FlipClap Inc. WEBデザイナー / エンジニア ブログ:着ぐるみ追い剥ぎペンギン(http://www.kigurumi.asia)
主な使用言語:PHP, JavaScript
アプリ開発経験:なし
サーバーとの連携アプリ
iPhone アプリ
特定のジャンルの 記事情報
WordPress
記事情報
RSS(XML)
WP REST API
XMLじゃなくて、JSONを使いたい!
今後のWordPressに組み込まれる予定 現在はプラグインとして配布中
Docs : http://wp-api.org/ Data : https://github.com/WP-API/WP-API
簡単にJSONで情報が取得できる
iPhone アプリ WordPress
記事情報
JSON
ex) 記事情報 http://ドメイン.com/wp-json/posts/ カテゴリー情報 http://ドメイン.com/wp-json/taxonomies/category/terms/1
表示したい情報
WordPressJSON
tableView
JSONの中身[ { "ID":44367, "title":"\u30e9\u30fc\u30e1\u30f3\u5c4b\u306e\u8b0e\u30eb\u30fc\u30eb\u591a\u30", "status":"publish", "type":"post", “content”:”...", //省略 "featured_image":{ "ID":44368, "title":"", "status":"inherit", //省略 "attachment_meta":{ "width":560, "height":420, "file":"2015\/01\/9b3e06a5-s.jpg", "sizes":{ //省略 "medium":{ "file":"9b3e06a5-s-300x225.jpg", "width":300, "height":225, "mime-type":"image\/jpeg", //↓ここ "url":"http:\/\/navi-blog.com\/wp-content\/uploads\/2015\/01\/9b3e06a5-s-300x225.jpg" } } //...
swiftで普通に書くと//セルの内容を表示 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { //セルを取得 //var cell:UITableViewCell var cell = tableView.dequeueReusableCellWithIdentifier("news") as UITableViewCell //エントリーを取得 var entry = entries[indexPath.row] as NSDictionary //テキスト更新 var titleLabel = cell.viewWithTag(1) as UILabel titleLabel.text = entry["title"] as? String //サムネイル if let featuredImage = entry["featured_image"] as? NSDictionary { if let attachmentMeta = featuredImage["attachment_meta"] as? NSDictionary { if let attachmentSizes = attachmentMeta["sizes"] as? NSDictionary { if let attachmentMedium = attachmentSizes["medium"] as? NSDictionary { // イメージビューを取得して、画像を設定する var fileName = attachmentMedium["url"] as? String var fileUrl = NSURL(string: fileName!); var err: NSError?; var imageData :NSData = NSData(contentsOfURL: fileUrl!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!; var img = UIImage(data: imageData) var imageView = cell.viewWithTag(2) as UIImageView imageView.image = img } } } } return cell }
もっと簡単にJSONが使いたい
SwiftyJSON https://github.com/SwiftyJSON/SwiftyJSON
参考: http://dev.classmethod.jp/smartphone/iphone/swiftyjson/ http://qiita.com/g08m11/items/c3746cbdbdb4c7b71607
インストール
ダウンロードして、「SwiftyJSON.swift」を追加するだけ
ここにドラッグでOK
SwiftyJSONを使うと
{ "ID":44367, "featured_image":{ "title":"AAAAA", }, }, { "ID":44368, "featured_image":{ “title":"BBBB", }, }
var entry = entries[indexPath.row] as NSDictionary if let featuredImage = entry["featured_image"] as? NSDictionary { var text = featuredImage["title"] as? String }
var text = entries[indexPath.row]["featured_image"]["title"].string
↓これが
↓こう書ける
entries.json
JSONだと
// var entries = NSArray() ↓ var entries: JSON = JSON.nullJSON
//var dict = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSArray //self.entries = dict ↓ self.entries = JSON(data: data)
// //エントリーを取得 // var entry = entries[indexPath.row] as NSDictionary // // //テキスト更新 // var titleLabel = cell.viewWithTag(1) as UILabel // titleLabel.text = entry["title"] as? String ↓ var titleLabel = cell.viewWithTag(1) as UILabel titleLabel.text = entries[indexPath.row]["title"].string
JSONだと
// //サムネイル // if let featuredImage = entry["featured_image"] as? NSDictionary { // if let attachmentMeta = featuredImage["attachment_meta"] as? NSDictionary { // if let attachmentSizes = attachmentMeta["sizes"] as? NSDictionary { // if let attachmentMedium = attachmentSizes["medium"] as? NSDictionary { // // // イメージビューを取得して、画像を設定する // var fileName = attachmentMedium["url"] as? String // var fileUrl = NSURL(string: fileName!); // var err: NSError?; // var imageData :NSData = NSData(contentsOfURL: fileUrl!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!; // // var img = UIImage(data: imageData) // var imageView = cell.viewWithTag(2) as UIImageView // imageView.image = img // // } // } // } // } // イメージビューを取得して、サムネイル画像を設定する var fileName:String? = entries[indexPath.row]["featured_image"]["attachment_meta"]["sizes"]["medium"]["url"].string if fileName != nil { var fileUrl = NSURL(string: fileName!); var err: NSError?; var imageData :NSData = NSData(contentsOfURL: fileUrl!,options: NSDataReadingOptions.DataReadingMappedIfSafe, error: &err)!; var img = UIImage(data: imageData) var imageView = cell.viewWithTag(4) as UIImageView imageView.image = img }
おわり
・JSONを扱うなら、SwiftyJSONが便利