0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

自分が作成したYouTube Playlistsのデータを取得する手順

Posted at

"youtube api playlist 取得"などでGoogle検索すると、指定したYouTube Playlistの動画情報を取得する方法(プレイリストの中身はなにか etc.)はいくつか見つかるのですが、自分のGoogleアカウントで作成したプレイリストの情報を取得する方法(自分は一体プレイリストをいくつ作成してそれぞれ名前は何か etc.)が調べた限りでは見つからなかったので、ここにやり方を書いておきます。

分かりずらい・面倒くさい

YouTubeのデータを取得するためにはYouTube Data APIを利用する必要があります。指定したプレイリストの動画情報を取得するだけであれば、API Keyを発行しそれを利用することで達成できます。しかし、自分が作成したプレイリスト情報にアクセスするためには、API Keyは使えず、OAuthによる認証が必要です。OAuth認証を利用する場合はAPI Keyは要りません。
これを踏まえて、手順は以下です:

Google Cloud console でOAuth Client IDを作成

上のリンクからアクセスするとプロジェクトの作成を要求されると思います。プロジェクトを作成後OAuth Client IDを作成して下さい。作成の際の留意点は以下:

  • 有効なAPIとサービスYouTube Data APIを有効にします
  • OAuth同意画面を設定します
    • スコープにyoutube.readonlyを含めます
  • OAuth Client ID作成の際には、最初のアプリケーションの種類選択プルダウンではデスクトップ アプリを選択します

クレデンシャルJSONファイルのダウンロード

OAuth Client IDを作成すると、その情報のJSONファイルがダウンロードできる状態になります。ダウンロードします。以降のセクションで/path/to/oauth.jsonとして利用します。

Google Cloud CLIのインストールと設定

インストール

上のリンクからアクセスすると下記のコードとその説明などがあると思います。他の方法でインストールされる場合はそうして下さい。

$ curl https://sdk.cloud.google.com | bash

設定

インストール作業終了後、ブラウザを起動させた状態にしてターミナルで以下のコードを実行します:

$ gcloud auth application-default login --client-id-file /path/to/oauth.json --scopes https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/youtube.readonly

コチラアプリケーションのデフォルト認証情報の仕組みの解説ページに記載があります。
ブラウザで許可を与えると、ターミナルのメッセージのように~/.config/gcloud/application_default_credentials.jsonにOAuth Client IDの情報が格納されます。

シェルスクリプトの作成

コチラのYouTube Data APIのリファレンスページを基に、以下のようなスクリプトを作成します。(こちらのコードはご自身のニーズに合わせて改変して下さい。)

#!/usr/bin/env zsh

export PATH="$PATH:$HOME/.local/opt/google-cloud-sdk/bin" # gcloud 実行ファイルがあるディレクトリをパスに追加. 今回は ~/.local/opt/google-cloud-sdk/bin にあると仮定
mkdir -p ~/.cache/ytpl-list
prefix="https://youtube.googleapis.com/youtube/v3/playlists"
part="snippet%2CcontentDetails%2Cid%2Cstatus%2Clocalizations" # ご自分のニーズに合わせて変更
page=''

gcloud auth application-default print-access-token |
sponge |
awk '{print "Authorization: Bearer "$1}' |
read field1 # doesn't work in bash
field2="Accept: application/json"

timestamp=$(date +"%Y%m%d-%H%M%S")
while true
do
# maxResults は仕様上最大50
echo $prefix'?part='$part'&maxResults=50&mine=true&pageToken='$page |
xargs curl -sL -H $field1 -H $field2 --compressed |
tee -a ~/.cache/ytpl-list/$timestamp.json |
sponge |
jq -r '.nextPageToken // empty' |
read page
test -z "$page" && exit 1
done

idは以下で抽出可能:

jq -r '.items.[].id' ~/.cache/ytpl-list/20******-******.json

titleは以下で抽出可能:

jq -r '.items.[].snippet.title' ~/.cache/ytpl-list/20******-******.json

全プレイリスト数は以下で抽出可能:

jq -r '.pageInfo.totalResults' ~/.cache/ytpl-list/20******-******.json | head -n 1

このコードはalpineyahoo/ytpl-listで使いやすく改良していくつもりです。

余談

gcloud以外にGoogleのOAuthを扱えるツールとしてoauth2lがありこちらも使えそうでしたが、re-authorizeの必要性をチェックする機能が実装されておらず、access-tokenの変数代入のプロセスでエラーとなるケースが起こりそうで少し不満だったので今回は使いませんでした。
今回は自分は一体プレイリストをいくつ作成してそれぞれ名前は何かを知るための話でしたが、プレイリストの中身はなにかを知る用途だけであればyoutube-playlist-exportが便利です。Google Cloud consoleでAPI Keyを発行して利用できます。

参考記事

最後に

不明点や内容の誤りがありましたらお知らせ下さい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?