在 Golang 中评论 YouTube 视频

使用YouTube数据API,在Golang中对视频进行评论(回复)。

需求

    • 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的设置中创建频道。

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

操作步骤 xù)

1. 下载代码 -mǎ)

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

输入 CLIENT_ID 和 CLIENT_SECRET

在使用谷歌云控制台之前,需要填写在谷歌云控制台上创建的认证信息。

$ 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", "おもしろい!")
}

视频ID是视频URL中的以下部分。

4. 建造

$ go build -o main

执行

$ ./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)。

嵌套的结构可能有点难懂,但是在查看文档的同时使用编辑器的自动补全和定义跳转功能,就会变得简单。

给你的额外好处

我顺便试着回复一下评论。
请注意,评论和回复使用的方法是不同的。

    • コメント

CommentThreads: insert

返信

Comments: insert

对于点赞数超过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.20.00.png

提示

我直接使用了官方示例代码来创建OAuth客户端。

将创建的令牌保存在本地,并在第二次及以后的使用中参考本地。

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数据API的其他相关文章。

最后

因为在考试中手动删除评论很麻烦,所以我应该在目标视频中编写一个能够完全删除自己评论的函数。

参考资料

    Youtube のコメントを取得する in Golang
广告
将在 10 秒后关闭
bannerAds