自分で運営しているWebサイトのトップページにYouTubeのYouTube Data APIを利用して、最新動画を自動で表示させる仕組みを作りました。
その方法はこちら→『YouTube APIとPHPで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/live/
データベースにテーブル作成
チャンネルマスタテーブル(m_channel)とデータ用テーブル(dt_youtube)を作成しました。
テーブル:m_channel
テーブル:dt_youtube
テーブルに登録するPHPスクリプト作成
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情報の管理画面にも登録データを表示されるようにしました。
データベースから情報を取得
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^)