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

あるウェブサイトから特定の情報を抽出してリスト化しようと思っています。

URLを取得し読み込み、抜き出したい部分を選択することで実現したいと考え
PHPにて以下のソースを考えました。


関数部分とメインの部分はそれぞれ独立した状態では動作がとれましたが
あわせてこの記述にするとうまくいきません。
簡単に流れを云うと
一つ目の関数で元ページからの対象リンクを取得【OK】
メインの部分で$fileにファイルを読み込み【OK】
読み込んだファイルから必要箇所を抽出【NG】

最後の動作がうまくいかない状態です。
どなたかご教授お願いします。

1413537397
●拡大する


●質問者: こばしゅん
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tobeoscontinue

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">(.+?)&nbsp/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円, 
, , 

こばしゅんさんのコメント
ご解答ありがとうございます!! 仰る通りに試してみましたがやはりうまくいかないようです、、、
関連質問

●質問をもっと探す●



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