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

ヤフオクAPIをPHPでHTMLに表示させたい
http://webservice.kabufuru.net/yahapi/samplephp.php
にあるサンプルプログラムをこちらのページと同一の形で
使いたいと思っています。

<?php

function getAndDispFunc( $keyword ){
//リクエストURL作成
$requestUrl = "http://auctions.yahooapis.jp/AuctionWebService/V1/Search?";
$requestUrl .= "appid=あなたのID";
$requestUrl .= "&category=2084006906"; //カテゴリ「空気清浄機」
$requestUrl .= "&query=" . urlencode( $keyword ); //検索キーワードをUTF-8でURLエンコード
(以下省略)

をtest.php として必要箇所を修正してパーミッション755で設置しました。
ここにアクセスすると空白で何もでません。

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
</head>
<body>
<?php getAndDispFunc( "中古" ); ?>
</body>
</html>

をindex.php や index.html にしてみてtest.phpと同一ディレクトリに設置しましたが
<?php getAndDispFunc( "中古" ); ?>
が空白になって他のhtml部分が表示されます。

・他の配布してあるphpは正常確認しました
・.htaccessは何も書いてありません。

当方PHPなどが全然わからないので、具体的な設置方法等を
すいませんがご教示のほどよろしくおねがいします。

●質問者: happyluppy
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● うぃんど
●500ポイント ベストアンサー

まずはtest.phpのテストをするために、
test.phpの末尾に下記の1行を書き加えます。

echo $retHtml;
}

getAndDispFunc( "中古" ); ← これを書き加える。

?>

目的のものが表示されなかったら記述ミスがあるということになります。


上記にてtest.phpが間違いなく動くことが確認できたなら、
書き加えた一行を消し去って元にもどしてから、
index.phpのほうに1行書き加えます。
(test.phpを読み込むように指示しないとgetAndDispFuncは見つからないので、
サーバーによって、何も表示されなかったり、phpのエラーが表示されたりします。)

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
</head>
<body>
<?php
 require_once( 'test.php' );
 getAndDispFunc( "中古" );
?>
</body>
</html>

http://www.php.net/manual/ja/function.require-once.php


うぃんどさんのコメント
動作していませんという嘘をついている人がいますけど、 バージョン1の提供は2013年7月まであります。 http://developer.yahoo.co.jp/newslist/?id=116 確かにこのままでは来年には使えなくなるので、 API V2向けに作ってみました。 V2ではXMLだけでなくシリアライズで結果を得ることもできるため、 コードがより簡単になります。 (シリアライズされたデータはunserializeすることで、 phpの配列変数の形に変換できるのです。) >|php| <?php function getAndDispFunc( $keyword ){ //リクエストURL作成 $requestUrl = 'http://auctions.yahooapis.jp/AuctionWebService/V2/php/search?' . 'appid=あなたのID' . '&category=2084006906' //カテゴリ「空気清浄機」 . '&query=' . urlencode( $keyword ) //検索キーワードをUTF-8でURLエンコード . '&sort=end&order=a' //ソート . '&thumbnail=1' //画像ありの商品の絞り込み . '&aucmaxprice=30000' //最大価格 ; //APIリクエスト実行 $res = unserialize(file_get_contents($requestUrl)); $retHtml = "<table>\n"; $retHtml .= "<tbody>\n"; $iLoop = 0; foreach ($res['ResultSet']['Result']['Item'] as $itemValue) { if( $iLoop % 2 == 0 ){ $retHtml .= "<tr><td>\n"; } else { $retHtml .= "<td>\n"; } //タイトル $retHtml .= $itemValue['title'] . "</br>\n"; //画像 $retHtml .= '<div class="oImg"><img src="' . $itemValue['Image'] . '" alt="' . $itemValue['title'] . '" /></div>' . "\n"; //現在の価格 $retHtml .= "</br>現在の価格 : " . $itemValue['CurrentPrice'] . "</br>\n"; //入札件数 $retHtml .= "入札件数 : " . $itemValue['Bids'] . "件</br>\n"; //終了時刻 $retHtml .= "終了時刻 : " . $itemValue['EndTime'] . "</br>\n"; //リンク $retHtml .= "<img src=\"/img/button/triangle_blue.gif\"><a href=\"" . $itemValue['ItemUrl'] . "\">ヤフオクで詳細を見る、購入する</a></br>\n"; if( $iLoop % 2 == 1 ){ $retHtml .= "</td></tr>\n"; } else { $retHtml .= "</td>\n"; } $iLoop++; } if( $iLoop % 2 == 1 ){ $retHtml .= "<td></td></tr>\n"; } $retHtml .= "</tbody>\n"; $retHtml .= "</table>\n"; echo $retHtml; } getAndDispFunc('中古'); ?> ||<

happyluppyさんのコメント
補足を書き込みましたもしよかったら回答お願い致します。 とソースが表示されるだけです。 のソースが消えていますが <Table></Table> のみ表示されます。

うぃんどさんのコメント
star-domain.jpは、 simplexml_load_fileやfile_get_contentsなどでURLを指定して、 別サーバーからデータを読み込むということが禁止されてるようです。 star-domain.jpでの対応方法を検索してみると、 phpのcurlという拡張機能を使って回避している例をいくつか見つけました。 http://d.hatena.ne.jp/denjinm/20120314/1331739777 http://ameblo.jp/korirafun/entry-11239690900.html オリジナルのV1対応版に適応すると下記になります。 >|php| // $xmlData = @simplexml_load_file($requestUrl); ←これはいらないのでコメント化 $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $requestUrl ); curl_setopt( $ch, CURLOPT_HEADER, false ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_FAILONERROR, true); $xmlData = simplexml_load_string(curl_exec( $ch )); curl_close( $ch ); ||< 私が改良したV2対応版に適応すると下記になります。 >|php| // $res = unserialize(file_get_contents($requestUrl)); ←これはいらないのでコメント化 $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $requestUrl ); curl_setopt( $ch, CURLOPT_HEADER, false ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_FAILONERROR, true); $res = unserialize(curl_exec( $ch )); curl_close( $ch ); ||< 上記いずれの変更も私の環境では実行できてますが、 star-domain.jpの契約は持ってないので、star-domain.jpでは未検証です。

