YouTube のチャンネル・動画の詳細情報を取得 in Golang

Golang で YouTube Data API を使用してチャンネル・動画の詳細情報を取得します。

## Requirement
- Youtube API Key
- Golang 1.11

## 準備
- ライブラリのインストール

```
$ go get google.golang.org/api/googleapi/transport
$ go get google.golang.org/api/youtube/v3
```

## 手順
### 1. コードダウンロード
```
$ git clone https://github.com/Doarakko/api-challenge
$ cd api-challenge/youtube-data-api
```
### 2. YouTube API Key を入力
```
const developerKey = "your key"
```
### 3. チャンネル ID・ を入力
- チャンネルホーム URL: チャンネル ID

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245792/d1913918-fa5d-0967-129c-94b891fef077.png)

- 動画 URL: 動画 ID

![](https://qiita-image-store.s3.amazonaws.com/0/245792/50ff8a6b-1323-b068-4f3d-926b25d56e5a.png)

### 4. 実行
- チャンネル詳細情報取得

```
$ go run print-channel-info.go
【チャンネル情報】
channel id: UC4YaOt1yT-ZeyB0OmxHgolA

チャンネル名: 
A.I.Channel

説明: はじめまして！ キズナアイです(o・v・o)♪
チャンネル登録よろしくお願いしますლ(´ڡ`ლ)
---
2019/05/15リリース決定！
 "Kizuna AI 1st アルバム「hello, world」" 予約開始！
https://2018hello.world/album/

---
A.I.Channelでは字幕作成にご協力してくれる方を募集しています！
どの言語でも大歓迎です！ご協力よろしくお願いします！

♡ゲーム専門サブチャンネルもよろしくお願いします♡
【A.I.Games】
https://goo.gl/Xn7u84

【Twitter】
https://twitter.com/aichan_nel

【インスタグラム】
https://www.instagram.com/a.i.channel_official/

【Facebook】
https://www.facebook.com/Kizuna-AIofficial-773286456183351/

【公式WEBサイト】
http://kizunaai.com/



♡A.I.Channelヒストリー♡
2016.12.01 チャンネル開設
2017.01.16 チャンネル停止…
2017.02.02 登録者10,000人達成
2017.02.04 チャンネル完全復活！
2017.02.21 登録者50,000人達成
2017.02.24 登録者100,000人達成
2017.12.01 チャンネル開設一周年♡
2017.12.17 登録者1,000,000人達成
2018.07.15 登録者2,000,000人達成
2018.12.01 チャンネル開設二周年♡

サムネイルURL: https://yt3.ggpht.com/a-/AAuE7mBCUSZyR2ynwssHlevU-6qwlokU8M-7YqU2cg=s800-mo-c-c0xffffffff-rj-k-no

playlist id: UU4YaOt1yT-ZeyB0OmxHgolA

総再生回数: 204274665

チャンネル登録者数: 2526132

動画数: 592
```

- 動画詳細情報取得

```
$ go run print-video-info.go
【動画情報】
video id: wT_GFTDpUno

タイトル: AIが一言物申す！

説明: 
とにかく言いたいことがある！
今日は思いっきり言わせてもらいます！
みんなよーーく聞いてください！
これが私の！ 今の気持ちですからーーーー！！！
-------------------------------------------------------------------------------
チャンネル登録よろしくお願いします(o・v・o)♪　
https://goo.gl/uMP1DM

ゲームチャンネル「A.I.Games」もよろしくお願いします！
♡A.I.Games♡
https://goo.gl/Xn7u84

キズナアイの、キズナアイによる、みんなのためのゲームブログ！
♡A.I.Gamers Info♡
https://www.aigamers.info/

動画で描いたイラストはこちらにUPしていきます！
♡pixiv♡
https://pixiv.me/kizunaai0630

♡Twitter♡
https://twitter.com/aichan_nel

♡Instagram♡
https://www.instagram.com/a.i.channel_official/

♡Facebook♡
https://www.facebook.com/Kizuna-AIofficial-773286456183351/

♡weibo♡
https://www.weibo.com/aichannelchina?refer_flag=1005055014_

♡WEBサイト♡
http://kizunaai.com/
サムネイルURL: https://i.ytimg.com/vi/wT_GFTDpUno/hqdefault.jpg

再生回数: 3418115

コメント数: 8709

高評価数: 85746

低評価数: 2955

channel id: UC4YaOt1yT-ZeyB0OmxHgolA

アップロード日時: 2018-01-05 10:00:07 +0000 UTC
```

## 解説
```go

call := service.Videos.List("id,snippet,Statistics").
```
`List` 内の引数は[こちら](https://developers.google.com/youtube/v3/docs/channels/list)のパラメータ `part` のことです。

[こちら](https://developers.google.com/youtube/v3/docs/channels#resource)にある JSON に対応しています。

指定したもののみレスポンスに含まれます。

試しに、指定していない `brandingSettings` にあるチャンネルのキーワードを出力するようにプログラムを修正。

```go

keyword := item.BrandingSettings.Channel.Keywords

fmt.Printf("channel id: %v\n\nチャンネル名: \n%v\n\n説明: %v\n\nサムネイルURL: %v\n\nplaylist id: %v\n\n総再生回数: %v\n\nチャンネル登録者数: %v\n\n動画数: %v\nチャンネルキーワード%v\n",
    id,
    name,
    description,
    thumbnailURL,
    playlistID,
    viewCount,
    subscriberCount,
    videoCount,
    keyword,
)
```

```
$ go run print-channel-info.go 
【チャンネル情報】
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x1459a66]

goroutine 1 [running]:
main.printChannelInfo(0x15aa9f0, 0x18)
        // 省略
        print-channel-info.go:46 +0x3f6
main.main()
        // 省略
        print-channel-info.go:64 +0x93
exit status 2
```

## おわりに
今回取ってきた情報以外にもいろいろとあるので、ドキュメント見ながら試して見てください。

`brandingSettings` あたりは面白そうです。

## Reference
- [YouTube Data API ドキュメント](https://developers.google.com/youtube/v3/)
- [YouTube Data API 公式サンプル（Golang）](https://github.com/youtube/api-samples/tree/master/go)
- [Youtube のコメントを取得する in Golang](https://qiita.com/Doarakko/items/a6a0ef7120f4bd41b8c2)