Skip to content

Instantly share code, notes, and snippets.

@laiso
Created February 13, 2015 13:04
Show Gist options
  • Save laiso/2da21334c639ca0ca9f7 to your computer and use it in GitHub Desktop.
Save laiso/2da21334c639ca0ca9f7 to your computer and use it in GitHub Desktop.
ViewController.swift
//
// ViewController.swift
import UIKit
import Alamofire
import Realm
class QiitaTag: RLMObject {
dynamic var id = ""
dynamic var iconUrl = ""
dynamic var followersCount = 0
dynamic var itemsCount = 0
override class func primaryKey() -> String {
return "id"
}
}
class ViewController: UIViewController {
func donwload()
{
let d = Downloader(path: "/tmp/qiitags")
d.download(60, endpoint: 100)
}
func addObjects()
{
let realm = RLMRealm.defaultRealm()
realm.transactionWithBlock { () -> Void in
for i in 1...100 {
let path = "/tmp/qiitags/\(i).json"
if let data = NSData(contentsOfFile: path)? {
let tags = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: nil) as [[String: AnyObject]]
tags.map({(tag) -> Void in
let qtag = QiitaTag()
if let id = tag["id"] as? String {
qtag.id = id
}
if let iconUrl = tag["icon_url"] as? String {
qtag.iconUrl = iconUrl
}
if let itemsCount = tag["items_count"] as? Int {
qtag.itemsCount = itemsCount
}
if let followersCount = tag["followers_count"] as? Int {
qtag.followersCount = followersCount
}
realm.addOrUpdateObject(qtag)
})
} else {
break
}
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
// self.donwload()
// return
let realm = RLMRealm.defaultRealm()
let all = QiitaTag.allObjects()
for i in 0..<all.count {
if let t = all[i] as? QiitaTag {
println(t.id)
}
}
println("\(all.count) objects")
}
}
struct Downloader {
var path: String
init(path: String){
self.path = path
}
func download(start: Int, endpoint: Int) -> Void {
if start > endpoint {
return
}
let p = String(start)
Alamofire
.request(.GET, "https://qiita.com/api/v2/tags", parameters: ["page": p])
.response { (request, response, data, error) in
assert(error == nil)
let json = NSString(data: data as NSData, encoding: NSUTF8StringEncoding)
let path = "\(self.path)/\(p).json"
let ret = json?.writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding, error: nil) as Bool!
assert(ret)
NSThread.sleepForTimeInterval(1)
self.download(start+1, endpoint: endpoint)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment