再度、wikipedia apiを使ってみたい。- Java + axis2 2010/09/01

プログラマメモ2: wikipedia apiを使ってみたい。- Java + axis2

Javaです。二年前の記事ですが、もう一度チャレンジです。
僕の環境はmac osxでJava1.6です。Eclipseベースで行ってます。

workspaceに、空のJavaプロジェクトを作成して、libフォルダを作成して、Axis2を解凍しておいておきます。
今回使ったのは、1.5.1です。



Apache Axis2 -


ついでにaxis2のlibにあるjarをとりあえず全部、buildpathにaddしておきます。
ほんとは、必要なものだけで選んでおきたいけど...



プロジェクト内にworkフォルダを用意してそこでWSDLからJavaのソースコード生成します.

ターミナル(windowsならコマンドプロンプト?)で、下の命令を実行

../lib/axis2-1.5.1/bin/wsdl2java.sh -uri http://dev.wikipedia-lab.org/WikipediaOntologyAPIv3/Service.asmx?WSDL -p wikipediaapi


-p指定で、wikipediaapiとします。
今回はパッケージをwikipediaapiとしてみました。
あと環境変数JAVA_HOMEは設定してないといけないです。

あと、ワーニングがでてきますが、気にしないで、前にすすみます。



eclipseでみると下のような感じ

できたソースをeclipseのビルドパスに含めてしまいます。
で、下の感じ。

これで生成できたので、あとは利用するだけです。
ちょっとしたtipsですが、生成されたソースフォルダと自分で作成するソースのフォルダをeclipseで別々にしておくと、
いろいろあとから変更しやすくなります。

サンプルコード

package wikipediaapi;

import java.rmi.RemoteException;

import org.apache.axis2.databinding.ADBException;
import org.apache.axis2.databinding.types.UnsignedInt;

import wikipediaapi.ServiceStub.GetThesaurusDS;
import wikipediaapi.ServiceStub.GetThesaurusDSResponse;
import wikipediaapi.ServiceStub.GetTopCandidateIDFromKeyword;
import wikipediaapi.ServiceStub.GetTopCandidateIDFromKeywordResponse;

public class Test {

public static void main(String[] args) throws RemoteException, ADBException {

String[] keywords = { "侍", "apple", "google", "o_o!" };
for (String k : keywords) {
System.out.println(b(a(k)));
}
}

static int a(String skeyword) throws RemoteException {
ServiceStub serviceStub = new ServiceStub();

GetTopCandidateIDFromKeyword keyword = new GetTopCandidateIDFromKeyword();
keyword.setKeyword(skeyword);
keyword.setLanguage("Japanese");

GetTopCandidateIDFromKeywordResponse response = serviceStub
.getTopCandidateIDFromKeyword(keyword);

return response.getGetTopCandidateIDFromKeywordResult().intValue();
}

static String b(int i) throws RemoteException {

ServiceStub serviceStub = new ServiceStub();

GetThesaurusDS getThesaurusDS = new GetThesaurusDS();
getThesaurusDS.setLanguage("Japanese");
getThesaurusDS.setIFrom(new UnsignedInt(i));

GetThesaurusDSResponse response = serviceStub
.getThesaurusDS(getThesaurusDS);

return "" + response.localGetThesaurusDSResult.localExtraElement;
}

}

: