Webnews.otaのソースコード

未完成だけど(サーバで動いてくれない.何故だ!?まぁ結構結果返ってくるまで時間かかるプログラムではあるけれど…)

<?php
//初期設定
$Wn_title = "Webnews.ota";
$Google ="UA-2288165-4";//Google Analyticsのキー
?>

<?php

/////////定義部/////////
include_once("snoopy.class.php");
include_once("htmlsql.class.php");

//ファイル処理
$htmlString = "";
function print_HTML($str){
	global $htmlString;
	$htmlString = $htmlString.$str;
	//echo $str;
}

function get_url_sql($URL){
	global $wsql;
	// connect to a URL
	if (!$wsql->connect('url', $URL)){
		print 'Error while connecting : ' . $wsql->error;
		echo "SQL!!!!";
		exit;
	}
	if (!$wsql->query('SELECT href as url, text FROM a')){
		print "Query error: " . $wsql->error; 
		echo "SQL!!!!!!!!!!!!!";
		exit;
	}
	return $wsql->fetch_array();
}

function get_title_sql($TITLE){
	global $wsql;
	// connect to a URL
	if (!$wsql->connect('url', $TITLE)){
		print 'Error while connecting: ' . $wsql->error;
		exit;
	}
	if (!$wsql->query('SELECT text FROM title')){
		print "Query error: " . $wsql->error; 
		exit;
	}
	return $wsql->fetch_array();
}

function clean_url($url){
	if(ereg( ".*[0-9]{4,}$",$url)==true)
		return 1;
	if(ereg( ".*p[0-9]$",$url)==true)
		return 1;
	if(ereg( ".*#[0-9]*$",$url)==true)
		return 1;
	if(ereg( "html$",$url)==true)
		return 1;
	if(ereg( "htm$",$url)==true)
		return 1;
	return 0;
}
class WnClass{
	var $url;
	var $title;
	var $count = 1;
	var $moto;
	function set_url($url1){
		$this->url = $url1;
	}
	function set_title($title1){
		$this->title = $title1;
	}
	function set_moto($moto){
		$this->moto[$this->count] = $moto;
	}
	function view_moto(){
		print_HTML("<p class=moto>");
		for($counter=0;$counter<=$this->count;$counter++){
			$buf_moto = $this->moto[$counter];
			print_HTML("<a href = $buf_moto target=_blank>$buf_moto</a>:");
		}
		print_HTML("</p>\n");
	}
}
?>

<?php
////////////BEGIN HTML/////////////
print_HTML("<html><head>\n");
print_HTML("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n");
print_HTML("   <meta http-equiv=\"content-style-type\" content=\"text/css\">\n   <link rel=\"stylesheet\" href=\"./hb.css\" type=\"text/css\">\n");
print_HTML("<title>$Wn_title</title>\n");

print_HTML("</head>\n");

print_HTML("<script src=\"http://www.google-analytics.com/urchin.js\" type=\"text/javascript\">\n");
print_HTML("</script> \n <script type=\"text/javascript\">\n _uacct = \"$Google\"; \n urchinTracker();\n</script>\n");

print_HTML("<BODY>\n");
print_HTML("<h1>$Wn_title</h1>\n");
print_HTML("開発者ブログ:<a href=http://d.hatena.ne.jp/n_euler666/ target=_blank>WebLab.ota</a>");
print_HTML("(ソースプログラム,アルゴリズムを公開しています)<BR>\n");
print_HTML("このページは『多くのニュースサイトに紹介されている記事は良いページだろう』というアルゴリズムにしたがって,多くのニュースサイトを解析し,自動的に作られています.<BR>\n");

$date = getdate();
$year = $date["year"];
$month = $date["mon"];
$day = $date["mday"];
$hour = $date["hours"];
$minute = $date["minutes"];
$second = $date["seconds"];
print_HTML("$year/$month/$day $hour:$minute に生成されました.<BR>\n");
?>

<?php
//////////解析部///////////
$WnArray = array();//Wnクラスを管理する配列

$wsql = new htmlsql();

