space

PHPで外部HTMLから指定した文字列(タグ)だけを取り出してみる。

| | トラックバック(1) | hatena PHPで外部HTMLから指定した文字列(タグ)だけを取り出してみる。 Twitter ReTweet
php_html.jpg

PHPで外部HTMLから指定した文字列(タグ)だけを取り出してみる。


PHP初心者なので初めての事だらけでさっぱりですが、
PHPを使って外部htmlから文字列を抜き出し、
配列に入れるということをやってみた。


■はまった箇所
・外部htmlソースを引っ張ってくる。
//外部URL
$fp = fopen("URL","r");

while(!feof($fp)){
//html全文ゲット
$line = fgets($fp,1024);
//各行を配列に入れる
$li_array[] = $line;
}
//配列を一つの文字列に変換
$li_text = implode("", $li_array);
//外部ソースをそのまま表示。
echo $li_text;


・ソースのあるタグだけ引っ張ってくる。
//preg_match関数で、正規表現というものをつかって、titleタグだけ抜き出す。
preg_match('/<title>(.+)<\/title>/',$li_text,$match);
echo $match[1];

titleタグを引っ張ってくるのは直ぐに出来たのですが、 htmlソース内に複数の
<h2 class="leadContentTitle">
<a href="link">文字列</a>
</h2>
があり、その中の<a href="link">文字列</a>だけを抜き出したかったのですが、
如何せん正規表現が調べても調べてもイマイチよくわからなくて、

preg_match('/<h2 class=\"leadContentTitle\">(.*)<\/h2>/i',$line, $match);とか
preg_match_all関数とか,ereg関数とか色々やってみたんですが、
5時間くらい悩んだあげく、自分の望んでいるものが取得できなかった。

そこで、一度DOMにしたら、もしかしていけるんじゃないかと思い、
調べていたら、

PHP Simple HTML DOM Parser

という優れものがありました!!
上記のサイトからsimplehtmldomのソースをダウンロードしてきて
フォルダ内のsimple_html_dom.phpをサーバーにいれます。

んで、phpで
//simple_html_dom.phpを読み込む。
include('simple_html_dom.php');
//file_get_domで外部URLの値を取得してきます。
$dom = file_get_dom('URL');

//取得したいタグの数分繰り返す。
for($i = 0; $i < 8; $i++ ){
//配列に<h2 class="leadContentTitle"></h2>内のテキストのみ追加される。
$test[] = $dom->find('h2[class=leadContentTitle]', $i)->innertext;
//配列を一つの文字列に変換
$li_text = implode("", $h2_array);
//<a>タグ内のリンク先とテキスト部分をバラバラに抜き出す。
preg_match_all("|<a href=\"(.*?)\".*?>(.*?)</a>|mis",$li_text,$match);
$url=$match[1];
$text=$match[2];

//XML作成
$dom = new domDocument('1.0');
$dom->encoding = "UTF-8";
$dom->formatOutput = true;

$database = $dom->createElement('database');
$dom->appendChild($database);

for($i = 0; $i < 20; $i++){
$items = $database->appendChild($dom->createElement('items'));

$d_url = $items->appendChild($dom->createElement('d_url'));
$d_url->appendChild($dom->createTextNode($url[$i]));

$d_text = $items->appendChild($dom->createElement('d_text'));
$d_text->appendChild($dom->createTextNode($text[$i]));
}

// DomXMLをXML形式で出力 
echo $dom->saveXML();
$dom->save("name.xml"); 
}
あとは、このXMLデータをFlashでつかって表示させた。
RSS以外のものでも、Flashにデータを送れることを今回勉強してわかった。
このやり方が正しいのかはわかりませんけど。。。
多分おかしい。でも動いてるから・・・


Twitter ReTweet hatena PHPで外部HTMLから指定した文字列(タグ)だけを取り出してみる。
space

トラックバック(1)

このブログ記事を参照しているブログ一覧: PHPで外部HTMLから指定した文字列(タグ)だけを取り出してみる。

このブログ記事に対するトラックバックURL: http://s2works.heteml.jp/mt/mt-tb.cgi/152

これから、またPHPを使ってプログラムを書くつもりなんで、そのためのライブラリというか、 いろいろ使う予定の関数群をここに書いていこうかと思ってます。 ... 続きを読む