Closed15

youtubeAPIメモ

kznrkznr
  • プロジェクトを作成する。
  • api keyを作成する
# 自身のプロジェクトネームのapiを作成する
> gcloud alpha services api-keys create --display-name=`gcloud config get-value project`
> gcloud services api-keys list
NAME: ***
DISPLAY_NAME: youtubeoperation
kznrkznr
  • youtube APIを有効化する
> gcloud services list --available | grep youtube
NAME: youtube.googleapis.com
NAME: youtubeanalytics.googleapis.com
NAME: youtubeoembed.googleapis.com
NAME: youtubereporting.googleapis.com
> gcloud services enable youtube.googleapis.com
Operation "***" finished successfully.
> gcloud services list --enabled | grep youtube
NAME: youtube.googleapis.com
kznrkznr
  • リクエスト確認
> curl 'https://www.googleapis.com/youtube/v3/videos?id=[YT-ID]&key=[API-KEY]&part=snippet,contentDetails,statistics,status%27'

{
  "kind": "youtube#videoListResponse",
  "etag": "sakOw7NByKyWBGBbTtTBSHWR7Vg",
  "items": [
    {
      "kind": "youtube#video",
      "etag": "TErncbyplb8J9FpqyMwE2F6WZ_M",
      "id": "WJzSBLCaKc8",
      "snippet": {
        "publishedAt": "2015-08-14T10:00:01Z",
        "channelId": "UCZf__ehlCEBPop-_sldpBUQ",
        "title": "YouTubeテーマソング/ヒカキン&セイキン",
        "description": "- \n曲のダウンロードはこちら↓\n◆iTunes\nhttps://itunes.apple.com/jp/album/youtubetemasongu-ep/id1029707577?app=itunes&ls=1\n\n\n◆レコチョク\nhttp://recochoku.jp/album/A1002653096/\n\n\n<収録曲>\n01. YouTubeテーマソン グ\n作詞:SEIKIN/ 作曲:SEIKIN / 編曲:TeddyLoid\n02. YouTubeテーマソング (TeddyLoid Acoustic Remix)\n作詞:SEIKIN/ 作曲:SEIKIN / 編曲:TeddyLoid\n03. BEATBOX PARADE\n作曲:編曲:TeddyLoid\n04. YouTubeテーマソング(インスト)\n05. YouTubeテーマ ソング(カラオケ)\n\n◆SeikinTV\nhttps://www.youtube.com/user/SeikinTV\n\n◆HIKAKIN Twitter\nhttps://twitter.com/hikakin\n\n◆SEIKIN Twitter\nhttps://twitter.com/SeikinTV\n\n◆TeddyLoid Twitter\nhttps://twitter.com/TeddyLoidSpace\n\n◆PV監修:ZUMI",
        "thumbnails": {
          "default": {
            "url": "https://i.ytimg.com/vi/WJzSBLCaKc8/default.jpg",
            "width": 120,
            "height": 90
          },
          "medium": {
            "url": "https://i.ytimg.com/vi/WJzSBLCaKc8/mqdefault.jpg",
            "width": 320,
            "height": 180
          },
          "high": {
            "url": "https://i.ytimg.com/vi/WJzSBLCaKc8/hqdefault.jpg",
            "width": 480,
            "height": 360
          },
          "standard": {
            "url": "https://i.ytimg.com/vi/WJzSBLCaKc8/sddefault.jpg",
            "width": 640,
            "height": 480
          },
          "maxres": {
            "url": "https://i.ytimg.com/vi/WJzSBLCaKc8/maxresdefault.jpg",
            "width": 1280,
            "height": 720
          }
        },
        "channelTitle": "HikakinTV",
        "tags": [
          "hikakin",
          "hikakintv",
          "humanbeatbox",
          "beatbox",
          "video",
          "japan",
          "オススメ",
          "人気",
          "ヒカキン",
          "ひかきん",
          "動画",
          "ユーチューブ",
          "ヒューマンビートボックス",
          "ビートボックス",
          "ボイパ",
          "ボイスパーカッション",
          "ヒカキンTV",
          "セイキン",
          "seikin",
          "YouTube",
          "theme song",
          "YouTube Theme Song",
          "テーマソング",
          "YouTubeテーマソング",
          "PV",
          "MV",
          "歌",
          "曲",
          "song",
          "ユーチューバー",
          "YouTuber",
          "自撮り",
          "ゆーちゅーぶ",
          "ゆーちゅーばー",
          "せいきん",
          "TeddyLoid",
          "テディロイド",
          "Dance",
          "EDM",
          "Dubstep",
          "ダンス",
          "pop",
          "スマホ",
          "スマートホン",
          "スマートフォン",
          "YouTubeテーマソング2",
          "第二弾",
          "第2弾",
          "ユーチューブの歌",
          "youtubeの歌"
        ],
        "categoryId": "23",
        "liveBroadcastContent": "none",
        "defaultLanguage": "ja",
        "localized": {
          "title": "YouTubeテーマソング/ヒカキン&セイキン",
          "description": "- \n曲のダウンロードはこちら↓\n◆iTunes\nhttps://itunes.apple.com/jp/album/youtubetemasongu-ep/id1029707577?app=itunes&ls=1\n\n\n◆レコチョク\nhttp://recochoku.jp/album/A1002653096/\n\n\n<収録曲>\n01. YouTubeテーマソ ング\n作詞:SEIKIN/ 作曲:SEIKIN / 編曲:TeddyLoid\n02. YouTubeテーマソング (TeddyLoid Acoustic Remix)\n作詞:SEIKIN/ 作曲:SEIKIN / 編曲:TeddyLoid\n03. BEATBOX PARADE\n作曲:編曲:TeddyLoid\n04. YouTubeテーマソング(インスト)\n05. YouTubeテー マソング(カラオケ)\n\n◆SeikinTV\nhttps://www.youtube.com/user/SeikinTV\n\n◆HIKAKIN Twitter\nhttps://twitter.com/hikakin\n\n◆SEIKIN Twitter\nhttps://twitter.com/SeikinTV\n\n◆TeddyLoid Twitter\nhttps://twitter.com/TeddyLoidSpace\n\n◆PV監修:ZUMI"
        },
        "defaultAudioLanguage": "ja"
      },
      "contentDetails": {
        "duration": "PT4M52S",
        "dimension": "2d",
        "definition": "hd",
        "caption": "true",
        "licensedContent": true,
        "contentRating": {},
        "projection": "rectangular"
      },
      "status": {
        "uploadStatus": "processed",
        "privacyStatus": "public",
        "license": "youtube",
        "embeddable": true,
        "publicStatsViewable": true,
        "madeForKids": false
      },
      "statistics": {
        "viewCount": "125412476",
        "likeCount": "695611",
        "favoriteCount": "0",
        "commentCount": "88471"
      }
    }
  ],
  "pageInfo": {
    "totalResults": 1,
    "resultsPerPage": 1
  }
}


