見出し画像

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で保存しているのでファイル名も作っています。

チャンネル名.json

ちなみにここで取得した情報はkokosuki(https://www.glang.tech/kokosuki/MahoroHakuchoge.html)のココのデータになっています。

アイコンとかチャンネル名とかYoutubeボタンに設定してるURLに使ってるよ

さいごに

ドキュメントは分かりにくいけどちゃんと読みましょう。ガイド(https://developers.google.com/youtube/v3/docs/channels?hl=ja)

Channelsならリソース安いので、どうやってデータ取れるのかなと練習にも丁度良いです。1日10000回ミスってもタダ!


この記事が気に入ったらサポートをしてみませんか?