top


総投稿数 本 
no_

スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)
no_923

リンク切れチェック:久しぶりに「簡易ツール」をひとつ。これも必要に迫られて実装、PHPでリンク切れチェックを行なうブログパーツ ・・・ 【創ったmetaboy】

 2009-05-19

 必要に迫られ、
 ・PHP で、
  ・HTMLを走査・パース
 ・公開ソース利用して
  ・リンク切れチェックを行なう
 ツールを作成。


 やはり、JavaScriptで貼る事の出来る
 ブログパーツ形式で作成した。
 リンク切れチェック  - 簡易ツール - by 創ったmetaboy


 特徴
 ・このブログに来て頂いた時に
  すぐチェック出来るよう、
  チェックしたURLをクッキー保存。
  次回自動セット。
 ・(今回は)簡易版ということもあり
  トラフィック考慮し、
  最大50件までのチェックのみ。
 ・エラーがあったURLをリスト表示

 制作概要を記録・・・


  追記に ▼


FC2ブログランキング にほんブログ村 IT技術ブログ Webサイト構築へ ブログ王ランキング 人気ブログランキング 人気ホームページランキングへ


more************************************************
◎ リンク切れチェック - 簡易ツール
************************************************

最終的な、企画仕様。
※(最終的な・・・そう)
 まだ、完成品では無い。
 基本的な動作はするけれども・・・


 
 ◆仕様策定◆
 ・URLをセットして[チェック]
  ・その頁に含まれる herfリンクの
   「リンク切れ」をチェック。
   ※トラフィックの問題もあり、今回の版では
    最大50件までの herfリンクのチェック
    とした。
 ・一度[チェック]したURLは、
  ・クッキーで保存
  ・次回、自動的に呼び出しセット
   (次回実装)
  ・同じURLのチェックは1日1回 という
   制限を設け、同じURLの場合は
   前回結果記録を表示。

  ※と、したし。

 ■実際の構築


   まず、URLにアクセスして
   HTMLパースさせるには・・・
   ******************************
   □PHP Simple HTML DOM Parser
    を利用する
   ******************************
    ・PHP5以上で使え、とても便利だ。


PHP Simple HTML DOM Parser
PHP Simple HTML DOM Parser とても簡単に利用できる
 応用例なども紹介されている。




  ■ダウンロードして、
   phpファイルをサーバーに配置。
   基本的な、HTMLのパースの流れは
   こんな感じ。


<?
require_once '*****/simple_html_dom.php';
$html = file_get_html($targetURL);
foreach($html->find('a') as $element){
$temp_cksrc = $element->href;
if(!(ereg('^https?://', $temp_cksrc))){
$temp_cksrc = getAbsPath($ckURL, $temp_cksrc);
}
$rt = ckRequest_cklinks($temp_cksrc);
if($rt!=1){
array_push($SYS_ARRAY['ckcnt_error'],$temp_cksrc);
$SYS_VAL['ckcnt_error']++;
}
$SYS_VAL['ckcnt']++;
}
$html->clear();
unset($html);
?>

   ・実際は、チェック先hrefに回数制限を
    付け加えているが・・・

   ここで、注目!
    【相対リンクを絶対リンクに変換する】
   ・http;// などから始まる絶対リンクは
    問題ないけれど
    ../ や ../../ などの相対リンク に
    対応させるため、
    (そのまま実行すると
     このプログラムがおいているサーバー
     での相対リンク となってしまう)


    公開されているソースを利用させていただいた。
    ・【PukiWiki】リンクの相対URLプラグイン
     で紹介されているソースを
     (ほぼそのまんま)利用させていただき、
      getAbsPath($ckURL, $temp_cksrc);
     相対リンク問題をクリア。
     ありがとうございます。
     ※これは、さらに
      lains you 氏作成の関数らしいが・・・


