phaの日記

パーティーは終わった

YOUTUBEリンク切れチェッカー



 ページに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>