GoLangでYoutube Data APIを使う
基本的には公式のガイド(https://developers.google.com/youtube/v3?hl=ja)を読むことをお勧めしますが、何言ってるかよくわからん箇所がチラホラあるので記事として残したいと思います。
Serviceを作る
こんなかんじ
import (
"golang.org/x/exp/slog"
"google.golang.org/api/option"
"google.golang.org/api/youtube/v3"
)
var service = new(youtube.Service)
func createService(apiKey string) {
svs, err := youtube.NewService(context.Background(),option.WithAPIKey(apiKey))
if err != nil {
slog.Error("Error creating new YouTube client:", err)
return
}
service = svs
slog.Info("Created this service:", svs.BasePath)
}
説明
やっていることは引数で受け取ったapiKeyでサービスを作ってグローバル変数serviceに格納しています。
serviceを作っているのは1行目です。youtube.NewServiceに情報をセットしてインスタンスをsvsで、エラーをerrで受け取ります。
apiKeyが不正とか何らかの理由で接続出来なかったらerrに返却値が入ってくるので、あったらErrorを吐いて終了するようifで判定しています。
後からこのserviceを使ってチャンネル情報とか動画情報とかを取ってくるので、使いまわせるようにしています。
Serviceを使う
こんなかんじ
type STimeStamp struct {
User string
Icon string
YoutubeURL string
}
var timeStamp = new(STimeStamp)
func callChannels(channelID string) {
req := service.Channels.List([]string{"snippet"}).Id(channelID)
res, err := req.Do()
if err != nil {
slog.Error("Error call YouTube API:", err)
return
}
addUnit(1)
item := res.Items[0].Snippet
timeStamp.User = item.Title
timeStamp.Icon = item.Thumbnails.Default.Url
timeStamp.YoutubeURL = "https://www.youtube.com/" + item.CustomUrl
outputFileName = item.CustomUrl + ".json
}
説明
やってることはさっき作ったserviceを使ってChannelsリソースをよびだして、いろいろなチャンネル情報を取得しています。チャンネル名だとかチャンネルのアイコンだとかURLだとか。
Channelsリソースを呼び出しているのは1行目です。service.Channels.Listを呼び出していて、欲しい情報が入っているsnippetを選択し、propertyに引数で受け取ったチャンネルIDを設定しています。
req.Doで実行しています。返却値はservice作成時と同じ挙動をします。
addUnitというのは今回処理を省略していますが、Youtube Data APIは処理を行うごとにユニットを使用しています。1日10000ユニットまで無料なので、超えないように数えています。ちなみにChannelsの消費量は1とクソヤスなので1万回処理を行えます
以降はデータ成型処理です。res.Item[0].Snippetに欲しい情報が全部入っているので、そこからtitle、IconURL、チャンネルURLと、あとついでに最後jsonで保存しているのでファイル名も作っています。
ちなみにここで取得した情報はkokosuki(https://www.glang.tech/kokosuki/MahoroHakuchoge.html)のココのデータになっています。
さいごに
ドキュメントは分かりにくいけどちゃんと読みましょう。ガイド(https://developers.google.com/youtube/v3/docs/channels?hl=ja)
Channelsならリソース安いので、どうやってデータ取れるのかなと練習にも丁度良いです。1日10000回ミスってもタダ!
この記事が気に入ったらサポートをしてみませんか?