はじめに
おはようございます。当ブログにアクセス頂き、ありがとうございます。好きな言語は?と聞かれたら、Clojureと即答する、たなけんです。本エントリでは、プレゼンテーション層とアプリケーション層とをつなぐ、クライアント向けインターフェースの実装について記載します。クライアント向けインターフェースの実装(2)
前回リストアップした以下の項目に従い、各関数を修正します。- interface-for-clientへのリクエストの処理を追加
- 関数を引数に取り、抽出結果のJSON文字列を生成する関数の追加
- 利用APIに対応した抽出関数の追加
interface-for-clientへのリクエストの処理
urlリソースと関数を関連付けます。例えば、http://localhost/dictionary/testへアクセスすると、引数のwordに"test"が拘束された状態で、call-apiが呼び出されます。
- compojure.core/defroutesマクロ: urlリソースを定義
- compojure.core/GETマクロ: http GETメソッドによりアクセスされる節を構成
- call-api関数: url、パラメータリストおよび抽出関数を引数に取り、JSON文字列を生成
抽出結果のJSON文字列を生成する関数
抽出関数を引数に取り、Dictionary.comから取得したxmlから必要な情報を抽出した結果のJSON文字列を生成します。
- ->マクロ: 左の関数を評価した結果を右の関数の引数とし、順次関数を実行
- build-url-with-prms関数: urlパラメータのリストからurl文字列を生成
- get-body関数: 引数のurlへhttpリクエストを送信し、そのhttpレスポンスのbody要素を取得
- extract-function(引数): 関数呼び出し時に指定される抽出関数
- clj-json.core/generate-string関数: clojureオブジェクトをJSON文字列に変換
抽出関数
xpathによりxmlからノードを取得し、さらにそこから指定した要素を抽出します。
- safety-xpath-call関数: xpathによりxmlからノードを取得する。指定したxpathが取得出来なかった場合、handle-exception関数を呼び出す
- get-result関数: safety-xpath-call関数により取得したxmlノード(ネストした状態のハッシュ
- )から、順にキーを指定して、求める値を取得する
- get-query-word関数: xml内に含まれる、問い合わせ単語を取得する。具体的にはxpathが(/*)[1]のノードから、キー:attrs :queryの値を取得する。
- extract-dictionary関数: 英英辞書APIから取得したxmlから、問い合わせ単語と定義を抽出する。
- extract-example関数: 例文辞書APIから取得したxmlから、問い合わせ単語と例文を抽出する。
- extract-random関数: ランダムAPIから取得したxmlから、単語を抽出する。
- extract-spelling関数: 綴り時APIから取得したxmlから、問い合わせ単語と綴り字の候補を抽出する。
今回の作業は以上。最後までお読み頂きありがとうございました。
たなけん (作業時間120分)
0 件のコメント:
コメントを投稿