kznrkznr

下記のため、手動でOAuth クライアントを作成する。

youtube APIを利用するためにOAuth クライアントを利用する必要がある。
ただし上記の作成にはoauth画面同意(=ブランド)を行う必要があり、一般ユーザの場合外部公開しか選べない。
また外部公開として設定後は、CLIよりOAuth クライアントを作成できなくなるっぽい。

IAP の OAuth クライアントをプログラムで作成
IAP

注: API で作成された内部ブランドがパブリックに設定されると、identityAwareProxyClients.create() API は機能しなくなります。これは、ブランドを内部に設定する必要があるためです。したがって、内部ブランドがパブリックになった後は、API を介して新しい OAuth クライアントを作成できません。

gcloud alpha iap oauth-clients create

gcloud beta iap oauth-clients create BRAND --display_name=`gcloud config get-value project`
ERROR: (gcloud.beta.iap.oauth-clients.create) INVALID_ARGUMENT: Request contains an invalid argument.

gcloud beta iap oauth-brands create --application_title=`gcloud config get-value project` --support_email=`gcloud config get-value account`
ERROR: (gcloud.beta.iap.oauth-brands.create) INVALID_ARGUMENT: Request contains an invalid argument.
kznrkznr
$ gcloud services list --available | grep drive
TITLE: Stackdriver Profiler API
NAME: drive.googleapis.com
NAME: driveactivity.googleapis.com
NAME: stackdriver.googleapis.com
TITLE: Stackdriver API
TITLE: Thoughtspot Inc ThoughtSpot Search & AI-driven Analytics Reporting Service
$ gcloud services enable drive.googleapis.com
Operation "***" finished successfully.
kznrkznr
  • sa を確認