<?
function getAbsPath($base, $href){
$url_info = parse_url($base);
$bdir = (substr($url_info['path'], -1) == '/') ? $url_info['path'] : dirname($url_info['path']).'/';

if(ereg('^https?://', $href)){
$path = $href;
}elseif(substr($href, 0, 1) == '/'){
$path = $url_info['scheme'].'://'.$url_info['host'].$href;
}else{
$path = $url_info['scheme'].'://'.$url_info['host'].$bdir.$href;
}

$path = ereg_replace("/\./", "/", $path);
while( ereg("\.\./", $path) ){
$url_info = parse_url($path);
$paths = preg_split("/\//", $url_info['path']);

for( $cnt=1 ; $cnt<count($paths) ; $cnt++ ){
if( $paths[$cnt] == ".." ){
$paths[$cnt-1] = "";
$paths[$cnt] = "";
}
}

$str = "";
foreach( $paths as $value ){
if( strlen($value) != 0 ){
$str .= "/".$value;
}
}
$path = $url_info['scheme'].'://'.$url_info['host'].$str;
}
return $path;
}
?>

   パースされた中で、href部分のURLを
   抜き出し
   ******************************
   □PEAR の HTTP_request を
    を利用して、現在の状況チェック
   ******************************
    ・これも、簡単に利用できる。


HTTP_Request
HTTP_Request HTTP リクエストを実行するための
 簡単な方法を提供




  ■組み込んで・・・


function ckRequest_cklinks($ckVal){
$val_rt=0;
if($ckVal!=''){
$option_cklinks = array(
"timeout" => "10",
"allowRedirects" => true,
"maxRedirects" => 3,
);

$http = new HTTP_Request($ckVal, $option_cklinks);

$response = $http->sendRequest();
if (!PEAR::isError($response)) {
$ret = $http->getResponseCode();
if($ret==200){ $val_rt=1;
}else{ $val_rt=-1; }
}else{ $val_rt=-1; }
unset($http);
}
return $val_rt;
}
 ・・・こんな関数で利用
   ・まずは、response が 200 のみを
    正常としたが、このあたりの
    ステータスコードについては、

HTTP Status Code
HTTP Status Code こちらに詳しい。




    【javascript 側では・・・】
     iframe 利用していて、その中で
     URLをセットして、機能させる。


var iframe_url = "";
function goCheckLinks_cklinks(){
var form = this.document.forms['form_iframe_cklinks'];
var strURL = form.elements['val_iframe_cklinks'].value;
if(strURL != ""){

iframe_url = "*****.php?mid=" + aid_cklinks;
iframe_url += "&ckURL=" + strURL;

var f = document.getElementById('iframe_cklinks');
f.src = iframe_url;
}
}

function SetVal_iframe_cklinks(val,opset){
var form = this.document.forms['form_iframe_cklinks'];
form.elements['val_iframe_cklinks'].value = val;
if(opset==1){ SetCookie(365,'meta_checkurl_cklinks',val,1);
goCheckLinks_cklinks();
}else{
if(opset==0){
}}
}
 ・・・ 他、には「クッキー処理」だけだね。

   さて、
 ■公開


   □このブログ右サイドに用意
    (一番下)
    ※いつものように、別ウインドウで開くものも用意
     した。

commentsコメント
comment_post












管理者にだけ表示を許可する
commentトラックバック
トラックバックURL:
http://metaboy.blog23.fc2.com/tb.php/923-a78177e4
ようこそ
Add to Google 創るmetaboy:RSSフィード
My Yahoo!に追加
最新記事のRSS | 問い合わせ

仕事検索、アルバイト検索、依頼仕事の検索ポータル - 仕事検索.COM - www.jobkensaku.com ツクルン

創るmetaboy - WEB創る、サイト創る、何創る - 創ったmetaboy

 

リンク集

 

最近の記事

 

ブロとも申請フォーム
Sponserd by

さくらのレンタルサーバ さくらのレンタルサーバ
大容量・高機能レンタルサーバー heteml 大容量・高機能レンタルサーバー heteml
XREA (ValueDomain)
お名前.com お名前.com
名づけてねっと名づけてねっと
ムームードメインムームードメイン

 

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。