FuelPHPのユニットテストで楽天API系のテストコードが503エラーを返すときの対処方法 #fuelphp
FuelPHPでPHPUnitを使ったユニットテストで楽天API系のテストコードが503エラーを返すときの対処方法です。
「激安!1円ショップ」のような楽天APIを使用するようなアプリケーションを作る際、楽天APIにリクエストする様々なテストコードを書く必要があります。そしてコンソールから「oil test --group=App」というように、全てのテストコードを実行したとき、
Failed asserting that 503 is of type "array".
というようエラーが突如として返るときがあります。これは楽天APIの公式ドキュメントにも書いてありますが、「※短い時間の間に大量に、同一のリクエストURLへアクセスすると、一定時間利用できなくなる場合がございます。テストの際にはご注意ください。」というのが原因です。テストコードの量が多くなるにつれ、リクエストする回数が増えているのです。
一つの対処方法としては「oil test --group=Rakuten」というように、ユニットテストのクラス毎に実行させることですが、一度に全てのテストを行いたいときもあると思います。そのようなときはsleep関数がお手軽です。
class Test_Model_Rakuten extends TestCase
{
(※中略)
}
sleep(5);
というように末尾にsleep関数と待つ時間を入れれば、テストをクリアすることができました。(私の場合、5秒でした)
全商品1円で購入可能な「激安!1円ショップ」を作りました!(FuelPHP+楽天API) #fuelphp
「激安!1円ショップ」とは、1円で購入可能な商品のみを集めたWebサービスです。1円で販売している商品のみをECサイトから収集を行い「激安1円ショップ」に掲載をしています。
経緯
私は個人開発者としては、APIをベースとしたWebサービスを作るのが好きで、今まではYahoo 画像APIを使ったWebサービスをいくつか作ってきました。(現存しているものはこれやあれ)
一時期、使用回数無制限ということもあり、精度も悪くないことから、Bing画像APIに乗り換えていました。しかし、Bing画像APIが使用回数制限を設けてしまったため(しかもYahoo APIより使用回数が少ない)、再度Yahoo APIに乗り換えて、細々とサービスを続けています。
APIの使用回数制限についてはテクニックを使えば、APIの使用回数を節約していくことは可能なのですが、趣味Webサービス作りに関しては、できれば節約のことを考えずに、パッーと使いたいところです。
そんな中、次に遊ぶことのできるAPIを探していたところ、私が目につけたのは楽天APIでした。リクエスト回数制限が基本的(※1)には存在せず、場合によっては楽天アフィリエイトでの収入も見込めるという趣味と実益も兼ねる可能性を秘めたAPIです。
APIの種類がかなり多く(※2)、眺めているだけでも、たくさんのアイデアが出てきて、わくわくします!
さらに開発者を助ける便利ツールも提供されています!
「APIテストフォーム」 - 最近のAPIによくあるAPIの挙動を試せるAPIエクスプローラー的なものです。getパラメーターを含んだリクエストURLをコードに記載する前にWeb上で確かめることができます。
「APIモニター」 - 正常レスポンス率、レスポンスタイムがAPIごとに一覧表で表示されています。反応が鈍いAPIや重いAPIなどといったAPIがすぐにわかります。なんと現在の数値だけではなく、一週間前までの数字を見ることができます!これは信頼できます。
数字嫌いな人に見せたところ、「寒気がする」ということでしたが、数字が好きな僕にとっては、とってもわくわくする表です。実際の表をここに見せたいのですが、許可を取っていないため、掲載はやめています。ぜひとも実際に確認してみてください。
FuelPHP
このWebサービスもまた、FuelPHPで構築しています。バージョンは1.4です。公開しているWebサービスとしては5つ目のFuelPHPでの構築です。難しいことはやっていないのですが、だいぶ慣れてきました。今回は初めてテストを書きながら、構築しました。
なぜFuelPHPかというのは、FuelPHPで横断力技検索をリニューアルいたしました #fuelphpの記事をご覧ください。その他にもあります。(※3)
激安!1円ショップ
アプリの話に戻りますが、激安!1円ショップは楽天の商品検索で1円の商品だけを引っ張ってきて、表示しているWebサービスになります。実際にAPI開発をされている方であれば、「なるほど」となると思います。1円で購入できる商品は、サンプル品が多いですが、実際にお得な商品もあると思いますので、ぜひ掘り出しものを発掘してみてくださいね!
※1 「※短い時間の間に大量に、同一のリクエストURLへアクセスすると、一定時間利用できなくなる場合がございます。テストの際にはご注意ください。」という制限はあります。
※2 約40種類ぐらいあります。今はAPIバージョンの移行期らしく、バージョン1と2の両方が提供されています。1を除いて約40種類ほどでした。
※3
FuelPHPで「アイドルお宝画像速攻検索」をリニューアルいたしました #fuelphp
FuelPHPで任意のViewにステータスコードを設定する方法 #fuelphp
Fuelphpで既存に用意されている404を使わずに任意のViewにステータスコードを設定させたいときの方法メモ。
Fuelphp1.4で404や500以外にも様々なステータスコードを返すことをしたいと思いました。 当初はここの記事を参考にして、ステータスコードをheader関数で設定しようとしましたが、どのステータスコードを設定しても、サーバー上で500のエラーが出る状態。
Twitterに投げかけたところ、「header関数はHTTPヘッダを送信する関数なので、関数使う前に文字を出力していると無効になっちゃいますね」と教えていただき、これはFuelphp的な問題だと気づきました。
結論としてはFuelphpの作法でステータスコードを設定する必要があります。 Rest コントローラ - 概要 - FuelPHP ドキュメントにありました。
response($data = array(), $http_code = 200)
とありました。実際にControllerでViewを生成するところに当てはめてみます。
$view = View::forge('sample/error'); // Viewファイルの指定
$view->set('test',$test); // 値を渡す
return Response::forge($view,404);
FuelPHPで「アイドルお宝画像速攻検索」をリニューアルいたしました #fuelphp
FuelPHP1.4を使用し、お宝画像を一度の入力と検索で探すことができるWebサービス「アイドルお宝画像速攻検索」をリニューアルいたしました。
アイドルお宝画像速攻検索はお気に入りのアイドルや女優、タレント、モデルのお宝画像一度の入力と検索で探すことができるWebサービスです。説明するより、お試しいただいたほうが早いかと思います!ぜひ一度、お試しください!
トップ画面
アイドルお宝画像速攻検索のリニューアルは横断検索、サイコラ!、3 Size Searchに続き、4サービス目のFuelPHPでのリニューアルです。
「「アイドルお宝画像速攻検索」」も「3 Size Search」同様、元々、PHPを独学で勉強する過程で制作し(フレームワーク使用なし)、次にRubyプログラマとして働き始めたとき、Railsの勉強するためにHerokuを使い、Railsで作り直しました。しかし、Rubyを書く機会が激減したために、Railsのアップデートについていくことができず、メンテナンスができなくなったため、この度、PHPのフレームワーク、FuelPHPを使い、書き直しました。
このサービスは入力いただいたキーワードに対して、別の言葉をつけて、検索APIにリクエストをする、という仕様で行なっています。以前まではfile_get_contensで問い合わせ、そのXMLを展開して…ということを×言葉数行なっていました。10の言葉があるとすると、10度リクエストをするため、大変重いサービスでした。
色々調べていく過程で、PHPにはcURLという並列でリクエストを送れる仕組みがあり、それを行うことで、10のリクエストを同時に行い、そして返却されたXMLを展開する、ということを行えることで、以前よりはだいぶ高速化ができました。
ただ、とはいえ、アイドルお宝画像速攻検索に関しても直すところはまだまだたくさんあり、完成度としてはこちらも30%ぐらいですが、利用者の方が多ければ改善を続けていきたいと思います。何かご要望がありましたら、Twitter(@toshiyuki83)などでご要望いただければ嬉しく思います!それでは「アイドルお宝画像速攻検索」をお楽しみください!
※関連記事
・FuelPHPで横断力技検索をリニューアルいたしました #fuelphp
・FuelPHPでサイコラ!をリニューアルいたしました #fuelphp
・「3 Size Search」をFuelPHPでリニューアルいたしました #fuelphp
「3 Size Search」をFuelPHPでリニューアルいたしました #fuelphp
FuelPHP1.3を使用し、「3 Size Search」(スリーサイズ サーチ)をリニューアルいたしました。
「3 Size Search」はスリーサイズを指定するだけで、貴方の好みの画像を探すことができます。説明するより、お試しいただいたほうが早いかと思います!ぜひ一度、お試しください!
検索結果画面(B89cm・W58cm・H86cmの検索結果)
横断検索、サイコラ!のリニューアルに続き、3サービス目のFuelPHPでのリニューアルです。
※関連記事
FuelPHPで横断力技検索をリニューアルいたしました #fuelphp
FuelPHPでサイコラ!をリニューアルいたしました #fuelphp
「3 Size Search」は元々、PHPを独学で勉強する過程で制作し(フレームワーク使用なし)、次にRubyプログラマとして働き始めたとき、Railsの勉強するためにHerokuを使い、Railsで作り直しました。しかし、Rubyを書く機会が激減したために、Railsのアップデートについていくことができず、メンテナンスができなくなったため、この度、PHPのフレームワーク、FuelPHPを使い、書き直しました。
FuelPHPについては公開しているものは3例目であり、だいぶ慣れました。3 Size Search自体は技術的にも難しくないので、移植は容易ではありました。ただ、画像APIの状況が様変わりしていました。当初、Yahoo APIを利用していましたが、利用制限が気になっていました(とはいえ、利用回数をオーバーするのは稀でしたが…)。そこで利用回数制限のなく、精度もそこそこ良かったBing APIを一時期利用していましたが(Railsアプリ時)、Bing APIアップデートがあり、無料の利用回数には制限が出てきました。そこでまた再び、Yahoo APIに戻りました。その他の画像APIも、もろもろ調査しましたので、だいぶ知見が溜まりましたので、いつか公開できれば良いかなと思っています。
「3 Size Search」は直すところはまだまだたくさんあり、完成度としては30%ですが、利用者の方が多ければ改善を続けていきたいと思います。何かご要望がありましたら、Twitter(@toshiyuki83)などでご要望いただければ嬉しく思います!それでは「3 Size Search」をお楽しみください!
3 Size Search(スリーサイズ 検索エンジン)
3 Size Search Facebookページ
@3sizesearch - twitter
FuelPHP SapporoというFacebookグループを作ってみました #FuelPHP
周りにFuelPHP使いの人が増えてきましたので、FuelPHPについて共有したり、悩み相談できる場所があれば良いと思い、FuelPHP SapporoというFacebookグループを作りました!札幌近郊にお住みの方で、FuelPHPを扱っている、興味があるという方はどうぞご参加くださいませー!
■グループの説明
FuelPHP Sapporo(仮称)はFuelPHPについての悩み相談や最新情報共有や、制作実績共有などを行うFacebook公開グループです。
FuelPHPに興味がある方で札幌に関連がある方であれば、どなたでも参加できます。公開グループですので、メンバーや投稿内容は誰でも見れますので、投稿内容にはご注意ください。(機密事項が含まれる内容や誹謗中傷の内容など)
コミュニケーション活性化のため、初めて入った方は自己紹介いただければ幸いです。