YouTube Data API を使って Golang で動画にコメント(返信)します。
Requirements
- Golang
- github.com/joho/godotenv
- google.golang.org/api/googleapi/transport
- google.golang.org/api/youtube/v3
- Google OAuth Client ID
- Google Cloud Console から作成してください
-
Application type
はOther
準備
1. ライブラリのインストール
$ go get github.com/joho/godotenv
$ go get google.golang.org/api/googleapi/transport
$ go get google.golang.org/api/youtube/v3
2. チャンネル作成
Google アカウントでそのまま YouTube を使用している場合は、OAuth Client ID を発行しても認証が通りません。
YouTube の設定からチャンネルを作成する必要があります。
手順
1. コードダウンロード
$ git clone https://github.com/Doarakko/api-challenge
$ cd api-challenge/youtube-data-api
2. CLIENT_ID
と CLIENT_SECRET
を入力
事前に Google Cloud Console 上で作成した認証情報を入れます。
$ mv .env.example .env
CLIENT_ID = ghijk.apps.googleusercontent.com
CLIENT_SECRET = lmnopqr
コードに直書きでも動きますが、間違えて GitHub にあげると面倒なので .env
使います。
3. main.go
修正
func main() {
err := godotenv.Load("./.env")
if err != nil {
log.Fatal("Error loading .env file")
}
comment("enter video id", "おもしろい!")
}
Video ID は動画 URL の以下の箇所です。
4. ビルド
$ go build -o main
5. 実行
$ ./main
解説
comment.go
func comment(videoID string, message string) {
service := newYoutubeService(newOAuthClient())
commentThread := &youtube.CommentThread{
Snippet: &youtube.CommentThreadSnippet{
VideoId: videoID,
TopLevelComment: &youtube.Comment{
Snippet: &youtube.CommentSnippet{
TextOriginal: message,
},
},
},
}
call := service.CommentThreads.Insert("id,snippet", commentThread)
_, err := call.Do()
if err != nil {
log.Fatalf("%v", err)
}
log.Printf("Comment to %v\n", videoID)
}
コメントする際に、コメントの構造体(commentThread
)を渡してあげる必要があります。
入れ子になっていてわかりづらいですが、ドキュメント見ながらエディタの補完機能と定義ジャンプ使うと簡単です。
おまけ
ついでにコメントへの返信もやってみます。
コメントと返信とで使用するメソッドが異なるので注意してください。
以下ではいいねの数が 100 以上のコメントに「わろた」と返信します。
1. main.go
修正
func main() {
err := godotenv.Load("./.env")
if err != nil {
log.Fatal("Error loading .env file")
}
for _, item := range getComments("enter video id") {
likeCnt := item.Snippet.TopLevelComment.Snippet.LikeCount
if likeCnt >= 100 {
commentID := item.Snippet.TopLevelComment.Id
reply(commentID, "わろた")
log.Printf("Reply to %v\n", item.Snippet.TopLevelComment.Snippet.TextDisplay)
}
}
}
getComments
で引数のビデオのコメントを取得して、いいね数が 100 以上のものに対して reply
関数を実行しています。
返信の場合は返信対象のコメント ID を指定します。
2. ビルド
$ go build -o main
3. 実行
$ ./main
Hints
OAuth Client の作成コードは公式サンプルをそのまま使いました。
作成したトークンをローカルに保存して2回目以降はローカルを参照しています。
cacheFile := tokenCacheFile(config)
token, err := tokenFromFile(cacheFile)
if err != nil {
token = tokenFromWeb(ctx, config)
saveToken(cacheFile, token)
} else {
log.Printf("Using cached token %#v from %q", token, cacheFile)
}
他にも Golang と YouTube Data API 関連で記事を書いているので参考にしてみてください。
おわりに
テストでコメントした際に手動で削除するのが面倒なので、対象の動画で自分のコメントを全削除する関数を書いておけばよかったです。