YouTube 동영상에 댓글 달기 in Golang

12400 단어 5YouTubeapi
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 설정에서 채널을 만들어야 합니다.





    절차



    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 )를 건네주어야합니다.

    중첩되어 있어 이해하기 어렵지만, 문서 보면서 에디터의 보완 기능과 정의 점프 사용하면 간단합니다.



    이어 코멘트에 대한 회신도 해보겠습니다.
    코멘트와 회신에서 사용하는 메소드가 다르므로 주의해 주세요.
  • 코멘트
  • 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
    





    힌트



    OAuth Client 작성 코드는 공식 샘플을 그대로 사용했습니다.

    작성한 토큰을 로컬에 저장하고 두 번째 이후에는 로컬을 참조합니다.
    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


  • Youtube의 코멘트를 얻는다 in Golang
  • 좋은 웹페이지 즐겨찾기