2009年5月31日 日曜日

PHPバージョンアンケート

カテゴリー: AmazonLink, プログラミング
タグ:,
時間:3時21分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録
Popularity: 11%
by Popularity Contest 日本語版

AmazonLink を Product Advertising API(旧 Amazon アソシエイト Web サービス)に対応させるに当たり、PHPのバージョンの傾向を知るためのアンケートを開始しました。アンケートはサイドバーにも掲載されます。

PHPは4.x がすでに公式に開発終了となっていますが、まだまだ生き残っています。5.x に移行するべきではありますが、サーバー側で対応していなければどうしようもありません。大手レンタルサーバーはすでにかなり対応していますが、4.x しか使えないところも残っているようです。

現時点でどれくらいのサーバーが移行できているのかを知ることが目的です。ご協力よろしくお願いします。

メインサーバーで使えるPHPのバージョンは?
View Results
コメント (0)

2009年5月10日 日曜日

”Amazon アソシエイト Web サービス”が”Product Advertising API”に

カテゴリー: AmazonLink, アフィリエイト, プログラミング
タグ:, , , , ,
時間:17時46分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録
Popularity: 16%
by Popularity Contest 日本語版

Amazon.co.jp からいろいろな情報を取得することができる”Amazon アソシエイト Web サービス”というサービスがありますが、”Product Advertising API”という名称に変わるとのことです。そして、情報のリクエストには署名による認証が必要になるとのこと。

拙作 WordPress プラグインの AmazonLink でもこのサービスを使用しているので他人事ではありません。

基本方式はほとんど変わらないとのことですが、認証で使用する電子署名の作成には、開発者登録をしたときに作成した Secret Access Key というものが必要になるようです。リクエスト時のデータによって変わるため、電子署名データだけをプログラムに埋め込んでおくことができません。また、Secret Access と言うくらいなのでこれを公開するのも駄目でしょう。

詳しい情報がまだ得られていないのでなんとも言えませんが、ただ使うだけの人にも開発者登録をしてもらわないと駄目になるかもしれません。

今のところは、たつをさんによる記事が一番詳しそう。

電子署名データの作成には RFC 2104-compliant HMAC with the SHA256 hash algorithm という変換処理のようなものが必要で、これを行うための関数である hash は PHP5 でないと標準では使用できません。PHP4 はすでに終了宣言が出ているのですが、まだ PHP5 が使用できないサーバーもあるので悩みどころです。

コメント (0)

2008年5月24日 土曜日

Amazon Web Service の価格情報と発送時期

カテゴリー: AmazonLink, アフィリエイト, プログラミング
時間:17時25分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録
Popularity: 42%
by Popularity Contest 日本語版

 AmazonLink 2.0 を開発中ですが、価格情報と発送時期の表示で悩んでしまっています。

 基本的に、Amazon Web Service では商品情報を24時間までキャッシュとして所持することが可能です。めったに変更されない情報については1ヶ月まで可能ですが、現時点では24時間を基準として更新するという実装をしています。

 今のところはうまく動いているのでこのまま価格についても実装するつもりだったのですが、途中で価格情報と発送時期はキャッシュ禁止となっていることが判明しました。規約に、other than pricing or availability information とあります。

 キャッシュが出来ないとなると毎回取得することになるのですが、1秒に1回というリクエスト制限があるために表示に時間がかかってしまいます。WordPress プラグインの仕様上記事単位の処理となり、1ページに複数の記事がある場合では1回のリクエストで一括して取得するという方法が使えません。

 現在の選択肢は次の2つ。

  1. 表示時間がかかってもいいから毎回リクエスト
  2. 価格情報および発送時期の表示機能をつけない

 今のところ1のやり方で出来ないかと検討しています。テンプレートに価格情報か発送時期のコードがあるときにだけリクエスト処理をすれば、使う人が選択することが出来ます。プログラムが汚くなりそうなのが心配ですが・・・。

 一番いいのはキャッシュをさせてくれるようになることですね。期限を1時間とか30分とかにしたとしても、アクセスの多い大手ブログでは効果が出ると思うのです。
 規約によると、表示された価格と発送時期を1時間ごとに強制更新する必要があるのだそうです。逆に言えば、1時間は同じままでもいいということですよね。だったら、「価格と発送時期は1時間までキャッシュ可能」とすればいいはず。

 いい解決手段があればぜひご連絡ください。

