Posted at

GASでYouTubeの自分の再生リストを全て非公開にする。

More than 5 years have passed since last update.


前置き

今まで、YouTubeの動画をお気に入りに登録するのと同じように、再生リストにまとめてきたのですが、

非公開のつもりでまとめていたら、どうやら公開されているということに気が付きました。

で、泣く泣く手動で再生リストを非公開化しようと思ったら、「数が膨大でやってられない!」

ということで、ふと、GASにYouTubeのAPIが追加されたのを思い出して、全て非公開にするスクリプトを

作って動かしてみました。


本日のコード


コード.gs

function myFunction() {

var nextToken = "";
while(nextToken != null) {
var res = YouTube.Playlists.list('snippet,status',
{maxResults: 50,
mine: true,
pageToken: nextToken});

for(var i = 0; i < res.items.length; i++) {
var item = res.items[i];

// PlaylistResponse.itemsの型はPlaylist
if(item.status.privacyStatus != "private") {
Logger.log("update: " + item.snippet.title + ", " + item.status.privacyStatus );
item.status.privacyStatus = "private";
var updateRes = YouTube.Playlists.update(item, "snippet, status");
Logger.log(updateRes.status.privacyStatus);
}

}

nextToken = res.nextPageToken;
}
}



YouTube Data APIの有効化と承認が必要です。

GASからYouTubeのAPIを実行するためにAPIを有効にします。

gas側の有効化.png

同時に、Developer ConsoleでもAPIを有効にしておきます。

api有効化.png

実行時に、読み取りと、書き込みの承認をします。YouTube.Playlists.list()YouTube.Playlists.update()を別々に試したので2つに分かれていますが、いきなり更新まで試す場合は、1回で済むと思います。

読み取りの承認.png

書き込み承認.png


解説

まず、自分の再生リストを取得するには、YouTube.Playlists.list()を使います。第1引数が難しいですが、"snippet"を指定すると、再生リストのデータが取得されますが、公開/非公開などのstatus情報は付加されません。(GASでは、undefined)

従って、第1引数は、カンマ区切りで、"snippet,status"と指定しています。ただし、"status"だけでは、エラーになります。

YouTube.Playlists.list()は、最大50件まで、デフォルト5件なので、それ以上登録している場合は、pageTokenパラメータにYouTube.Playlists.list()で取得したnextPageTokenを指定します。最後まで取得し終わったらnextPageTokenがnullになりますので、while文で繰り返し取得します。

(私は、タイプミスがあって、無限ループしていると思い込んでいたけど、実は違ってた…)

戻り値に再生リストレスポンスが返されるので、それをそのまま利用します。

res.items[i]が再生リストの情報です。

公開/非公開情報は、res.items[i].status.privacyStatusに入っていて、"private"、"public"、"unlisted"の3のうちどれかが格納されています。ので、"private"でなければ、"private"に上書きして、YouTube.Playlists.update()を呼び出します。

引数が2つのものと、3つのものがありますが、今回のケースでは、2つの方を使えば大丈夫です。


結果

無事、全て非公開になりました!

が、もう少しGAS側で吸収できないのかな…。statusを付けずに読み取るなんていうことがありえるんだろうか…?まあ、いらないものは送らない方が速度面で有利だとは思うけど、パラメータの指定方法はわかりにくい…。


参考

https://developers.google.com/apps-script/advanced/youtube

https://developers.google.com/youtube/v3/docs/playlists