ドキュメントを見ながらGyazoのAPIをRから使ってみます。
認証
Gyazoのアカウントを作ったら、アプリケーションの登録をします。以下のURLから「アプリケーションを登録」をクリックするとアプリケーション一覧画面に飛ぶので、「New Application」(文言は違うかも)のボタンをクリックします。
アプリケーション登録画面に飛ぶので、適当に入れます。Callback URLはhttrを使うことを考えてhttp://localhost:1410
にしてあります。「Submit」を押すとアプリケーションが登録されます。
登録が終わるとアプリケーション一覧画面に戻ってくるので、先ほど作ったアプリケーションの名前をクリックします。(この例で言うと「R Client for Gyazo」)
画像をアップロードしたりするにはOAuthアクセストークンが必要です。以下のclient_idとclient_secretをメモっておきましょう。
なんですが、とりあえず自分一人で使う分には、「Generate」というボタンをクリックして自分用のアクセストークンをつくるだけでも大丈夫です。まあ、どちらもやってみましょう。
個人用のアクセストークンを使う場合
個人用アクセストークンの場合は、Authorization
ヘッダをつけるか、access_token
というクエリパラメータを付けます。
personal_token <- "<個人用アクセストークンの値>" # ヘッダを使う場合 res <- GET("https://api.gyazo.com/api/images", add_headers(`Authorization` = sprintf("Bearer %s", personal_token))) # クエリパラメータを使う場合 res <- GET("https://api.gyazo.com/api/images", query = list(access_token = personal_token))
↓詳しくはこの辺を参照。
https://gyazo.com/api/docs/auth
正式なOAuth認証フローをたどる場合
こんな感じでOAuthのトークンが入手できます。説明はめんどくさいので省略。
library(httr) gyazo_app <- oauth_app( appname = "Gyazo", key = "<client_idの値>", secret = "<client_secretの値>" ) gyazo_endpoint <- oauth_endpoint( authorize = "/oauth/authorize", access = "/oauth/token", base_url = "https://api.gyazo.com" ) gyazo_token <- oauth2.0_token(gyazo_endpoint, gyazo_app)
このトークンを使ってリクエストを送る場合は以下のようにします。さっきみたいに自分でヘッダとかクエリパラメータをつけなくてもhttrが自動で面倒を見てくれて便利です。
res <- GET("https://api.gyazo.com/api/images", config(token = gyazo_token))
ということで、以後の説明はこっちのやり方を使うことにします。
画像の一覧API
↑ですでに使いましたが、画像の一覧が取れます。
res <- GET("https://api.gyazo.com/api/images", config(token = gyazo_token)) status_code(res) #> [1] 200 content(res) #> [[1]] #> [[1]]$image_id #> [1] "............" #> #> [[1]]$permalink_url #> [1] "https://api.gyazo.com/............" #> #> [[1]]$url #> [1] "https://i.gyazo.com/.............png" #> #> [[1]]$type #> [1] "png" #> #> [[1]]$thumb_url #> [1] "https://i.gyazo.com/thumb/200/_............-png.jpg" #> #> [[1]]$created_at #> [1] "2017-02-15T07:32:20+0000" #> #> ...
画像のアップロード
画像のアップロードは、ドキュメントによると
- multipart/form-data を使うこと
となっていて、パラメータ名はimagedata
というのがまさにそれらしいです。httrでファイルをアップロードするときには、upload_file()
を使います。
res <- POST("https://upload.gyazo.com/api/upload", config(token = gyazo_token), body = list(imagedata = upload_file("path/to/image.png"))) content(res) #> $type #> [1] "png" #> #> $thumb_url #> [1] "https://i.gyazo.com/thumb/200/_..........-png.jpg" #> #> $created_at #> [1] "2017-02-15T08:33:23+0000" #> #> $image_id #> [1] ".........." #> #> $permalink_url #> [1] "https://gyazo.com/.........." #> #> $url #> [1] "https://i.gyazo.com/...........png"
できました。最後のurl
という要素に入っているのが画像への直リンらしいです。
画像の削除
画像の削除はimage_id
の文字列を指定して消します。こんな感じです。
DELETE(sprintf("https://api.gyazo.com/api/images/%s", content(res)$image_id), config(token = gyazo_token))
まとめ
シンプルでいいですね。Imgurはカオスだったのでほっとしました。