Scala 勉強中なのでXML操作やパターンマッチングなどをATND APIを使って試してみた。

キーワード・イベント開催年月・イベント開催年月日を検索条件にすることができるようにして、
返ってきたXMLからタイトル、開始日時、開催場所を標準出力するようにしてみた。
引数を複数渡して、yyyyMM形式ならymパラメータに、yyyyMMdd形式ならymdパラメータに、
どちらにもマッチしないならkeywordパラメータに渡すことにした。
(数値が6個か、8個かでパターンマッチングしているので厳密には正しい日付かどうかチェックできていないけど)
javax.script.ScriptEngine でこういう使い方もできたのか、というメモ。
まずは普通の(?)使い方として、 JavaScript のトップレベル関数を呼ぶにはこうする。
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
engine.eval("function increase(num) { return num + 1; }");
System.out.println(((Invocable) engine).invokeFunction("increase", 10));
javax.script.Invocable#invokeFunction(String, Object...) は、
(当たり前だけど)引数や戻り値は全て java.lang.Object でやりとりする。

そこで、今回の話。
Java 側でインターフェースを切って、それをスクリプト言語側で実装するということができる。
Axis 編
普通にアクセスしようとすると以下のエラーが出る。
Exception in thread "main" AxisFault
 faultCode: {http://xml.apache.org/axis/}HTTP
 faultSubcode: 
 faultString: (401)Unauthorized
 faultActor: 
 faultNode: 
 faultDetail: 
    {}:リターンコード:  401
NTLM 認証対応と全く同じ方法でBasic 認証, Digest 認証ともに対応できた。
ちなみに Basic 認証の場合のみ、commons-httpclient のエンジンを使わなくてもいいようだ。
API キー・共通鍵の入手
まずは Apply for a non-commercial API Key で API キーを発行してもらうための申請を行う。
必要事項を入力して [Apply] を押下すると程なくして API キーと共通鍵がメールで送られてくる。
認証の流れ
User Authentication を参照し、認証の流れを把握する。
今回はデスクトップアプリケーションでの認証を行おうとしているが、
まず frob という文字列を rtm.auth.getFrob で入手する必要があるようだ。
次に API キー, パーミッション, frob, 署名文字列認証用をパラメータに指定して認証 URL を生成し、
そこにアクセスして認証を完了する。
認証完了後、rtm.auth.getToken から認証トークンが取得できる。
…ためには色々面倒な実装が必要なのかと調べてみれば、実はそうでもなかった、というお話。
NTLM 認証の設定
IIS マネージャでファイルもしくはディレクトリのプロパティを開き、
[ディレクトリセキュリティ(ファイルセキュリティ)] -> 認証とアクセス制御の[編集] ->
[匿名アクセスを有効にする]のチェックを外し、[総合 Windows 認証]にチェックを入れる。
この状態でブラウザからアクセスするとユーザ名、パスワードを入力させる認証ダイアログが表示される。
以前書いたDropbox Java API で遊ぶ(移転前URL)にリンクを張っていただいている記事があった。
getFileStreamメソッド付近でパラメータの「rev」で検索すると、上図にもわかるようにヒットしない(青色マークされない)=実装されてない!ずこーー 試行錯誤ログ: DropboxのJava版APIで過去リビジョンのファイルを取得できない現象について
なんと…その通り DropboxAPI#getFile(), DropboxAPI#getFileStream() の引数 rev は内部で使用されておらず、
リビジョンを指定して過去のファイルをダウンロードできないようだ。
どうにしかして今の SDK でもリビジョンを指定してダウンロードできるようワークアラウンドコードを書けないものか。
ちょっとした必要に迫られて XML を Java クラスにバインディングしてくれるツールについて調べた事の覚え書き。
JAXB
何かのライブラリとかツール群の中に同梱されているのは何度か見かけたけど、
自分で使ってみたのは初めてだったので手順をメモっとこう。
  1. 扱いたい XML の構造が分かっている場合、まず XML Schema を作成する。
  2. XML Schema から Java のクラスを生成する。
  3. 扱いたい XML をアンマーシャルして Java クラスにバインディング。
Java ライブラリからデータの操作をしてみる。
Java ドライバのダウンロード
MongoDB - Java Language Center の「Download the Java Driver」からダウンロードする。
(現在時点の最新バージョンは mongo-2.7.2.jar だった)
接続
ホスト名、ポート番号を指定して com.mongodb.Mongo を作成し(指定しない場合はローカルホストの27017が使用される)、
com.mongodb.Mongo#getDB() でDB名を指定して com.mongodb.DB オブジェクトを取得する。
この時点ではホスト名、ポート番号、DB 名が誤っていてもエラーは発生しない。
DB オブジェクトを使用したデータの操作の際にエラーが発生する。

Copyright© 2011-2021 Shunsuke Otani All Right Reserved .