概要
DxO Photolabや、DxO PureRAWといったアプリケーションは、Adobe RAWとは異なる独自のレンズプロファイルデータベースを所有しています。
そのため、アプリケーションに対応しているかを調べるためには、検索用ページで検索する必要があります。ただ、この検索ページは多少クセが強く、操作性が良いとは言えませんでした (主観)。
そのため、サクサク検索できるインターフェースを自作してみました。
JavaScriptでできること、できないこと
一般的に、JavaScriptでREST APIを叩くことはよく行われています。しかしそれは、CORSの制約に触れないからであって、通常は、JavaScriptが動いているのとは別ドメインのWebページ内のデータをFetch APIなどで取得することはできません。
しかし、HTTPレスポンスを確認したところ、DxOのWebページはJavaScriptからデータを取得することができる設定になっていることが判明しました。そのため、DOMParserを利用することにより、Document型に変換し、Document.getElementsByTagName()などで解析が行なえます。
とは言え、素のJavaScriptだと「取得したデータを5分だけキャッシュする」などといった高度な処理は難しいので、今回はFlaskでPythonサーバーを構築し、データを取得してもらうことにしました。
データの分析・REST APIの特定
これは単純に、Developer Toolsの出力を見ながら実施しました。希望の結果を返すための最小入力については、実際にWebブラウザからURLを貼り付けて確認しました。特定後は、Python側から叩いて加工し、都合のいいJSONデータを返すようなREST APIをFlaskで作成しました。まさか、総アイテム数などの情報も拾えるとは……。
ページング表示
別に本家に表示形式を合わせる必要はないのですが、実装を楽にするため、「指定したページ位置から10件を表示」するような処理に落ち着きました。ページング用のボタンは、使用しているCSSライブラリに都合がいいのがあったのでそのまま採用。
実装結果
まあまあ見栄えが良くなったのではないでしょうか。なお、当コードの配布予定はありません。
この記事へのコメント