Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What is going on with this article?
@Doarakko

YouTube の動画にコメントする in Golang

More than 1 year has passed since last update.

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 typeOther

準備

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 の設定からチャンネルを作成する必要があります。

スクリーンショット 2019-04-27 23.24.15.png
スクリーンショット 2019-04-27 23.24.18.png
スクリーンショット 2019-04-27 23.24.21.png

手順

1. コードダウンロード

$ git clone https://github.com/Doarakko/api-challenge
$ cd api-challenge/youtube-data-api

2. CLIENT_IDCLIENT_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

スクリーンショット 2019-05-02 18.18.07.png

解説

  • 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

スクリーンショット 2019-05-02 18.04.27.png
スクリーンショット 2019-05-02 18.04.19.png
スクリーンショット 2019-05-02 18.20.00.png

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 関連で記事を書いているので参考にしてみてください。

おわりに

テストでコメントした際に手動で削除するのが面倒なので、対象の動画で自分のコメントを全削除する関数を書いておけばよかったです。

Reference

2
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Doarakko
howtelevision
グローバルプロフェッショナルを目指す学生に向けた国内最大級の就職活動サイト「外資就活ドットコム」を運営

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
2
Help us understand the problem. What is going on with this article?