PA-APIの改定によりDVD等のアダルト商品情報停止
アマゾンからの情報取得に使っているPA-APIというAPIが大きく改訂されました。
PA-APIは過去にも認証方法が変わったり、最大検索件数が100件(10page×10件)に制限されたり、売り上げ高によるアクセス制限がかかったりと変更がありましたが今回は変更というか根本的に作り直した感じです。
背景としてはamazonの売り上げにつながらないせどりツールなどがあり改訂は致し方ないです。
マイリリースに影響のあった主な変更点は下記のような感じです。
- 検索(SearchItems)で成人向けのコンテンツが引っかからなくなった。
- ジャンル(BrowseNodeId)での検索がなくなった。
- 表示順(SortBy)が発売日順(NewestArrivals)に取得できない場合がある。
- なぜかKindle本しか検索されない場合がある。
- 商品によっては在庫切れになると廃盤扱いにされ情報が取得できない場合がある。
- ASIN検索(GetItems)で一括取得した場合1件が廃盤等で取得できない場合残りの検索も失敗扱いになる。
裏技的な方法で解決できる部分もありましたし、マイリリースではコミックや文庫はアマゾンだけでなく様々なサイトから情報を集めてきてるので影響は限定的ですが、DVD等の成人向けコンテンツはほぼ取得不可能になりました。
今後もなんとか取得できる方法を試してみたいと思いますが、PA-APIの改善に期待したいです。
ハードウェア不具合
アクセス出来ない状態が続き申し訳ございません。
今朝からサーバの障害で止まっていたましたが
「VPSに接続できなくなる障害が発生しました。
障害によりお客様ご利用のVPSに意図しない再起動が発生しました。」
と連絡があったのですが、その後
「データの不整合により正しく起動しないVPSが確認されております」
となってさらに連絡があり、
「ハードウェア不具合の影響によりデータの不整合が発生したため、
お客様ご利用中の「さくらのVPS」が正常に起動しない、または起動はするもののアプリケーションなどが正常に動作しない可能性がございます。」
という事でした。
サーバー屋さんからは10日前のデータなら戻せるという事でしたが
レスキューモードも使えるという事なので、現在レスキューモードでfsck(スキャンディスクのようなもの)を試しております。
もしも復旧に失敗してもDBは毎日バックアップ取っているのでお客様に登録いただいた情報は元には戻るのですが、発売情報が10日前になり諸々整合性がとれなくなるのでしばらく復旧の時間を頂戴したいと考えております。
2018年9月29日追加
昨日は夜まで復旧を試みるも残念ながら失敗しました。
昨晩遅くにサーバー屋さんに10日前の状態に戻す依頼をしました。
翌日になっても連絡がなかったのですが確認すると、しれっと復旧してました。
DBを28日5時時点に復旧し工事中を解除いたしました。
しばらくご迷惑をおかけしますが本日中には発売日情報も戻したいと思います。
Alexaのスキルを公開しました
マイリリースのAlexa版を公開しました。
以前作ったLINE Botと同じシステムなので「発売日を知りたいコミック名を聞かれると答える」という基本の解答システムは出来てるのでAlexa用にアレンジするだけなのですがAlexaの公式の説明がnode.jsで、無理矢理それっぽいやりとりをPHPで書いて見たがダメだったので、慣れないlambdaと慣れないnode.jsを使ったので多少時間がかかった。lambdaにはブラウザ上で開発できる環境があるがこれだけで作るとライブラリを入れるのも難しいし慣れたエディタも使えないのでローカルに環境を作ってzipで圧縮してアップする方法を使った。
ローカルに環境を作るのにバージョンを整える必要があるぐらいで特に難易度が高くはなかった。
難易度が高いのは審査だが。今回のamazonさんは口うるさいが親切にも何が悪いか教えてくれるので助かる。私は「適当に作って後で直す」スタンスで申請したのでかなり注意を受けたが3回目で審査に合格した。
今日は地震があってちょっと公開のタイミングとしては微妙だけど使ってくれる人が増えるとうれしいな。
コミック発売日のマイリリース: Alexaスキル
バーコード読み込みに対応しました
久々の追加機能となりましたが、念願のバーコード読み込みに対応しました。これでコミックの管理が少しは楽になるかもしれません。
元々バーコード読み込みの為にアプリ化するかって気持ちだったけどアプリ化は作業コスト的に厳しくて進んでなかったのですがJavascriptでもバーコードが読めるJQueryプラグインを見つけて導入しました。
数年前にJavascriptでもバーコードが読めるライブラリはいくつか見つけてたのですが写真を撮影してバーコードを読み取るタイプだったり、ライブカメラで読めるタイプのJQueryプラグインも見つけてもAndroidのみの対応だったりで導入を見送ってました。
そして今回見つけたhttps://serratus.github.io/examples/live_w_locator.html=QuaggaJSはリアルタイムかつiOSも使えます。
さすがにアプリと比べると認識スピードや精度にむらがあるのでβ版としております。
バーコードリーダー|コミック発売日 MyRelease
※スマホでご確認ください。
キャッシュの見直しと諸々の修正
APIでamazonさんから情報を頂くときは回数制限があるのでアクセスの度にamazonさんのAPIをたたくとすぐに制限がきてしまいます。
そこでmyreleaseではAPI導入し始めの頃から一応キャッシュはしていたのだが今まで機能毎にバラバラに最低限度の情報のみをキャッシュしていたのを統一しました。場合によってはですが少し表示速度が速くなったかと思います。
あと、在庫情報やオンラインショップへのリンクが一部おかしくなっていたので修正いたしました。
今年の初め頃からamazonの書籍の定価情報が無くなり、暫定で他のパラメータを載せて変な金額表示になっていました。
確実ではありませんが正確な金額になるよう調整いたしました。
Product Advertising APIから情報が返って来なくなった!?
昨日からシステムの不都合によりご迷惑をおかけしまし申し訳ございませんでした。
昨日(25日)からProduct Advertising API(amazonから商品情報を入手するAPI)から商品情報が返ってこなくなりマイリリースのサービスが機能しなくなった。
最初に思ったのは「amazonがAPIの提供を辞めたのでは?」と思ったが他の方の運営してるサイトは通常通り運用しているようなのでウチだけという事になる。
もしかして仕様が変わった連絡を見過ごしたかと思って調べてみたが特に仕様が変わったという情報は無かった。
もしかして管理者のアカウントをいじったりしたのでAWSAccessKeyIdが変わったのかと思って確認しようとしたがProduct Advertising APIの管理画面が以前と変わっていてAWSAccessKeyIdが確認出来ない仕様になっていたので再度AWSAccessKeyIdを発行して試したが変わらず。
あと考えられるのは売り上げに対するリクエスト数の上限が定められているので上限を超えてしまったのかもと思い、とりあえず最低限動作するようにして解決を翌日に持ち越した。
明けて今日確認してみたが、未だ動作していない。
エラーメッセージを確認すると
「Request has expired. Timestamp date is 〜」
と「〜」の所にある時間が時計と2時間ほどずれてる事に気づいた。
調べるとTimestampの値の時間から15分しか許可されていないので2時間も過ぎていれば商品情報が返ってくるはずもない。
とりあえずPHPで時刻を調べたが2時間ほどずれている。(gmdateの方はamazonで指定するグリニッジ標準時なので普通の時刻とは違う)
echo date('Y-m-d H:i:s');
echo gmdate('Y-m-d\TH:i:s\Z');
ターミナルでdateコマンドを実行しても2時間ほど過ぎていた。
とりあえずハードの時計を見てみると正常な時間を返した。
# hwclock -r
ログ(/var/log/messages)を確認すると25日(昨日)の7時に時計合わせをしようとして異常終了した形跡が見つかった。
panic_stop +5321 s; set clock manually within 1000 s.
ntpd(時計合わせのサービス)を確認すると
# service ntpd status
ntpdが停止していますがPIDファイルが残っています
とエラーが出た。
エアーメッセージをググると解決策が書かれてたのでその通りしてみた。
○○が停止していますが PID ファイルが残っています - iwamocchan blog
# rm /var/run/ntpd.pid
# rm /var/lock/subsys/ntpd
# service ntpd start
これでmyreleaseに戻って確認すると正常に商品情報が返ってくるようになった。
まさかの時計が壊れた事が原因だったとは・・・