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

PHPについて質問です。

現在WEB上からデータを取って来て、データをまとめるというマーケティングの作業をやっています。

しかし、これがとても膨大な作業で、どうにかして半分でもいいので自動化できたらと考えています。

現在自分がデータを取ってきているのはオークションサイト(ヤフオク)でページ(HTML)にはある一定の規則性があります。

自分がやりたい事は

まず ? 指定したURL にアクセスして

?そのページのHTMLを取得 取得したデータを変数に保存

?法則性のあるhtmlの中から必要なデータを正規表現で抜き出す。
抜き出したデータは変数に保存する。

?保存した変数をデータベースに保存する。

という作業を行えば実現出来るのではないかと考えています。

問題点ですが

?と?の段階がいまいちよくわかりません。

どのような方法を取ればPHPでは実現できますでしょうか?

お手数をおかけしますがご回答お待ちしております。

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

▽最新の回答へ

1 ● kn1967
●19ポイント

不正アクセスを防ぐため、わざと面倒な手順を踏むように設計されていますので、

コピペで済むような簡単なコードでは対処できません。


それでも業務上必要だという事であれば、

yahoo側が用意しているアクセス手段を用いる方法を学んでください。

Yahoo!デベロッパーネットワーク - オークション

Yahoo! JAPAN - サービス利用規約


例えば、

出品リストの取得は下記に説明があるのですが、

必要なパラメータを送るだけでデータを手に入れる事が出来ます。

Yahoo!デベロッパーネットワーク - オークション - 出品リスト

具体的なサンプルコードと動作デモは下記にあります。

Yahoo!デベロッパーネットワーク - サンプルコード集 - オークションサンプルコード - 出品リストを表示する

※サンプルを見ればコピペで済むようなものではないことは直ぐ判る事と思います。


他にもサンプルコードや動作デモは下記に色々ありますので、

まずはサンプルからチャレンジしてください。

Yahoo!デベロッパーネットワーク - サンプルコード集


サンプルコードがある程度理解できたら、

サンプルコードを改造して3と4の機能を追加してください。


※今件、私の回答は多分ここまでとなると思いますが、あしからずご了承ください。

◎質問者からの返答

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


2 ● makeworld
●100ポイント ベストアンサー

HTMLの取得は、fopen()でURLを開いて読み込めます。(fopen()に失敗する場合は、php.iniのallow_url_fopenをOnに設定してください)

文字列の抽出は、preg_match()などで可能です。

下記の例は、文字コードをEUC-JPで保存して実行してください。(「円」の部分で日本語を使用しています)

残り時間の「日」は、EUC-JPで表示されます。

<?php
$URL = 'http://page12.auctions.yahoo.co.jp/jp/auction/p170009654';

$html = '';
$fp = fopen($URL, 'r') or die("fopen");
while (!feof($fp)) {
 $html .= fread($fp, 1024);
}
fclose($fp);

preg_match('|<strong property="auction:Price">(.*?) 円</strong>|', $html, $matches);
$price = strtr($matches[1], array("," => ""));
preg_match('|<td><strong>(.*?)</strong>|', $html, $matches);
$remain = $matches[1];
preg_match('|<strong property="auction:Bids">(.*?)</strong>|', $html, $matches);
$count = $matches[1];

print "$price\n";
print "$remain\n";
print "$count\n";
?>
◎質問者からの返答

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


3 ● ymlab
●18ポイント

id:makeworld さんと同じように、fopenで取得可能ですが

あらかじめ、ソースコードを取得する目的だとはっきりしているのであれば、

http://rokuha48.blog63.fc2.com/blog-entry-52.html

のサイトのように、file()を使えば、結構簡単に取得できますよ。

一気に

$a=file("URL");

で、$aにソースが入りますので、1と2の手順を完了できます。

後は、$aに対して、3,4の処理を加えればよいのです。

◎質問者からの返答

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


4 ● TakiTake
●18ポイント

HTML取ってくるだけなら

file_get_contents('URL');

で取得できますし


API使うなら

<?php
$appid = '自分のYahoo API ID';
$auctionID = 'オークションID';
$request_url = 'http://auctions.yahooapis.jp/AuctionWebService/V2/php/auctionItem';
$parameter = sprintf('?appid=%s&auctionID=%s', $appid, $auctionID);

// 結果がPHP serializeされて返ってくる
$response = file_get_contents($request_url . $parameter);

// unserializeして連想配列に戻す
$auction_item = unserialize($response);

// 必要な値を取得
$price = $auction_item['ResultSet']['Result']['Price'];
$end_time = strtotime($auction_item['ResultSet']['Result']['EndTime']);
$bids = $auction_item['ResultSet']['Result']['Bids'];
?>
<p><?php echo $price ?></p>
<p><?php echo round(($end_time - time()) / 86400) ?></p>
<p><?php echo $bids ?></p>

こんな感じでどうでしょう?

残り時間が取れなかったので、終了時刻から現在時刻引いて出してます。

◎質問者からの返答

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


5 ● houjou_crm
●18ポイント

オークションじゃないけど同じようなことやってます。

?「Pear::HTTP」でやるのが常套手段だと思っています。今後も活躍するのでPearの使い方は経験しといた方が良いと思いますよ。Pear使うのが初めてなら「http://www.phpbook.jp/」で勉強してみてください。

?正規表現で対象データを抽出することができます。「eregi」「正規表現」でググってみてください。同じような事例が沢山出てくると思います。


他力本願

http://www.tarikin.net/

◎質問者からの返答

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


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



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