忍者ブログ
ThIs SiTe Is A TyPo AnD A BuG.

[PR]

ソーシャルブックマークに追加:ブックマークに追加する
Category :
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

[訂正][php]simplexml_load_fileでうまくパース出来ない、なんて事はない。& 正解とお手軽方法

ソーシャルブックマークに追加:ブックマークに追加する
Category :

間違えた。
---------------------------------------------------------------------------------------
$string = preg_replace('/:/','_',file_get_contents(XMLのURL));
$xml = simplexml_load_string($string);

---------------------------------------------------------------------------------------
↓↓↓↓↓↓
---------------------------------------------------------------------------------------
$string = preg_replace('/:/','_',file_get_contents(XMLのURL));
$string = preg_replace('/http_\/\//','http://',$string);
$xml = simplexml_load_string($string);
---------------------------------------------------------------------------------------
これが無いと,URLも潰れちゃいますね。。
PR

[php][正規表現]URLをリンクに変換する!

ソーシャルブックマークに追加:ブックマークに追加する
Category :


テキスト内に含まれるURLに自動でリンクを張る、
そんなときはこんな感じ。

$x = ereg_replace("(https?|ftp)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)", "<a href=\"\\1\\2\" >\\1\\2</a>"\,$x);

[php]simplexml_load_fileでうまくパース出来ない、なんて事はない。& 正解とお手軽方法

ソーシャルブックマークに追加:ブックマークに追加する
Category :
php5にはsimplexml_load_file()なんて便利な関数があるけど、、
Magpie RSS - PHP RSS Parser-を使ってた人からすると若干の癖がある。
たとえば、

http://soccersns.jp/rss/diary.xml

これを

$xml=simplexml_load_file('
http://soccersns.jp/rss/diary.xml');

こんな感じで取得すると、

<title>
<link>
<description>


はパースできるけど

<dc:format>
<dc:date>
<dc:source>
<dc:creator>


は$xmlには含まれていない。
で、
simplexml_load_fileは不完全だと騒ぐ。
で、
これをちゃんと取得するには、、
XMLでの:'コロン'は名前空間を表すので、
$dc=$xml->item[0]->children(名前空間定義のURL);
って感じで指定しなければいけない、
(ちなみに名前空間の定義はXMLのヘッダにxmlns:dc=http://purl.org/dc/elements/1.1/こんな感じで書いてある。)

$dc=$xml->item[0]->children('http://purl.org/dc/elements/1.1/');
echo $dc->format;
echo $dc->date;
echo $dc->source;
echo $dc->creater;

とこんな感じで取得するのが正解なのです。

が、

こんなのめんどくせぇから、
こうする↓

-----------------------------------------------------------------------------------
 $string = preg_replace('/:/','_',file_get_contents(XMLのURL));
 $xml = simplexml_load_string($string);

-----------------------------------------------------------------------------------

ようは名前空間を表す、:'コロン'を違う文字に変えてから
simplexml_load_stringでパース。
ようはパースできればいいわけだから。



[php]get_headersを使ってデッドリンクを調べる

ソーシャルブックマークに追加:ブックマークに追加する
Category :


気が向いたので、
get_headers
を使ってデッドリンクを調べるものを作ってみました。

まず、
get_headers
はヘッダを取得するもので
Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Date: Sat, 29 May 2004 12:28:13 GMT
    [2] => Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
    [4] => ETag: "3f80f-1b6-3e1cb03b"
    [5] => Accept-Ranges: bytes
    [6] => Content-Length: 438
    [7] => Connection: close
    [8] => Content-Type: text/html
)

こんなのが返ってきます。

なので、[0]を見ればデッドリンクかわかるので、

 function deadlink($uri){
  $head = get_headers($uri,1);
  $response = $head[0];
  if (!preg_match('/Not Found/',$response)){
   //生きてるYO!!
   return false;
  }else{
   //死んでるYO!!
   return true;
  }
 }


こんな感じにして、

これを、使って
 function deadlchk(){
  $uri=$_GET['uri'];

  $arr=array();

  //そのHTMLのURLリストを取得
  preg_match_all("/(https?:\/\/[^\"]+)/i" ,file_get_contents($uri), $arr1);

  foreach($arr1[0] as $arr1_one){
   
   //配列に。
   array_push($arr,$arr1_one);
   
   //ちょっと休憩
   sleep(2);
   
   //HTML取得
   preg_match_all("/(https?:\/\/[^\"]+)/i" ,file_get_contents($arr1_one), $arr2);
   
   //グルグル
   foreach($arr2[0] as $arr2_one){
    array_push($arr,$arr2_one);
   }
  }
  
  //重複削除
  $arr = array_unique($arr);

  for($ii=1;$ii<count($arr[0]);$ii++){
   sleep(2);
   $uri=$arr[0][$ii];
   if($this->deadlink($uri)){
    echo "死んでるYO!!&nbsp;" . htmlspecialchars($uri)  .  "<br>";
   }else{
    echo "生きてるYO!!&nbsp;" . htmlspecialchars($uri)  .  "<br>";
   }
  }
 }


こんな感じでとりあえず、したいことが出来ました。

MA3楽天賞受賞
ありがとうございます。mash up award 3rdでカラフル.jpが楽天賞を頂きました。
PR
最新トラックバック
最新コメント
[12/12 poefoffirmvop]
[12/12 Beencerek]
[12/12 ecnaccounts]
[12/11 Kimineami]
[12/11 Kimineami]
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
あわせて読みたい
あわせて読みたい
なかのひと
なかのひと
ブログ内検索
ログール
TrackWord
アクセス解析
このページのQRコード
Copyright © .☆★ ステレオタイプラボ ★☆. 。All Rights Reserved.
忍者ブログ[PR]