happyluppyさんのコメント
回答ありがとうございます!なぜか教えて頂いた ソースを記述して見たものの動きませんでしたが、サーバーの仕様上 利用できないという事で諦めるか他のサーバーにするという意思決定ができそうです 何時間もぐぐったりしても分からなかったので本当に助かりました! ありがとうございました!

うぃんどさんのコメント
http://q.hatena.ne.jp/1345297158 の原因は私の検証不足です。すみません。 レスポンス1件の場合は結果の構造が変わるので、とりあえず下記で対応。 (縦一列に改造してるみたいなのでtr,tdタグ部分も修正しています。 >|php| if ($res['ResultSet']['totalResultsAvailable'] > 0) { if ($itemValue = $res['ResultSet']['Result']['Item']['AuctionID']) { $retHtml .= "<tr><td>\n"; //タイトル $retHtml .= "<b> " . $itemValue['Title'] . "</b></br>\n"; //画像 $retHtml .= "<table><tr><td width=150><img src=\"" . $itemValue['Image'] . "\" alt=\"" . $itemValue->title . "\" /></td><td>即決価格:<font color=red> " . floor($itemValue{'BidOrBuy'}) . "円<br></font>終了時刻 : " . date('Y年m月d日H時i分', strtotime($itemValue['EndTime'])) . "<br><a href=\"http://atq.ck.valuecommerce.com/servlet/atq/referral?sid=2219441&pid=877510753&vcptn=auct%2Fp%2FbB3A7Kg1M6EFXm6WdTH1hFB6eL8-&vc_url=" . $itemValue{'AuctionItemUrl'} . "\"target=_blank\">ヤフオクで詳細を見る、購入する</a></tr></td></table>\n"; $retHtml .= "</td></tr>\n"; } else { foreach ($res['ResultSet']['Result']['Item'] as $itemValue) { $retHtml .= "<tr><td>\n"; //タイトル $retHtml .= "<b> " . $itemValue['Title'] . "</b></br>\n"; //画像 $retHtml .= "<table><tr><td width=150><img src=\"" . $itemValue['Image'] . "\" alt=\"" . $itemValue->title . "\" /></td><td>即決価格:<font color=red> " . floor($itemValue{'BidOrBuy'}) . "円<br></font>終了時刻 : " . date('Y年m月d日H時i分', strtotime($itemValue['EndTime'])) . "<br><a href=\"http://atq.ck.valuecommerce.com/servlet/atq/referral?sid=2219441&pid=877510753&vcptn=auct%2Fp%2FbB3A7Kg1M6EFXm6WdTH1hFB6eL8-&vc_url=" . $itemValue{'AuctionItemUrl'} . "\"target=_blank\">ヤフオクで詳細を見る、購入する</a></tr></td></table>\n"; $retHtml .= "</td></tr>\n"; } } } else { // 該当なしの場合の処理 $retHtml .= "<tr><td>該当する商品がありませんでした。時間を置いてアクセスしてみてください。</td></tr>\n"; } $retHtml .= "</table>\n"; echo $retHtml; } ||< なお、下記の式はphpが正常に処理してくれますので、 トラブルとはまったくもって関係ありません。 ただ、後から自分や他人が見直す時にoil999くんみたいなことをやらかすので、 文字列であることは明記しておいたほうがいいかもしれません。 >|| $set1 = category7item55; ↓ $set1 = 'category7item55'; ||<

happyluppyさんのコメント
ありがとうございます!とり急ぎこちらの返信確認致しました! 所要で記述と動作確認に時間がかかりそうですので 改めてコメントします!

happyluppyさんのコメント
追記です。windofjulyさんには回答リクエストに答えて下さった という事もあり、所要が終わったら、後ほど感謝の意をメールで送信したいと思っています。 ですがせっかく1番最初に回答を頂けたのにあちらでの500ポイントの配分が windofjulyさんに行えません。回答いただけた時点で早々に閉じればよかったので 私のミスでお願いして申し訳ありませんが、あちらの回答欄でメールで回答しました(他の方も見ているかもしれませんので・・事実です)等 記入していただけると助かります。

2 ● oil999
●0ポイント

そのAPIは古いバージョンで、もう動作していません。

V2を利用して下さい。

Yahoo!オークション 検索API

http://developer.yahoo.co.jp/webapi/auctions/auction/v2/search.html


質問者から

windofjulyさん>>
詳しい回答ありがとうございます。
感謝します。試して見ましたが未だ動作して
いないので、もしよろしければ相談に乗っていただけないでしょうか?

回答の通りtest.phpを記述してみましたが
とソースが表示されるだけです。
V2の方は
と表示されただけでした。

一応他の情報としては
ソースに$requestUrl と入力して変数を表示させて
アクセスするとちゃんとxmlは取得できた事と

サーバーがhttp://www.star-domain.jp/man/man_server_php_spec.php
ここのサーバーを使っているという事と

wordpressの簡単インストールで
wordpressの関連ファイルが沢山ある中にtestというフォルダを作って
その中にファイルを置いていること位です。

もし何かお気づきの点がありましたら教えていただけないでしょうか?


関連質問

●質問をもっと探す●



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