ページにembedで埋め込まれてるYouTube動画がリンク切れしてるかどうかチェックするスクリプト。これだけ書くのに4時間くらいかかった・・・。もっとすらすら書けるようになりたいです。
file_get_contentsでYouTubeのページ内容を取ってきて、その中に div class="errorBox" があったらリンク切れと判定する、という動作。あとは、これをあるドメイン下のページ全部にクロールさせるような仕組みを作りたい。
感想
- 変数とかURLとか呼び出すときに、ダブルクォーテーションがいるのかクォーテーションがいるのか何もいらないのかとかがよくわからない
- どのシチュエーションで何を\でエスケープするべきかもよくわからない(エスケープよく忘れる)
- 直接文字列を関数に入れるってできない? いったん変数に入れる必要がある?
以下はソース
<html><head> <title>Youtubeリンク切れチェッカー</title> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head> <body> <h1>Youtubeリンク切れチェッカー</h1> <p>Embedで埋め込まれているYouTube動画のリンク切れをチェックするよ。</p> <?php $url = $_POST['url']; $fp = file_get_contents($url); $regtitle = "<title>([^<]+)<\/title>"; $regembed = "<embed src=\"http:\/\/www.youtube.com\/v\/([^\"]+)\" [^>]+>"; //titleを探してh2で出力 preg_match("/".$regtitle."/i", $fp, $array); print "<h2>".$array[1]."</h2>"; print "<p><a href=\"$url\">$url</a></p>"; print "<p>このページに含まれている動画は・・・</p>"; //embedを探す preg_match_all("/".$regembed."/", $fp, $array); for($i=0; $i< count($array[0]); $i++) { $youtubeurl = "http://www.youtube.com/watch?v=".$array[1][$i]; print "<h3><a href=\"".$youtubeurl."\" target=\"_blank\">".$youtubeurl."</a></h3>\n"; print "動画は消されてない? →<br />\n"; $contents = file_get_contents($youtubeurl); $errmsg = 'errorBox'; //動画が消えてる場合div.errorBoxが表示される $strresult = strpos($contents, $errmsg); if($strresult === FALSE){ print " エラーメッセージは見つからないよ。生きてるっぽい。 <br/>"; }else{ print " エラーメッセージ見つけた! 消されてるよ。<br />"; } print $array[0][$i]."<br /><br />\n"; } ?> </body> </html>