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

http://webservice.kabufuru.net/yahapi/samplephp.php
上記のサンプルコードを改変したphpプログラムを書いています。
まず上記改変する前のサンプルコードでは問題が起こらないので
サーバーの設定などには問題が無いと考えています。
ソース改変後
<?php getAndDispFunc( "中古" ); ?>の部分を例えばウェブマネーと
すると画像の様にエラーが起こってしまいます。
ニンテンドープリペイド と入れると問題は起きません
あと半角英語でも問題が起きた事が無く、ウェブマネーをURLエンコードしたURLを
ブラウザに入れても問題無くエラーが起こるようなことはありません。
データーは一応全部UTF-8で保存しています。

構成として
index.php (test.phpの呼び出し)
test.php (set.phpとkeyword.phpを読み込んで実行)
set.php (設定情報をまとめたファイル)
keyword.php (検索ワードを記述するファイル)

ソースをアップロードしたので原因がわかる方教えてください
PASS 1234hatena です。
http://ll.la/NH)f

1345297158
●拡大する


●質問者: happyluppy
●カテゴリ:インターネット
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● oil999
●0ポイント

set.phpの次の記述が間違っています。
定数を代入してください。

$set1 = category7item55;//キャッシュIDフォルダ名名連続記述

2 ● rouge_2008
●500ポイント ベストアンサー

1件しか見つからなかった場合のレスポンスデータの構造が違っていたのが原因です。
(※PHPserializeのみ確認。XMLとJSONPの場合は不明です。)
次のようにすると正常に表示されます。