コメント (0)

2008年3月16日 日曜日

Smarty で date() の書式設定を使う

カテゴリー: プログラミング
時間:22時39分
投稿者:よしとも
AddClips 経由でソーシャルブックマークに登録
Popularity: 32%
by Popularity Contest 日本語版

 Smarty というテンプレートエンジンがあります。おそらく、PHP では定番中の定番だと思います。

 この Smarty は私のお気に入りでして、PHP でそれなりの規模のもの(といっても、プログラムとしては小さなものですが)を作るときには必ずといっていいほど使っています。現在製作中のものにも使っているのですが、日付を表示させる部分で不満がありました。1桁の時には10の位の部分が0になったり半角スペースになってしまうのです。

 書式を指定して日付を表示するには date_format という就職子を使うのですが、書式がいまいち充実していなくて思うような表示をさせることができません。データ保持に使っている MySQL のほうがよっぽど多機能だったので、思わずそちらで整形済みの日付を作成してしまいました。しかし、できれば Smarty 側で処理をさせたいと思い、大雑把ですがプラグイン機能を使って実装してしまいました。

実装

 実装したといっても、大したことはやってなかったりします。もともと date_format もプラグインとして実装されていて、内部では PHP の strftime() という組み込み関数を使用しています。冒頭で書いた不満は、この関数の機能に起因します。

 対して、同じ組み込み関数である date() では、1桁の時には1桁で表示するということが可能です。そこで、date_format のファイルを基にして date() を使うようにしてみたというわけです。それが次のコードです。ライセンスは Smarty に従って LGPL となります。

PHP:
  1. <?php
  2. /**
  3. * Smarty plugin
  4. * @package Smarty
  5. * @subpackage plugins
  6. */
  7.  
  8. /**
  9. * Include the {@link shared.make_timestamp.php} plugin
  10. */
  11. require_once $smarty->_get_plugin_filepath('shared', 'make_timestamp');
  12. /**
  13. * Smarty date_format modifier plugin
  14. *
  15. * Type:     modifier<br>
  16. * Name:     date<br>
  17. * Purpose:  format datestamps via date<br>
  18. * Input:<br>
  19. *         - string: input date string
  20. *         - format: strftime format for output
  21. *         - default_date: default date if $string is empty
  22. * @author   Yoshitomo
  23. * @param string
  24. * @param string
  25. * @param string
  26. * @return string|void
  27. * @uses smarty_make_timestamp()
  28. */
  29. function smarty_modifier_date($string, $format = 'M d, Y', $default_date = '')
  30. {
  31.     if ($string != '') {
  32.         $timestamp = smarty_make_timestamp($string);
  33.     } elseif ($default_date != '') {
  34.         $timestamp = smarty_make_timestamp($default_date);
  35.     } else {
  36.         return;
  37.     }
  38.     return date($format, $timestamp);
  39. }
  40.  
  41. /* vim: set expandtab: */
  42.  
  43. ?>

 この内容を、modifier.date.php というファイル名で保存して、Smarty のプラグインディレクトリに置いてください。使い方は書式が date() に従うというだけで、あとは date_format と同じです。

SMARTY:
  1. {$date_value|date:"Y年n月j日"}

残る不満

 無事便利になったわけですが、分と秒に関しては結局満足できる結果にはなりませんでした。この2つの項目は、なぜか1桁で表示するという書式設定ができません。
 書式の表をよく見てみると、小文字のときは0がついて、大文字の時には0がつかないと言うようになっていることがわかります。そして、分と秒に対する0のつく場合の文字としては i と s があり、その大文字である I と S はすでに別の項目で使われてしまっています。大文字と小文字の対応を崩したくないために実装していないのではないかと、思わず疑ってしまいました。

 I も S も、日本ではあまり需要がない項目であるのがなんとも残念です。時間を見て実装をと思っていますが、もしすでにあってご存知でしたらぜひ教えてください。

コメント (0)

HTML convert time: 0.588 sec. Powered by

Images is enhanced with WordPress Lightbox JS by Zeo