GitHub API を 叩く

## 動機
GitHubって、userのフォローはできるけど、organizationってフォローできねえの？
例えば、[loftkun](https://github.com/loftkun)はフォローボタンが表示されるけど(押してね)、[google](https://github.com/google)は表示されないね。

まずは正攻法で。[GitHub API v3](https://developer.github.com/v3/) を試す。

## userをfollow/unfollowする

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

- API
  - [Follow a user](https://developer.github.com/v3/users/followers/#follow-a-user)
  - [Unfollow a user](https://developer.github.com/v3/users/followers/#unfollow-a-user)

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

#### Basic認証で
follow/unfollowできる。

``` bash
$ 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`が含まれているので控えておこう。

- API
  - [Create a new authorization
](https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization)

``` bash
$ 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](https://github.com/settings/tokens)で確認できる。

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

```bash
$ 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名にして叩いてみる。
( 例えば`google`、`facebook`、`twitter`、`yahoo`、`yahoojapan`などだ。 )

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

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

```bash
$ 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している人はいる。いるけどめっちゃ少ない。
( このことは`user`APIにユーザ名として`organization`名を指定できる実例でもある。 )

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

- [AliMD](https://github.com/AliMD?tab=following)さん
- [AliGH](https://github.com/AliGH?tab=following)さん
- [seyedi](https://github.com/seyedi?tab=following)さん

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

- API
  - [Organizations](https://developer.github.com/v3/orgs/)
    - [Get an organization
](https://developer.github.com/v3/orgs/#get-an-organization)

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

```bash
$ 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/google`の`followers`は0人だよ、じゃあ上の3人は・・？
  - ちなみに両APIで取得したgoogleの`id`は一致してたよ。

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