概要
簡易的にWordPressにYouTubeの動画一覧を表示する方法
- YouTube API v3使用
- APIへのアクセスを減らすためTransients APIを使用して一時保存する
※事前にYouTubeのAPIキーの取得をする必要があります。
検索部分
/** ----------------------------------
YouTube検索
------------------------------------ */
function youtube_search(){
// YouTubeチャンネルのID
$youtube_id = '[チャンネルIDを入力してください]';
// APIキー
$api_key = '[APIキーを入力してください]';
// 件数
$num = 15;
// 並び順
$order = 'date';
//YouTube Data APIのURL
$youtube_api = 'https://www.googleapis.com/youtube/v3/';
$youtube_api .= 'search';
$youtube_api .= '?part=snippet&maxResults='. $num .'&order=' . $order;
$youtube_api .= '&channelId='.$youtube_id;
$youtube_api .= '&key='.$api_key;
$option = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30
];
if ( false === ( $youtube_data = get_transient( 'youtube_data' ) ) ) {
$ch = curl_init($youtube_api);
curl_setopt_array($ch, $option);
$json = curl_exec($ch);
try {
$youtube_data = json_decode( $json, false, 512, JSON_THROW_ON_ERROR );
} catch ( JsonException $e ) {
}
if(curl_errno($ch)){
$youtube_data = false;
}
curl_close($ch);
set_transient( 'youtube_data', $youtube_data, 2 * HOUR_IN_SECONDS );
}
return $youtube_data;
}
if ( false === ( $youtube_data = get_transient( 'youtube_data' ) ) ) {
「youtube_data」の部分はTransients APIで保存するときのユニークな名前ですので「youtube_data」でなく違う名前でもOKです。
「youtube_data」がないもしくは最終保存期間から一定期間をすぎると、APIを取得しにいきます。
set_transient( 'youtube_data', $youtube_data, 2 * HOUR_IN_SECONDS );
APIで取得したデータをTransients APIに保存します。保存期間の指定をします。
MINUTE_IN_SECONDS = 60 (秒)
HOUR_IN_SECONDS = 60 * MINUTE_IN_SECONDS (1時間)
DAY_IN_SECONDS = 24 * HOUR_IN_SECONDS (1日)
WEEK_IN_SECONDS = 7 * DAY_IN_SECONDS (1週間)
YEAR_IN_SECONDS = 365 * DAY_IN_SECONDS (1年)
今回は2時間にしています。(2 * HOUR_IN_SECONDS)
頻繁に更新されない情報なのであればもっと伸ばしても良いと思います。
表示部分
<?php $youtube_data = youtube_search(); ?>
<ul>
<?php foreach((array)$youtube_data->items as $post): ?>
<li>
<a href="https://www.youtube.com/watch?v=<?php echo $post->id->videoId; ?>" target="_blank">
<figure>
<img src="<?php echo $post->snippet->thumbnails->medium->url; ?>" alt="">
</figure>
</a>
</li>
<?php endforeach; ?>
</ul>
<a href="https://www.youtube.com/watch?v=<?php echo $post->id->videoId; ?>" target="_blank">
$post->id->videoIdで動画のIDを取得しています。
<img src="<?php echo $post->snippet->thumbnails->medium->url; ?>" alt="">
$post->snippet->thumbnails->medium->urlで動画のサムネイルを取得しています。
サムネイルはdefault、medium、highの大きさが取得できます。
$post->snippet->thumbnails->default->url;
$post->snippet->thumbnails->medium->url;
$post->snippet->thumbnails->high->url;
それ以外にも下記の情報が取得できます。
// 動画タイトル
$post->snippet->title);
// 動画説明文
$post->snippet->description);
// 動画投稿日
$post->snippet->publishedAt);
// チャンネル名
$post->snippet->channelTitle);