function getAndDispFunc( $keyword ){

require_once "set.php";

//キャッシュの作成

$cache_time = 1*3600;
$result = require_once 'Cache/Lite.php';
if ($result === false){
echo 'パスが違う?';
exit();
}
$cache_id = $set1;
$option = array('cacheDir' => 'tmp/',
'lifetime' => $cache_time,);
$cache_lite = new Cache_Lite($option);
$cache_data = $cache_lite->get($cache_id);

if($cache_data){

$html_title[0] = $cache_data;

}else{

//conecoリクエストURLの作成

$requestUra = "http://api.coneco.net/cws/v1/SearchProducts?apikey=*** Your CONECO API Key ***";
//$requestUra .= "&comId=$set2"; //商品IDの指定
$requestUra .= "&keyword=" . urlencode( $keyword );
//conecoAPIリクエスト実行
$res2 = file_get_contents($requestUra);
$html=mb_convert_encoding(file_get_contents($requestUra), 'UTF-8', 'auto');
$pattern = "/(?<=<LowestPrice>).+?(?=<\/LowestPrice>)/mis";
preg_match($pattern,$html,$html_title);

$cache_lite->save($html_title[0], $cache_id);
}


//cocone IDの設定が無い場合の処理
if( isset($html_title[0]) ){

} else {
$html_title[0] = $set6;
}


//リクエストURL作成
$requestUrl = "http://auctions.yahooapis.jp/AuctionWebService/V2/php/search?";
$uranai_bangou = rand(1,11); 
if ($uranai_bangou == 1) { 
$requestUrl .= "appid=LuXDRiSxg677.Bfle4jIRp7rOtuoeGdm1q0gEhrTXnwMz35nRN8XnkRb8fas1PdqTKyoqZg-"; 
} elseif ($uranai_bangou == 2) { 
$requestUrl .= "appid=oxJbSFqxg65eKTlbRVJo9xLvRG3rpoGZvD8CIcBbGPhD9nTjRH.cN3fuYabO4btsVOkkees-"; 
} elseif ($uranai_bangou == 3) { 
$requestUrl .= "appid=_eDyS7Wxg66n.rnBFsvExdgO7Bi8CCVJVMfPDue77EZnQRFJ_X4Cf0mEh.o4I3_sc_8xSes-";
} elseif ($uranai_bangou == 4) { 
$requestUrl .= "appid=Gcyamraxg65Ps3GnOTAgqTloZ6O1bHlKOROOMeR5H4PxU4cwQSIAmk628bcSO.vGNQz3roA-"; 
} elseif ($uranai_bangou == 5) { 
$requestUrl .= "appid=Huh7gbmxg665fWm5z_FwlDQ4oN.1MKjxSgl7xkkksVCRsnfUehDCH8w2uUojydk5cbaGV9g-"; 
} elseif ($uranai_bangou == 6) { 
$requestUrl .= "appid=ccaZaSOxg66DjX5ssW6a2Fn1IxX_3VbHJnMTjbSz6xNi8Q.y5yzShh0Wpxjy_rattovDeKE-"; 
} elseif ($uranai_bangou == 7) { 
$requestUrl .= "appid=KbzQRh6xg67njNwThrQE4jbJ7VAsOGG9ZHeIQgBKU1jncMVJLCjXjltwuU7sXwoEr1.JKUo-";
} elseif ($uranai_bangou == 8) { 
$requestUrl .= "appid=PU0hqPexg66HGfMn.FpEDBpicax5AjkJ01qie.hJ45I7tcvVLk0G19XHvrL28VD6JXkYZmw-";
} elseif ($uranai_bangou == 9) { 
$requestUrl .= "appid=JsNp9rSxg64um9srcjBlt6rws4GCSKlK4t4j1dCZhEQij9onYshnbsZgIbZTccrSWMnitfE-";
} else { 
$requestUrl .= "appid=1g9Htxuxg64fs_yk4BrPCL9Hqec9s3gqN5W_waSFcEayuG2MeTr4p4eamvtj5dUEGdff7N4-";
}

$requestUrl .= "&category=$set3";//カテゴリ「空気清浄機」

$requestUrl .= "&query=" . urlencode( $keyword );;//検索キーワードをUTF-8でURLエンコード
$requestUrl .= "&sort=bidorbuy&order=b";//ソート
$requestUrl .= "&thumbnail=1";//画像ありの商品の絞り込み
$requestUrl .= "&aucmaxprice=";//最大価格
$requestUrl .= "&aucminprice=";//最小価格

$requestUrl .= "&aucmax_bidorbuy_price=$html_title[0]";//即決最大価格
$requestUrl .= "&aucmin_bidorbuy_price=$set4";//即決最小価格

//APIリクエスト実行
$res = unserialize(file_get_contents($requestUrl));

//APIレスポンスXMLよりHTMLに変換
$retHtml .= "";
$retHtml .= "<b>$set0</b><br><br><font color=red><br><a href=http://$set5 target=_blank>Amazonでの購入もおすすめです。</a><br><table><hr>\n";

$retHtml .= "<br>" . $res['ResultSet']['totalResultsAvailable'] . " 件見つかりました。<br>";
if ($res['ResultSet']['totalResultsAvailable'] > 0) {
$iLoop = 0;
foreach ($res['ResultSet']['Result']['Item'] as $itemValue) {
if( $iLoop % 2 == 0 ){
$retHtml .= "<tr><td>\n";
} else {
$retHtml .= "<tr><td>\n";
}
//タイトル
$title = $res['ResultSet']['totalResultsAvailable'] == 1 ? $res['ResultSet']['Result']['Item']['Title'] : $itemValue['Title'];
$retHtml .= "<b> " . $title . "</b></br>\n";
//画像
$image = $res['ResultSet']['totalResultsAvailable'] == 1 ? $res['ResultSet']['Result']['Item']['Image'] : $itemValue['Image'];
$buy = $res['ResultSet']['totalResultsAvailable'] == 1 ? $res['ResultSet']['Result']['Item']['BidOrBuy'] : $itemValue{'BidOrBuy'};
$endtime = $res['ResultSet']['totalResultsAvailable'] == 1 ? $res['ResultSet']['Result']['Item']['EndTime'] : $itemValue['EndTime'];
$itemUrl = $res['ResultSet']['totalResultsAvailable'] == 1 ? $res['ResultSet']['Result']['Item']['AuctionItemUrl'] : $itemValue{'AuctionItemUrl'};
$retHtml .= "<table><tr><td width=150><img src=\"" . $image . "\" alt=\"" . $title . "\" /></td><td>即決価格:<font color=red> " . floor($buy) ."円<br></font>終了時刻 : " . date('Y年m月d日H時i分', strtotime($endtime)) . "<br><a href=\"http://atq.ck.valuecommerce.com/servlet/atq/referral?sid=2219441&pid=877510753&vcptn=auct%2Fp%2FbB3A7Kg1M6EFXm6WdTH1hFB6eL8-&vc_url=" . $itemUrl . "\"target=_blank\">ヤフオクで詳細を見る、購入する</a></tr></td></table>\n";

if( $iLoop % 2 == 1 ){
$retHtml .= "</tr></td>\n";
} else {
$retHtml .= "</tr></td>\n";
}
$iLoop++;
if($res['ResultSet']['totalResultsAvailable'] == 1) {
break;
}
}
if( $iLoop % 2 == 1 ){
$retHtml .= "<td></td></tr>\n";
}
} else {
 // 該当なしの場合の処理
 $retHtml .= "<tr><td>該当する商品がありませんでした。時間を置いてアクセスしてみてください。</td></tr>\n";
}
$retHtml .= "</table>\n";
echo $retHtml;
}

