GyazoのAPIをRから使ってみる

ドキュメントを見ながらGyazoAPIをRから使ってみます。

https://gyazo.com/api/docs

認証

Gyazoのアカウントを作ったら、アプリケーションの登録をします。以下のURLから「アプリケーションを登録」をクリックするとアプリケーション一覧画面に飛ぶので、「New Application」(文言は違うかも)のボタンをクリックします。

https://gyazo.com/api?lang=ja

アプリケーション登録画面に飛ぶので、適当に入れます。Callback URLはhttrを使うことを考えてhttp://localhost:1410にしてあります。「Submit」を押すとアプリケーションが登録されます。

f:id:yutannihilation:20170215165354p:plain:w450

登録が終わるとアプリケーション一覧画面に戻ってくるので、先ほど作ったアプリケーションの名前をクリックします。(この例で言うと「R Client for Gyazo」)

f:id:yutannihilation:20170215165736p:plain:w450

画像をアップロードしたりするにはOAuthアクセストークンが必要です。以下のclient_idとclient_secretをメモっておきましょう。

f:id:yutannihilation:20170215170846p:plain:w450

なんですが、とりあえず自分一人で使う分には、「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はカオスだったのでほっとしました。