PHP レンタルサーバー

YouTube Data API v3で403エラーになったんでデータベースに登録することにした

自分で運営しているWebサイトのトップページにYouTubeのYouTube Data APIを利用して、最新動画を自動で表示させる仕組みを作りました。

その方法はこちら→『YouTube APIとPHPでWebサイトに最新動画を自動で埋め込む方法

数日経って、Webサイトを見てみると動画のサムネが表示されていない!

数日経って、Webサイトを見てみると動画のサムネが表示されていない!

動画の再生ボタンをしてもエラーになります。

動画の再生ボタンをしてもエラーになります。

直接、YouTube Data APIにURLをブラウザから打ってみました。

すると、以下のようなエラーになっています。

{
    "error": {
        "code": 403,
        "message": "The request cannot be completed because you have exceeded your ******* href=\"/youtube/v3/getting-started#quota\"********.",
        "errors": [
        {
            "message": "The request cannot be completed because you have exceeded your ******* href=\"/youtube/v3/getting-started#quota\"********.",
            "domain": "youtube.quota",
            "reason": "quotaExceeded"
        }
        ]
    }
}

ネットで調べてみると、1日当たりの検索された動画件数割り当てに上限があるようですね。

これじゃ、使えないな~ということで、YouTube Data APIを使ってレンタルサーバーのデータベースに登録し、そこから最新の動画情報を取得することにしました。

レンタルサーバーはロリポップ、データベースはMySQLです。

投稿者「みか」自己紹介

  • パソコンとデータベースが大好き
  • 自社でネットワーク・システム・機器管理、Webサイト構築
  • 自社向けのシステムをMicrosoft AccessやPHPで多数構築
  • Excelでの作業はVBAを使って効率化
  • ロックバンド「VARS」でベース担当
  • 「VARS」のWebサイト、ブログも構築
  • 色々と自動化構築中
  • 「VARS」はこちら > https://vasofatum.jp/

データベースにテーブル作成

チャンネルマスタテーブル(m_channel)とデータ用テーブル(dt_youtube)を作成しました。

テーブル:m_channel

テーブル:m_channel

テーブル:dt_youtube

テーブル:dt_youtube

テーブルに登録するPHPスクリプト作成

YouTube情報の管理画面を作り、チャンネルが2つあるので、どちらかをクリックすると、そのチャンネルのYouTubeの情報を取得する仕組みにします。

YouTube情報の管理画面を作り、チャンネルが2つあるので、どちらかをクリックすると、そのチャンネルのYouTubeの情報を取得する仕組みにします。

上記のリンクをクリックすると、下記のスクリプトが実行されるようにします。

一応、YouTubeの最新動画の3件を取得し、「videoId」が無かったら登録という手順にしました。

<?php
require_once "../../blog/wp-config.php";
require_once "../../func_db.php";

$vars_db = get_db();
$touroku_ok = '';

if($_GET['kbn'] == 'vars'){
    $youtube_channel_id = VARS_YOUTUBE_CHANNEL;
}elseif($_GET['kbn'] == 'mattari'){
    $youtube_channel_id = VARS_YOUTUBE_MATTARI_CHANNEL;
}
// YouTube
$get_vars_youtube = "https://www.googleapis.com/youtube/v3/search?part=snippet&channelId=" . $youtube_channel_id . "&maxResults=3&order=date&type=video&key=" . VARS_YOUTUBE_APIKEY;
    // order=date 日付の新しい順
$youtube_dt = file_get_contents($get_vars_youtube);
$youtube_dt_decode = json_decode($youtube_dt, true);

foreach ($youtube_dt_decode['items'] as $key1 => $val1) {
    $channel_id = $val1['snippet']['channelId'];
    $video_id = $val1['id']['videoId'];
    $video_title = $val1['snippet']['title'];
    $publishedat = $val1['snippet']['publishedAt'];
    $publishedat = str_replace('T',' ',$publishedat);
    $publishedat = str_replace('Z','',$publishedat);
    
    $sql = "SELECT video_id 
            FROM dt_youtube 
            WHERE video_id = '{$video_id}'";
    $res = $vars_db->query($sql);
    if(!$res){
        echo "res error";
    }else{
        $data = $res->fetchAll(PDO::FETCH_ASSOC);
        if(empty($data)){
            $sql_in = 'INSERT INTO dt_youtube (channel_id, video_id, video_title, publishedat) values (?, ?, ?, ?)';
            $stmt = $vars_db->prepare($sql_in);
            $flag = $stmt->execute(array($channel_id, $video_id, $video_title, $publishedat));
        }
    }
    if ($flag){
        $touroku_ok .= 'ok';
    }else{
        $touroku_ok .= 'no';
    }
}

$vars_db = null;

echo $touroku_ok;

YouTubeのチャンネルIDやAPIキーはWordPressの「wp-config.php」に書き込んでいます。

YouTube情報の管理画面にも登録データを表示されるようにしました。

YouTube情報の管理画面にも登録データを表示されるようにしました。

データベースから情報を取得

Webサイトに表示させるには、『YouTube APIとPHPでWebサイトに最新動画を自動で埋め込む方法』で作った「func_youtube.php」を下記のように改変しました。

<?php
function get_new_youtube($vars_db){
    $youtube_video_id = '';
    $sql = "SELECT video_id 
            FROM dt_youtube 
            ORDER BY publishedat DESC LIMIT 1";
    $res = $vars_db->query($sql);
    if(!$res){
        echo "res error";
    }else{
        $data = $res->fetchAll(PDO::FETCH_ASSOC);
        if(!empty($data)){
            $youtube_video_id = $data[0]['video_id'];
        }
    }
    return $youtube_video_id;
}

これで、無事に表示されました(^O^)

無事にYouTube動画表示

-PHP, レンタルサーバー
-, , ,