require_once "keyword.php";

rouge_2008さんのコメント
Yahooオークションの検索時に最大即決価格を決める為に、coneco.netの商品検索APIでcomIdで商品IDを指定して検索していますが、商品IDが分からないと検索できないので、keywordによる商品名検索キーワード指定検索で確認しました。 http://apidoc.coneco.net/manual/v1/searchproducts Yahooオークションの検索APIですが、全カテゴリを対称にする場合は、単純にcategoryを未指定にするといいです。 set.php >|| //$set3 = 2546454544949;//YAHOO CATEGORY NO //適当にしてすべてのカテゴリを検索 ||< http://developer.yahoo.co.jp/webapi/auctions/auction/v2/search.html

happyluppyさんのコメント
補足にとんでもなく酷いことを書いてしまいましたが、 2番のrounge_2008さん以降はの間違いです。 申し訳ありません、少し記述と実行ができない環境なので のちほど実行してみます。ありがとうございました。

rouge_2008さんのコメント
メッセージが届いていないので確認できていません・・・ コメントでのwindofjulyさんのアドバイスに従って少し修正してみました。 >|| //APIレスポンスXMLよりHTMLに変換 $retHtml .= ""; $retHtml .= "<table><tr><td><b>$keyword</b><br><br><font color=red><br><a href=http://$set5 target=_blank>Amazonでの購入もおすすめです。</a><hr></td></tr>\n"; $retHtml .= "<tr><td>" . $res['ResultSet']['totalResultsAvailable'] . " 件見つかりました。</td></tr>\n"; if ($res['ResultSet']['totalResultsAvailable'] > 0) { $iLoop = 0; var_dump($res['ResultSet']['Result']['Item']); foreach ($res['ResultSet']['Result']['Item'] as $itemValue) { $retHtml .= "<tr><td>\n"; if($res['ResultSet']['totalResultsAvailable'] == 1) { $retHtml .= "<b> " . $res['ResultSet']['Result']['Item']['Title'] . "</b></br>\n"; $retHtml .= "<table><tr><td width=150><img src=\"" . $res['ResultSet']['Result']['Item']['Image'] . "\" alt=\"" . $res['ResultSet']['Result']['Item']['Title'] . "\" /></td><td>即決価格:<font color=red> " . floor($res['ResultSet']['Result']['Item']['BidOrBuy']) ."円<br></font>終了時刻 : " . date('Y年m月d日H時i分', strtotime($res['ResultSet']['Result']['Item']['EndTime'])) . "<br><a href=\"http://atq.ck.valuecommerce.com/servlet/atq/referral?sid=2219441&pid=877510753&vcptn=auct%2Fp%2FbB3A7Kg1M6EFXm6WdTH1hFB6eL8-&vc_url=" . $res['ResultSet']['Result']['Item']['AuctionItemUrl'] . "\"target=_blank\">ヤフオクで詳細を見る、購入する</a></td></tr></table>\n"; } else { //タイトル $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></td></tr></table>\n"; } $retHtml .= "</td></tr>\n"; $iLoop++; if($res['ResultSet']['totalResultsAvailable'] == 1) { break; } } } else { // 該当なしの場合の処理 $retHtml .= "<tr><td>該当する商品がありませんでした。時間を置いてアクセスしてみてください。</td></tr>\n"; } $retHtml .= "</table>\n"; echo $retHtml; ||<

rouge_2008さんのコメント
質問者からのメッセージが上記コメント返信より後の投稿だと思いますが、何かまずい事でもあったでしょうか?

質問者から

回答ありがとうございます
とある事情でもう少し質問をひらいておきますが
2番のrouge_2008さんはポイントの配分を行いませんので
よろしくおねがいいたします。


関連質問

●質問をもっと探す●



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