LoginSignup
52
56

More than 5 years have passed since last update.

SwiftでTwitterのタイムラインなどを取得する

Last updated at Posted at 2015-11-29

SwiftでTwitterのタイムラインやプロフィール、バナー画像を取得したのでメモ

参考

こちらの記事をめちゃくちゃ参考にさせて頂きました
http://himaratsu.hatenablog.com/entry/twitter/api

やること

  • iOSに登録されているアカウントを使用する
  • タイムラインの取得
  • ユーザの取得
  • バナー画像の取得
  • ツイートする

サンプルコード

GISTにあげておきました
iOSに登録されているアカウントを選択して、プロフィール画像とバナー画像を表示させるサンプルです
https://gist.github.com/SatoshiKawabata/c73542cb164d0abfe2a1

準備

使用するのはAccounts, Socialのフレームワークです

import Accounts
import Social

アカウントの取得

iOSに登録されているアカウントを取得するメソッドです
コールバックにアカウントの配列が返ってきます

var accountStore:ACAccountStore = ACAccountStore()
var twAccount: ACAccount?

func getAccounts(callback: [ACAccount] -> Void) {

    let accountType:ACAccountType = accountStore.accountTypeWithAccountTypeIdentifier(ACAccountTypeIdentifierTwitter)
    accountStore.requestAccessToAccountsWithType(accountType, options: nil) { (granted: Bool, error: NSError?) -> Void in
        if error != nil {
            print("error! \(error)")
            return
        }

        if !granted {
            print("error! Twitterアカウントの利用が許可されていません")
            return
        }

        let accounts = self.accountStore.accountsWithAccountType(accountType) as! [ACAccount]
        if accounts.count == 0 {
            print("error! 設定画面からアカウントを設定してください")
            return
        }

        print("アカウント取得完了")
        callback(accounts)
    }
}

リクエストメソッド

リクエストを送るメソッドを汎用化します
コールバックにレスポンスデータが入ってきます

func sendRequest(url: NSURL, requestMethod: SLRequestMethod, params: AnyObject?, responseHandler: (responseData: NSData!, urlResponse: NSHTTPURLResponse!) -> Void) {
    let request:SLRequest = SLRequest(
        forServiceType: SLServiceTypeTwitter,
        requestMethod: requestMethod,
        URL: url,
        parameters: params as? [NSObject : AnyObject]
    )
    request.account = twAccount
    request.performRequestWithHandler { (responseData: NSData!, urlResponse: NSHTTPURLResponse!, error: NSError!) -> Void in
        if error != nil {
            print("error is \(error)")
        } else {
            responseHandler(responseData: responseData, urlResponse: urlResponse)
        }
    }
}

タイムラインの取得

先ほどのリクエストメソッドを使ってタイムラインの取得リクエストを送ります
コールバックにタイムラインのデータが返ってきます
Twitter APIのページ
https://dev.twitter.com/rest/reference/get/statuses/user_timeline

func getTimeline(callbabk: NSMutableArray -> Void) {

    let url:NSURL = NSURL(string: "https://api.twitter.com/1.1/statuses/user_timeline.json")!

    sendRequest(url, requestMethod: .GET, params: nil) { (responseData, urlResponse) -> Void in
        do {
            let result:NSMutableArray = try NSJSONSerialization.JSONObjectWithData(responseData, options: .AllowFragments) as! NSMutableArray
            callbabk(result)
        } catch {
            print("エラーが発生しました")
        }
    }
}

ユーザ情報の取得

ユーザ情報の取得リクエストを送ります
コールバックにユーザ情報が返ってきます
Twitter APIのページ
https://dev.twitter.com/rest/reference/get/users/show

// ユーザの情報を取得
func getUser(callback: NSMutableDictionary -> Void) {
    let url:NSURL = NSURL(string: "https://api.twitter.com/1.1/users/show.json")!
    let params = ["screen_name" : (twAccount?.username)!]

    sendRequest(url, requestMethod: .GET, params: params) { (responseData, urlResponse) -> Void in
        do {
            let result:NSMutableDictionary = try NSJSONSerialization.JSONObjectWithData(responseData, options: .AllowFragments) as! NSMutableDictionary
            callback(result)
        } catch {
            print("エラーが発生しました")
        }
    }
}

バナー画像の取得

バナー画像の情報を取得します
コールバックにバナー画像の各種URLが返ってきます
Twitter APIのページ
https://dev.twitter.com/rest/reference/get/users/profile_banner

func getBanner(callback: NSMutableDictionary -> Void) {

    let url:NSURL = NSURL(string: "https://api.twitter.com/1.1/users/profile_banner.json")!
    let params = ["screen_name" : (twAccount?.username)!]

    sendRequest(url, requestMethod: .GET, params: params) { (responseData, urlResponse) -> Void in
        do {
            let result: NSMutableDictionary = try NSJSONSerialization.JSONObjectWithData(responseData, options: .AllowFragments) as! NSMutableDictionary
            callback(result)
        } catch {
            print("エラーが発生しました")
        }
    }
}

ツイートする

引数にツイートしたい文字列を渡せばツイートします
Twitter APIのページ
https://dev.twitter.com/rest/reference/post/statuses/update

// 投稿
func postTweet(msg:String) {
    let url:NSURL = NSURL(string: "https://api.twitter.com/1.1/statuses/update.json")!
    let params = ["status" : msg]

    sendRequest(url, requestMethod: .POST, params: params) { (responseData, urlResponse) -> Void in
        // 投稿完了ハンドラ
        print(responseData)
    }
}
52
56
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
52
56