ビデオリンク、特にYouTubeなどのプラットフォームを処理する場合、ビデオの一意の識別子(ビデオID)を抽出することは、多くのアプリケーションシナリオで一般的な要件です。たとえば、ビデオIDのみを保持することは、ユーザーがサビされたYouTubeリンクをWebページに埋め込み、データベースに保存する場合、より効率的で一貫性があります。 PHPでは、組み込みのparse_url関数を使用してこの関数を実装できます。
この記事では、 parse_urlと他の機能を組み合わせることにより、YouTubeリンクからビデオIDを抽出する方法を紹介します。
実際のアプリケーションでは、YouTubeのリンク形式には次の共通形式がある場合があります。
標準リンク:
https://www.youtube.com/watch?v=VIDEO_ID
ショートリンク:
https://youtu.be/VIDEO_ID
埋め込みリンク:
https://www.youtube.com/embed/VIDEO_ID
Parse_url関数は、スキーム、ホスト、パス、クエリなどの複数の部分にURLを分解できます。この機能を使用して、YouTubeリンクを簡単に分析できます。
function extractYouTubeID($url) {
$parsedUrl = parse_url($url);
// 標準リンク https://www.youtube.com/watch?v=VIDEO_ID
if (isset($parsedUrl['host']) && strpos($parsedUrl['host'], 'youtube.com') !== false) {
if (isset($parsedUrl['path']) && $parsedUrl['path'] === '/watch') {
if (isset($parsedUrl['query'])) {
parse_str($parsedUrl['query'], $queryParams);
if (isset($queryParams['v'])) {
return $queryParams['v'];
}
}
}
// 埋め込みリンク https://www.youtube.com/embed/VIDEO_ID
if (strpos($parsedUrl['path'], '/embed/') === 0) {
return substr($parsedUrl['path'], strlen('/embed/'));
}
}
// 短いリンク https://youtu.be/VIDEO_ID
if (isset($parsedUrl['host']) && $parsedUrl['host'] === 'youtu.be') {
return ltrim($parsedUrl['path'], '/');
}
return null; // 認識されていない形式
}
$links = [
'https://www.youtube.com/watch?v=abc123XYZ',
'https://youtu.be/abc123XYZ',
'https://www.youtube.com/embed/abc123XYZ',
'https://gitbox.net/watch?v=abc123XYZ', // いいえ YouTube ドメイン名,返す必要があります null
];
foreach ($links as $link) {
$videoId = extractYouTubeID($link);
echo "リンク:$link\n";
echo "ビデオ ID:" . ($videoId ?? '識別されていません') . "\n\n";
}
上記のコードは3つの一般的なリンクフォームを考慮していますが、実際に使用すると、さまざまなパラメーターの順序とタイムスタンプパラメーターが添付される可能性もあります。堅牢性を向上させるために、 parse_strの後にパラメーターでより多くの検証を実行できます。
ドメイン名を交換したり、非Youtubeリンクを識別したりして、信頼できるソースのみが処理されるようにする場合は特に注意してください。
Parse_urlやParse_strなどの組み込み関数を介して、PHPはURLを効率的に解析し、特定のパラメーターを抽出できます。この方法は単純であるだけでなく、優れた保守性もあります。それを一般的な機能にカプセル化します。これは、さまざまなプロジェクトで再利用され、開発効率を向上させることができます。