0

こんにちは、私はアカデミック プロジェクトを行っている学生です。プロジェクトを完了するためのガイダンスが必要です。

私のプロジェクトは、3 つの異なる書店から本を検索し、3 つの店舗すべてから d 価格を提供する grails フレームワークに基づいています。ユーザーが必要な本を入力したら、それらの書店を検索する方法。

前もって感謝します

4

2 に答える 2

1

詳細を提供する必要があります。書店を検索するとは、データベースで検索するということですか、それとも Amazon などのようなものですか。

于 2012-04-12T06:16:13.677 に答える
0

これらのオンライン書店に API があるかどうかを調べます。または、選択肢がある場合は、検索に使用できる API があるオンライン書店を選択してください。たとえば、Amazon には、カタログの検索に使用できる「Product Advertising API」があります ( http://docs.amazonwebservices.com/AWSECommerceService/latest/DGを参照)。通常、これらの種類のものにアクセスするには、アフィリエイトとして登録する必要があります。

API 経由でアクセスできるオンライン書店がいくつかあれば、それらを呼び出して結果を調整する grails コードを作成するのは比較的簡単です。API は通常、REST または SOAP のいずれかの Web リクエストの形式を取ります (たとえば、Amazon - AnatomyOfaRESTRequestを参照してください)。単純な REST を使用できる場合は、Groovy の HTTPBuilder を使用して書店の API Web サービスを呼び出して使用できます。または、いくつかの Grails プラグイン ( REST Client builderなど) があると思います。SOAP の場合は、Grails CXF Client Grails プラグインを検討してください。

API の検索を 1 つずつ実行することもできますが、さらに高度にしたい場合は、新しいサーブレット 3.0 非同期機能を使用して、3 つの API すべてを同時に非同期で呼び出してみることもできます (Grails 2.0.x からの使用方法を参照してください)。 : Grails Web Features - 「Servlet 3.0 Async Features」までスクロールします)。おそらくDB経由でこれを調整する必要があり、おそらく結果ページでAJAXを介してポーリングして、結果がいつ来るかを確認する必要があります.

したがって、シーケンスは次のようになります。

  1. ユーザーがページ上のフォームからサーバーに検索要求を送信する
  2. サーバーはリクエストを追跡するために DB オブジェクトを作成して保存し、API 呼び出しを非同期的に開始して (つまり、リクエストがブロックされないように)、ページをユーザーに返します。
  3. 「保留中の結果」ページがユーザーに表示され、定期的な AJAX 更新を使用して結果の進行状況が確認されます。
  4. その間、API 呼び出しが実行されています。それらが返されると、できれば結果が返され、DB オブジェクト (より適切には関連オブジェクト) が更新され、呼び出しの結果とステータスが格納されます。
  5. 最終的にすべての結果が DB に格納され、結果を照会しているサーバーへの定期的な AJAX チェックにより、結果がページに返されるようになります。3 つの書店へのすべての呼び出しが完了するのを待つか、結果が返されたときにページを更新することができます。
  6. AJAX 呼び出しによってページが更新され、結果がユーザーに表示されます。

書店に API がない場合は、書店の Web サイトから直接結果を「Web スクレイピング」することを検討する必要があるかもしれません。Web ページは明らかに頻繁に変更されるため、これは少し難しく、非常に脆い場合があります。Geb ( http://www.gebish.org/ ) を使用してブラウジングを自動化し、必要なものを選択するための単純な文字列マッチングを行いました。また、スクレイピングが特に許可されていない場合もあるため、関連する Web サイトの利用規約を確認することを忘れないでください。

また、上記は、この種のことを達成するためのサーバー指向の方法であることに注意してください。AJAX を使用して Web サービスを呼び出し、JavaScript を介して処理することで、純粋にクライアント (ブラウザー) で実行できます。しかし、私はサーバーマンです:)

于 2012-04-12T10:53:37.933 に答える