5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitHub API を 叩く

Last updated at Posted at 2018-11-20

動機

GitHubって、userのフォローはできるけど、organizationってフォローできねえの?
例えば、loftkunはフォローボタンが表示されるけど(押してね)、googleは表示されないね。

まずは正攻法で。GitHub API v3 を試す。

userをfollow/unfollowする

まずはorganizationではなく、userをfollow/unfollowしてみよう

Basic認証とOAuth2認証どちらでもOK

Basic認証で

follow/unfollowできる。

$ USER=my_username
$ PASS=my_password
$ TARGET=target_username
$ # follow
$ curl -i -u ${USER}:${PASS} -X PUT -H 'Content-Length: 0' https://api.github.com/user/following/${TARGET}
$ # unfollow
$ curl -i -u ${USER}:${PASS} -X DELETE https://api.github.com/user/following/${TARGET}

OAuth2認証で

authorization 作成

最低限のスコープuser:followを持つauthorizationを作る
レスポンスにtokenが含まれているので控えておこう。

$ USER=my_username
$ PASS=my_password
$ curl -i -u ${USER}:${PASS} -d '{"scopes":["user:follow"], "note":"user-follow"}' https://api.github.com/authorizations

作成したらPersonal access tokensで確認できる。

follow/unfollow

tokenを使ってfollow/unfollowできる。
パスワード使わなくていいし、最低限の権限しか無いので安全性が高いね。

$ TOKEN=控えておいたtoken
$ TARGET=target_username
$ # follow
$ curl -i -X PUT -H "Authorization: token ${TOKEN}" -H 'Content-Length: 0' https://api.github.com/user/following/${TARGET}
$ # unfollow
curl -i -X DELETE -H "Authorization: token ${TOKEN}" https://api.github.com/user/following/${TARGET}

organizationをfollow/unfollowしようとしてみる

こっからが今回試したかったこと。

organizationはfollowできないようである

前章のTARGETをfollowしたいorganization名にして叩いてみる。
( 例えばgooglefacebooktwitteryahooyahoojapanなどだ。 )

結果、正常に204が返ってくるが、followはできてない。
user配下のfollowingのAPIだからorganizationには効かないんじゃね?と思うことにする。

organizationをfollowしている人は、いまぁす

そもそも、organizationをfollowしている人っているのだろうか?
followerは以下のようにして取得できる。

$ TOKEN=控えておいたtoken
$ TARGET=google
$ curl -i -H "Authorization: token ${TOKEN}" https://api.github.com/users/${TARGET}/followers | grep login

例えばgoogleだと以下3人がfollowerとしてHITした。
organizationをfollowしている人はいる。いるけどめっちゃ少ない。
( このことはuserAPIにユーザ名としてorganization名を指定できる実例でもある。 )

3人ともgoogleをfollowしてることが確認できる。

organization関連のAPIは?

organizationの情報を取得できるAPIにfollowerについての情報がないか調べてみよう。

Organizationsのページにてfollowで検索するとGet an organizationが唯一ヒットする。
このAPIでgoogleのorganization情報を取得してみると

$ TOKEN=控えておいたtoken
$ TARGET=google
$ curl -i -H "Authorization: token ${TOKEN}" https://api.github.com/orgs/${TARGET}
      ( 略 : )
  "followers": 0,
      ( 略 : )

googleのfollowerは0人とおっしゃっている。さっきの3人は・・・?
この辺はGitHub内部的にも整理が行き届いていないのかもしれない。

まとめ

  • userはフォローできる。organizationはフォローできないかも。
    • PUT user/following/loftkunで私(user)をフォローできるよ!
    • PUT user/following/googleでgoogleをフォローできなかったよ。organizationはフォローできないかもね。
  • organizationのフォロワーの調べ方は2つ
    • GET users/google/followersは3人だよ、確かにその3人はgoogleをfollowしてるよ!
    • GET orgs/googlefollowersは0人だよ、じゃあ上の3人は・・?
    • ちなみに両APIで取得したgoogleのidは一致してたよ。

organizationのフォローについて情報をご存知の方はお知らせいただけるとありがたいです。

5
4
1

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
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?