gcloud iam service-accounts list
DISPLAY NAME: App Engine default service account
EMAIL: youtubeoperation@***
DISABLED: False
kznrkznr
  • secret manager のアクセス権を確認
$ gcloud iam roles list | grep roles/secretmanager
name: roles/secretmanager.admin
name: roles/secretmanager.secretAccessor
name: roles/secretmanager.secretVersionAdder
name: roles/secretmanager.secret
kznrkznr
$ gcloud secrets add-iam-policy-binding YoutubeOperation --member=serviceAccount:youtubeoperation@*** --role=roles/secretmanager.secretAccessor
Updated IAM policy for secret [YoutubeOperation].
bindings:
- members:
  - serviceAccount:youtubeoperation@appspot.gserviceaccount.com
  role: roles/secretmanager.secretAccessor
etag: ***
version: 1
kznrkznr
  • cloud functionにsecretを登録
$ gcloud functions deploy youtube_upload --runtime python39 --set-secrets 'credentials.json=YoutubeOperation:latest' --trigger-http
WARNING: This deployment uses secrets. Ensure that the runtime service account 'youtubeoperation@***' has access to the secrets. You can do that by granting the permission 'roles/secretmanager.secretAccessor' to the runtime service account on the project or secrets.
E.g. gcloud projects add-iam-policy-binding youtubeoperation --member='serviceAccount:youtubeoperation@***' --role='roles/secretmanager.secretAccessor'
kznrkznr
  • projectにもroleを追加
$ gcloud projects add-iam-policy-binding youtubeoperation --member='serviceAccount:youtubeoperation@***' --role='roles/secretmanager.secretAccessor'
kznrkznr
  • 再デプロイ
    😕
$ gcloud functions deploy youtube_upload --runtime python39 --set-secrets '/credentials:projects/***/secrets/YoutubeOperation=YoutubeOperation:latest' --trigger-http --region=asia-northeast1 --allow-unauthenticated
WARNING: This deployment uses secrets. Ensure that the runtime service account 'youtubeoperation@***' has access to the secrets. You can do that by granting the permission 'roles/secretmanager.secretAccessor' to the runtime service account on the project or secrets.
E.g. gcloud projects add-iam-policy-binding youtubeoperation --member='serviceAccount:youtubeoperation@***' --role='roles/secretmanager.secretAccessor'
Deploying function (may take a while - up to 2 minutes)...working.
For Cloud Build Logs, visit: 
Deploying function (may take a while - up to 2 minutes)...failed.   
ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed: missing main.py and GOOGLE_FUNCTION_SOURCE not specified. Either create the function in main.py or specify GOOGLE_FUNCTION_SOURCE to point to the file that contains the function; Error ID: 5c04ec9c
kznrkznr
  • cliでsaの権限を確認できるように、下記を追加
$ gcloud services enable cloudasset.googleapis.com
Operation "operations/***" finished successfully.
このスクラップは2022/05/04にクローズされました