人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPについて質問です。

現在オークションの統計サイトから、検索キーワードを入力した後のHTMLデータを抜き取るプログラムを作成しています。

しかし、うまく出来ず、時間があるかたおりましたら一度プログラムを見ていただけないでしょうか。お願いします。

プログラムの流れですが、以下の様になっています。

1:検索キーワードをデータベースから取得

2:ページ判定 ページが最後のページかどうかを判定をします。
ページが最後のページの場合は1に移動します。

3:ページ移動

4:ページのHTMLを取得

5:ページのHTMLをデータベースへ登録

6:ページ判定用の変数を作成

7:2に移動します。

自分で問題があると思うのは6の所です。

1回目、2回目と処理をして最後のページの登録処理をする場合うまく処理できていない気がします。

お手数をおかけしますが一度スクリプトを見ていただけたらと思います。

よろしくお願いします。

●質問者: aiomock
●カテゴリ:コンピュータ インターネット
✍キーワード:HTML PHP オークション キーワード サイト
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● regnif
●100ポイント ベストアンサー

この処理?の問題は、仮にpreg_match_allで1ページ内に複数ヒットすることがあれば、

最後の$defの値が$hanteiに上書きされてしまうことが「可能性」として1つあります。

ここで確認ですが、

'一致する商品はありませんでした。'

は、

A:最終ページの場合、複数存在することがあるのか?

または、

B:最終ページでなくとも、存在する場合があるのか?

という最終ページの判断基準によって、判定ロジックも変わってきます。

そのオークションの統計サイトがどういう結果を返すのかもわかると良いのですが、

ここでは

A:の場合は、1つでも

'一致する商品はありませんでした。'

が存在するならという前提で回答すると、少し乱暴だけど

$hit = preg_match_all( ・・・);

とすれば、ヒット数が取れるので、

if($hit>0) break;

と続ければ良いです。最後のforeachも不要だし、

while($hantei !== '一致する商品はありませんでした。'){

while(1){

とか

while(true){

で充分です。


B:の場合は、正直ちょっと判断に困りますね。

そもそも正規表現検索をするためのpreg_match_allが本当に必要なのか?という

こともありますし、preg_match_allの挙動も少し自信がないので、Aでなかった

場合に、かつ正確な最終ページの条件を聞いてから回答するか考えます。

◎質問者からの返答

ご回答ありがとうございます。

通常であれば

http://aucfan.com/search1/sya-q~a5a4a5c1a5eda1bca1a1a5b7a5e3a5c4...

このようなページになり

最後のページですと

http://aucfan.com/search1/sya-q~a5a4a5c1a5eda1bca1a1a5b7a5e3a5c4...

のようなページになります。

'一致する商品はありませんでした。' は 最終ページでひとつしか存在しません。


while(1){ だと条件式がなくて 回すことが出来るのですね。

$hit = preg_match_all( ・・・);

if($hit>0) break;

も非常に便利だと思いました。ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