SwiftでアプリからTwitterにGif投稿
アプリで撮影した動画をgifに変換し、twitterに投稿してみた。
TwitterはGifをサポートしてるけど、既存のSLComposeViewController
や、UIActivityViewController
はgifをサポートしていないので少し面倒でした。
動画をgifに変換
Regiftというライブラリを使ったら簡単にできた
twitterに投稿
まずはActionSheet
で全アカウントを表示し、選択されたaccountを返します
import Accounts func selectAccount() -> AnyObject { let account = ACAccountStore() let accountType = account.accountTypeWithAccountTypeIdentifier(ACAccountTypeIdentifierTwitter) account.requestAccessToAccountsWithType(accountType, options: nil, completion: { (success: Bool, error: NSError!) -> Void in if success { guard let accounts = account.accountsWithAccountType(accountType) else { return } if !accounts.isEmpty { let actionSheet = UIAlertController(title: "Choose Account", message: "", preferredStyle: .ActionSheet) for account in accounts { guard let name = account.username else { return } let action = UIAlertAction(title: name, style: .Default, handler: { (action: UIAlertAction) in return account }) actionSheet.addAction(action) } self.presentViewController(actionSheet, animated: true, completion: nil) } } }) } }
選択されたアカウント、メッセージ、gifのNSDataでポスト。 メッセージはDictionaryで["status", ツイート内容]
func post(account: ACAccount, message: [String: String!], data: NSData) { let url = NSURL(string: "https://api.twitter.com/1.1/statuses/update_with_media.json") let postRequest = SLRequest(forServiceType: SLServiceTypeTwitter, requestMethod: .POST, URL: url, parameters: message) postRequest.account = account postRequest.addMultipartData(data, withName: "media", type: "image/gif", filename: "image.gif") postRequest.performRequestWithHandler({ (responseData: NSData!, urlResponse: NSHTTPURLResponse!, error: NSError!) -> Void in print(urlResponse) }) }