WordPressのプラグイン「Broken Link Checker」がYouTubeの動画タイトルも取得していたので…

WordPressのプラグイン「Broken Link Checker」がYouTubeの動画タイトルも取得していたので…

ちょいと遊んでみたけどタイムラグが

正攻法は「YouTube Data API v3」を使う!

WordPressのプラグインにこんな機能があったのか!?(誇大表現)という話。

今回は、詳しいカスタマイズ手順は載せてない。

  • YouTubeの仕様変更により役に立たなくなる可能性がある。
  • プラグインの仕様変更により役に立たなくなる可能性がある。

WordPressの記事内にリンク切れがあるかどうかのチェックに「Broken Link Checker」というプラグインを使っている。

そして先日、管理を任されている本番サイトのDBをテストサイトにインポートする作業をしたついでに、たまたまDBの中を見てみたら「Broken Link Checker」が独自テーブルを追加して、そこにリンクの有効性についての情報を記載していた(まぁ、ここまでは想定内)。

で、そのDB内に以下の記述を発見。

'<em>(Using YouTube API)</em>\n\n動画は大丈夫です\n\nTitle : \"ここにYouTubeの動画タイトルが記載されている\"\nリンクは有効です。', 0, 'ok', 'OK'

ちなみにリンク切れの場合は、以下の記述になる。

'<em>(Using YouTube API)</em>\n\nビデオが見つかりません\nリンクエラーです。', 0, 'error', 'ビデオが見つかりません'

(Using YouTube API)とDBに記載されているので、プラグインの「Broken Link Checker」そのものがYouTube Data APIを使って情報を取得しているようだが、そのあたりについては詳しくないので省略w

正攻法でのYouTubeの情報取得方法は以下の通り。まずはサイト管理者自身が手順を踏んで「YouTube Data API」を取得する必要があるようだ。

記載漏れ対策になるのか?

管理を任されている某サイトでは、記事によってはYouTubeの「埋め込みコード」を取得して(無加工&手作業で)動画を記事内に埋め込んでいる。その時に動画の所有者さんが付けたタイトルもセットで記載するのだが、ちょいちょい忘れるんだなぁこれが。投稿前にキチンとチェックをすればいいんだけどねw

一応、動画の画面内にはタイトルが表示されるが、文字数の多い長いタイトルの場合はYouTube側の仕様で省略されてしまうため、そういった意味でも動画のタイトルを別途キチンと記載しておくという方針があり、そうそう疎かにも出来ない。

となると、誰しもタイトルの記載漏れ対策に「YouTubeから自動でタイトルを取得すればいい」と思い付くだろうが、結局のところ、その都度手動で対応できる程度の動画数なので話はここから先に進まず、今に至る。

ところが今回、YouTubeの動画タイトルが既にDBに記載されているという状況に遭遇、これを見逃す手はないw

ただ、あくまでもテストサイト内の遊びとして実験をしただけで本番の方には適用していない。最初にも記載したとおり、確定した仕様とは限らず、正攻法のYouTube Data APIであれば仕様が変わっても代替手段などが用意されると期待できるが、自分たちでコントロールできないものに依存するのは出来るだけ避けたいという思いもある。

Broken Link Checkerを解析(?)できれば、DBに記載されている「(Using YouTube API)」の意味も把握できて、特に心配する必要もないかもしれないが…。

独自テーブルのデータを取得して出力

細かい作業内容ではなく、かなりザックリしたカタチで基本的な流れは以下のとおり。

  1. 通常のテンプレートタグを使って記事の内容を取得し、そこから「YouTubeの埋め込みコード」を正規表現を駆使して抜き出し変数にセットしておく。できれば、「embed/」後の11桁の英数記号からなるID部分だけがいいかも。
  2. Broken Link Checkerが作成した「独自テーブル」を取得できるように、設定を変更。
  3. そのテーブルの中から「URL」の項目と「ログ」の項目をセレクト。
  4. 先に取得しておいた「YouTubeの埋め込みコード」と「URL」の文字列が合致した場合には、「ログ」部分に記載されているYouTubeの動画タイトルを(これまた)正規表現を駆使して抜き出して出力する

尚、独自テーブルを取得する方法は、検索すると大まかに分けて3種類の方法が出てきたが、今回は「wp-content」直下に「db.php」を置く方法を採用した。

特に、『自作テーブルの追加からデータ取得まで!WordPressでデータをDBに保持して使う方法 | INSIDE YUKARI』さんの所がかなり参考になった(有り難うございます)。

つまり、やってる事は検索で「テーブル」内の「URL」をYouTubeの埋め込みコードのIDを基に検索して、それに合致した「ログ」を適宜加工して出力するというわけである。まぁ、独自テーブルを取得する方法については、他の参考サイトのやり方がいいけどw

付け加えておくと、この方法で動画のタイトルを取得する場合、記事の公開直後にはタイトルが表示されない。

これは当たり前の話で、Broken Link CheckerがYouTubeの埋め込みコードの有効性をチェックするまでは、YouTube関連の情報はDBに収納されないため動画タイトルが表示される事はないからだ。

このあたりのタイムラグも含めて、やはり「Broken Link Checker」には依存できないw