はじめに
SwiftでTwitterAPIを使って画像を投稿したかったのですがあまり記事がなかったので投稿します。
Swifterというライブラリを使っています。ドキュメントには画像を投稿することについては書いていなかったのですがコード読んでたらそれらしきものがあったのでそれを使いました。
https://github.com/mattdonnelly/Swifter
今回やること
- SwifterでaAuth認証する。
- 画像をツイッターに投稿する。
OAuth認証する。
これに関しては記事を別に書いているのでそちらを見てください。
画像を投稿する。
let image = UIImage(hogehoge)//投稿する画像を入れる。
let data = image.pngData()//data型に変換
//aouth認証で入手したやつを入れる。
let swifter = Swifter(consumerKey: 取得したkey,
consumerSecret: 取得したkey,
oauthToken: 取得したkey,
oauthTokenSecret: 取得したkey)
//ツイート。statusには文をmediaには画像をdata型に変換したものを入れる
swifter.postTweet(status: "test", media: data!,success: { json in
print(json)//成功時
}, failure: {error in
print(error)//失敗時
})
こんな感じでツイートできました。
文章のみ投稿するpostTweetはドキュメントに載っていましたが画像投稿も同じ感じでツイートできました。
補足(413 payload too large errorが帰ってくる場合 )
自分の場合iPhoneのフォルダーから画像を読み取ってそれをアプリに保存した後に
再度アプリから保存した画像を読み取りツイッターに投稿という手順だったのでこの手順のどこかで画像が大きくなってしまったのかもしれません。
もしかしたら同じエラーが帰ってくる人がいるかもしれないので解決方法を載せておきます。
let image = UIImage(hogehoge)//投稿する画像
//大きさをresizeする
let width = image.size.width * 0.1
let height = image.size.height * 0.1
UIGraphicsBeginImageContextWithOptions(CGSize(width: width, height: height), false, 1.0)
image.draw(in: CGRect(x: 0, y: 0, width: width, height: height))
let resizeImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
//大きさをresizeした後にdata型に変換
image.pngData()
こんな感じで画像の大きさをresizeしてあげるとうまくtweetできました。0.1倍じゃなくていいかもしれませんがいい感じの大きさにしてツイートしてあげてください。
注:画像が荒くなる可能性があります。