URLを取得し読み込み、抜き出したい部分を選択することで実現したいと考え
PHPにて以下のソースを考えました。
関数部分とメインの部分はそれぞれ独立した状態では動作がとれましたが
あわせてこの記述にするとうまくいきません。
簡単に流れを云うと
一つ目の関数で元ページからの対象リンクを取得【OK】
メインの部分で$fileにファイルを読み込み【OK】
読み込んだファイルから必要箇所を抽出【NG】
最後の動作がうまくいかない状態です。
どなたかご教授お願いします。
selectでの$listの個数が60個ほどしかないので
$url = select(54);
とでもすれば動くと思います。
>selectでの$listの個数が60個ほどしかないので
$listの個数は一定ではないようですねぇ。失礼しました。
以下のコードで実施してみました。多少異なる部分がありますが同等です。
当方ではUTF-8を使っているのでmb_convert_encodingでコード変換しています。
<?php function select($num) { $file2 = file_get_contents("http://item.rakuten.co.jp/beautyface/c/0000000170/"); preg_match_all('/(https?:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:@&=+$,%#]+)/s', $file2, $url2); $list = array(); foreach($url2[1] as $li2) if(preg_match_all('/\/c\/0000000(.+?)\//s', $li2, $url2)) $list[] = "http://item.rakuten.co.jp/beautyface/c/0000000".$url2[1][0]."/"; // return array_slice($list, 0, $num); echo 'count($list)='.count($list)."\n"; return $list[$num]; } $url = select(54); echo $url."\n"; $file = file_get_contents($url); $file = mb_convert_encoding($file,"UTF-8","EUC-JP"); preg_match_all('/<td style="(.+?)<\/td>/s', $file, $td); foreach($td[1] as $li) { $name = preg_match_all('/itemnamelink">(.+?)<\/a>/s', $li, $m) ? $m[1][0] : ''; $pri = preg_match_all('/itemprice">(.+?) /s', $li, $m) ? $m[1][0] : ''; $not = preg_match_all('/class="not">(.+?)<\/span>/s', $li, $m) ? $m[1][0] : ''; echo $name.", ".$pri.", ".$not."\n"; }
--10/20 実行結果------------------------------------------- count($list)=67 http://item.rakuten.co.jp/beautyface/c/0000000136/ , , , , , , 【9月5日より順次発送】JILL STUART クリスタルブルーム オードパルファン 30ml, 4,265円, ≪楽天最安に挑戦≫Chloe ロード クロエ オードトワレ (EDT) 50ml【CO800005T】, 6,014円, 在庫なし Chloe オードパルファム (EDP) 50ml【CO800012T】, 5,870円, 在庫なし , , , , , , JILL STUART ジルバイ ジルスチュアート オード トワレ 50ml, 5,445円, 【お一人様3点まで】JILL STUART ヴァニラ ラスト オード トワレ (EDT) ロールオン 10ml【CO444425】, 2,119円, 在庫なし Chloe LOVE クロエ オードパルファム (EDP) 50ml, 8,214円, , , , , , , ≪楽天最安に挑戦≫Chloe オードトワレ (EDT) 50ml【CO800008T】, 4,914円, 在庫なし JILL STUART ジルバイ ジルスチュアート オード トワレ 30ml, 3,722円, L'OCCITANE チェリーブロッサム オードトワレ ロールタッチ 10ml, 2,445円, 在庫なし , , , , , , ≪楽天最安に挑戦≫Chloe オードトワレ (EDT) 75ml【CO800009T】, 5,820円, 在庫なし 【9月5日より順次発送】JILL STUART クリスタルブルーム オードパルファン 50ml, 5,807円, JILL STUART ヴァニラ ラスト オード パルファン 50ml, 6,261円, , ,
ご解答ありがとうございます!!
2014/10/20 11:12:06仰る通りに試してみましたがやはりうまくいかないようです、、、