dポイントプレゼントキャンペーン実施中!

お世話になっております。
昨日も同じような質問をさせていただいたのですが、htmlファイルの内容をPOSTで取得したとき、そのソース内にある、javascript、noscriptがあった場合、それぞれのタグ内にあるURLを配列内に取り込みたいと考えております。

そこで、これまで試していたものはもちろん、先日お教えいただいた以下のソースを参考にしているのですが、URLを取得するまでに至りません。

<?php
$html=<<<_HTML_
<SCRIPT TYPE="text/javascript" SRC="http://www.○○○.com" charset="EUC-JP"></SCRIPT>
<NOSCRIPT>
<div align="center" style="font-size:12px;">
<a href=http://www.△△△.net/>カウンター</a>
<a href=http://www.□□□.com/>アクセス解析</a>
</div>
</NOSCRIPT>
_HTML_;

$pattern_java = '/<SCRIPT TYPE= .*?SRC="(.*?)".*?>>/is';
$match_java = array();
preg_match_all($pattern_java, $html, $match_java, PREG_SET_ORDER);
$meta_java = $match_java[0][1];
$cnt_java = count($match_java);
?>

2日続けて同じような質問をすることに恐縮するとともに、お恥ずかしいことと自覚はしているものの、解決策が見いだせずに困っています。
お忙しいなか恐縮ですが、アドバイスなど頂戴出来れば幸いです。
宜しくお願い申し上げます。

A 回答 (2件)

>> どうも自信がなく、見て頂ければ幸いに思います。


私も素人ですので的を得た意見は言えませんが・・

スクリプトに問題は無いと思います。強いて言えば
同じ処理を繰り返す場合は、関数化するともっと便利になります。


前部を略します。
_HTML_;

function getlinks($html,$tag='script'){
$match=array();
$pattern0 = '/<'.$tag.'.*?<\/'.$tag.'/is';
$pattern1 = '/https?[^"\'> ]*/i';
preg_match_all($pattern0, $html, $match0);
foreach($match0[0] as $val){
preg_match_all($pattern1, $val, $match1);
$match=array_merge($match,$match1[0]);
}
return $match;
}

print_r(getlinks($html));
print_r(getlinks($html,'noscript'));
?>
こんな感じにしておけば他のタグにも応用ができます。
    • good
    • 0
この回答へのお礼

こんばんは。お世話になっております。
お疲れのところ早速の回答をありがとう御座います!

>同じ処理を繰り返す場合は、関数化するともっと便利になります。

なるほど・・この「関数化」というものに手を出したことがありませんが、色々な使い方が出来るのですね。勉強になります。

以上、ご回答と共に、ご親切なアドバイスをありがとう御座いました!

お礼日時:2009/04/10 21:29

こんな感じかな


php
<?php
$html=<<<_HTML_
<SCRIPT TYPE="text/javascript" SRC="http://www.○○○.com" charset="EUC-JP"></SCRIPT>
<NOSCRIPT>
<div align="center" style="font-size:12px;">
<a href=​http://www.△△△.net/>カウンター</a>
<a href=​http://www.□□□.com/>アクセス解析</a>
</div>
</NOSCRIPT>
_HTML_;

$match=array();
$pattern0 = '/script.*?<\/n?o?script/is';
$pattern1 = '/https?[^"\'> ]*/i';
preg_match_all($pattern0, $html, $match0);
foreach($match0[0] as $val){
preg_match_all($pattern1, $val, $match1);
$match=array_merge($match,$match1[0]);
}
print_r($match);
?>

この回答への補足

こんばんは。お世話になっております。
昨夜お教えいただいた後、scriptとnoscriptを別けて配列に入れたいとのことお伝えしましたが、とりあえず、以下のような形で別々の配列に格納することができたのですが、スクリプト的にどうも自信がなく、見て頂ければ幸いに思います。
お忙しいなか恐縮ですが、宜しくお願い申し上げます。

<?php
$html=<<<_HTML_
<SCRIPT TYPE="text/javascript" SRC="http://www.111a.com" charset="EUC-JP"></SCRIPT>
<NOSCRIPT>
<div align="center" style="font-size:12px;">
<a href=?http://www.222a.net/>カウンター</a>
<a href=?http://www.222b.com/>アクセス解析</a>
</div>
</NOSCRIPT>

<SCRIPT TYPE="text/javascript" SRC="http://www.111b.com" charset="EUC-JP"></SCRIPT>
<NOSCRIPT>
<div align="center" style="font-size:12px;">
<a href=?http://www.222c.net/>カウンター</a>
<a href=?http://www.222d.com/>アクセス解析</a>
</div>
</NOSCRIPT>

<SCRIPT TYPE="text/javascript" SRC="http://www.111c.com" charset="EUC-JP"></SCRIPT>
<NOSCRIPT>
<div align="center" style="font-size:12px;">
<a href=?http://www.222e.net/>カウンター</a>
<a href=?http://www.222f.com/>アクセス解析</a>
</div>
</NOSCRIPT>
_HTML_;

$match=array();
$pattern0 = '/<script.*?<\/script/is';
$pattern1 = '/https?[^"\'> ]*/i';
preg_match_all($pattern0, $html, $match0);
foreach($match0[0] as $val){
preg_match_all($pattern1, $val, $match1);
$match=array_merge($match,$match1[0]);
}
print_r($match);

$match=array();
$pattern0 = '/<noscript.*?<\/noscript/is';
$pattern1 = '/https?[^"\'> ]*/i';
preg_match_all($pattern0, $html, $match0);
foreach($match0[0] as $val){
preg_match_all($pattern1, $val, $match1);
$match=array_merge($match,$match1[0]);
}
print_r($match);
?>

補足日時:2009/04/10 20:11
    • good
    • 0
この回答へのお礼

mpxさんへ

こんばんは。お世話になっております。
昨日に引き続き、アドバイスいただきありがとう御座います!
しかも投稿後、早速の回答で感謝です。

で、説明不足なところがありましたが、
<SCRIPT TYPE="text/javascript" SRC="http://www.○○○.com" charset="EUC-JP"></SCRIPT>
と、NOSCRIPTを別けて配列に格納したいのです。(複数のスクリプトが設置されていることを想定して、別々の配列にしたい)

早速回答いただき、アドバイスを元にこちらでも解決法を見出そうとは思っているのですが、それがなかなか・・

もしお時間が許すようなら、引き続きアドバイスを頂戴できたら幸いです。もちろん、引き続きこちらでも進めてみますので、解決できましたら、補足にてご挨拶を兼ねてご報告いたします。

以上、宜しくお願い致します。

お礼日時:2009/04/10 02:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!