$fp_found = fopen("found.txt","r") or die("FILE Found");
$fp_clean = fopen("clean.txt","r") or die("FILE Clean");
while (! feof($fp_found)) {
	$buffer_found = fgets($fp_found, 1024) or die("READ Found");
	//echo $buffer_found;
	//echo "<BR>";
	$buffer_found = trim( $buffer_found );//前後の空白を削除する
	
	echo $buffer_found;
	echo "<BR>\n";
	
	$url_array = get_url_sql($buffer_found);//HTMLを解析する
	//$url_array = get_url_sql('http://sorakale.blog83.fc2.com/');//HTMLを解析する
	
	sleep(10);
	
	if($url_array == null)//解析が失敗した場合
		continue;
	
	foreach($url_array as $row){
		if($row['url'] != null){//nullを消す
			$url_flag = 0;//フラグを設定する
			foreach($WnArray as $buffer){
				if( strcmp( $row['url'] , $buffer->url ) == 0 ){//同じURLが登録されていれば
					$buffer->count++;//リンクの数を数える
					$buffer->set_moto($buffer_found);
					$url_flag = 1;//フラグを立てる
					break;
				}
			}
			//////////ごみ処理///////////
			if(ereg( "^http://",$row['url'])!=true)//先頭がhttp://以外は
				$url_flag = 1;//フラグを立てる
			if(ereg( ".*amazon\.co\.jp.*",$row['url'])==true)
				$url_flag = 1;//フラグを立てる
			while (! feof($fp_clean)) {//調整する(clean.txt参照)
				if($url_flag==1)//既にフラグが立っているなら
					break;
				$buffer_clean = fgets($fp_clean, 1024) or die("READ Clean");
				$buffer_clean =ereg_replace("\r|\n","",$buffer_clean);//改行を削除する
				if(ereg( "^$buffer_clean",$row['url'])==true){//先頭がclean.txtとマッチすれば
					$url_flag = 1;//フラグを立てる
					break;
				}
			}
			rewind($fp_clean);//ファイルポインタを先頭に直す
			
			if(clean_url($row['url'])!=1){//強引に絞り込む
				$url_flag = 1;//フラグを立てる
			}
			
			////タイトルでごみ処理
			$str = $row['text'];//文字コードをUTF-8に変換する
			$str = mb_convert_encoding($str, "UTF-8", "auto , JIS, eucjp-win, sjis-win, UTF-8");
			if(ereg( "<img",$str)==true)//タイトルに<imgがあるなら
				$url_flag = 1;//フラグを立てる
			
			////////////オブジェクトを管理する////////////
			if($url_flag == 0){//フラグが立っていなければ繋げる
				$newWn = new WnClass();//新しいオブジェクトを作る
				$newWn->set_url( $row['url'] );	
				$newWn->set_title( $str );//タイトルを格納する
				$newWn->set_moto($buffer_found);
				array_push($WnArray,$newWn);//配列に繋げる
			}
		}
	}
}

fclose($fp_clean);
fclose($fp_found);

/*
foreach($WnArray as $buffer){//タイトルを調べる
	echo $buffer->url;
	$title_array = get_title_sql($buffer->url);
	if($title_array == null)
		continue;
	
	$row = $title_array[0];
	
	$str = $row['text'];//文字コードをUTF-8に変換する
	$str = mb_convert_encoding($str, "UTF-8", "auto , JIS, eucjp-win, sjis-win, UTF-8");
	
	//print_r($row);
	$buffer->title = $str;
}
*/
?>

<?php

////////ソート部/////////
$amounts = array();
foreach ($WnArray as $v){
	$amounts[] = $v->count;
}
array_multisort($amounts, SORT_DESC, SORT_NUMERIC, $WnArray);

?>

<?php
/////////////結果表示部////////////
print_HTML("<ul>\n");
$print_count=0;
foreach($WnArray as $buffer){//配列を表示する
	if($print_count>200)
		break;
	print_HTML( "<li><a href=\"$buffer->url\" target=_blank>");
	print_HTML( "$buffer->title</a> ");
	print_HTML( "<a href=http://b.hatena.ne.jp/entry/$buffer->url target=_blank><img src=http://b.hatena.ne.jp/entry/image/$buffer->url border=0></a>");
	print_HTML( "Hit数:$buffer->count </li>");
	$buffer->view_moto();//リンク元を表示する
	print_HTML( "<BR>\n");
	$print_count++;
}
print_HTML("</ul>\n");
?>

<?php
///////////END HTML/////////////
print_HTML("<BR><BR>");
print_HTML("<!--Google AdSense開始-->");
print_HTML("<center><script type=\"text/javascript\"><!--\n");
print_HTML("google_ad_client = \"pub-8582337737379910\";\n");
print_HTML("google_ad_width = 728;\n google_ad_height = 90;\n google_ad_format = \"728x90_as\";\n google_ad_type = \"text_image\";\n google_ad_channel = \"\";");
print_HTML("//--></script><script type=\"text/javascript\"  src=\"http://pagead2.googlesyndication.com/pagead/show_ads.js\">\n</script>\n</center>\n");
print_HTML("<!--Google AdSense終了-->");


print_HTML("</body>");
print_HTML("</html>\n");

//ファイル書き込み
$fp1 = fopen("index.html","w");
fputs($fp1, $htmlString);
fclose($fp1);

echo "END";
?>
>>>>found.txt一部
http://www.karzusp.net/
http://sorakale.blog83.fc2.com/
http://www.golgo31.net/
http://ariel.s8.xrea.com/
http://iiaccess.net/
http://www.pluto.dti.ne.jp/~rinou/
http://nekoare.sakura.ne.jp/
http://ilya0320.blog14.fc2.com/
http://blog.livedoor.jp/akio_live1/

>>>>clean.txt一部
http://b.hatena.ne.jp/
http://sorakale.blog83.fc2.com/
http://pya.cc/
http://retro85.blog33.fc2.com/
http://d.hatena.ne.jp/oroshi/
http://www6.ocn.ne.jp/~katoyuu/
http://d.hatena.ne.jp/dooto/
http://blog.livedoor.jp/dqnplus/