DDE for Javaで楽天RSS
JavaPartのツールでサンプルを作ってみた。
DDE for Javaで楽天RSSのDDEサーバと通信するコード。こんな感じ。
サービスがRSS、トピックが銘柄コード(+市場コード)、アイテムが現在値とか出来高とかになるらしい。
コールドリンクは、
Conversation#requestの戻り値に値がかえってきて、
ホットリンクは
Conversation#startAdviceで取得を開始し、値は変更されたときにDDEEventListenerに通知される。
なお、ツール付属サンプルの他に、以下の記事を参考にしました。
C#+オリジナルdllですが、サンプルおよび解説がわかりやすい。
DdeUtils サンプル解説
http://blog.livedoor.jp/motta500/archives/cat_50035390.html
import java.util.ArrayList;
import java.util.List;import com.javaparts.dde.AsyncCompletedEvent;
import com.javaparts.dde.Conversation;
import com.javaparts.dde.DDEClient;
import com.javaparts.dde.DDEEvent;
import com.javaparts.dde.DDEEventListener;
import com.javaparts.dde.ItemChangedEvent;public class RssDdeSample {
public static void main(String[] args) throws Exception {
DDEClient client = DDEClient.getInstance();
Listconversations = new ArrayList (); try {
client.addDDEEventListener(new DDEEventListener(){@Override
public void onAsyncCompleted(AsyncCompletedEvent arg0) {
System.out.println("onAsyncCompleted");
}@Override
public void onDisconnect(DDEEvent arg0) {
System.out.println("onDisconnect");
}@Override
public void onItemChanged(ItemChangedEvent event) {
System.out.println("Topic=" + event.getConversation().getTopic()
+ ",ItemName=" + event.getItemName()
+ ",ItemValue=" + new String(event.getItemValue()));
}});
String[] codes = new String[]{
"4751.T",
"2337.OJ"
};
String[] names = new String[]{
"銘柄名称",
"現在値",
"出来高",
};
for (String code : codes) {
Conversation conversation = client.connect("RSS", code);
for (String name : names) {
//コールドリンクで値を取得
byte[] value = conversation.request(name, 1000 * 10);
System.out.println("result,topic=" + code
+ ",name=" + name + ",value=" + new String(value));
//ホットリンクで値を取得。結果はリスナーに通知
conversation.startAdvice(name);
}
conversations.add(conversation);
}
System.in.read();//何か待機処理
} finally{
for (Conversation conversation : conversations) {
try {conversation.close();} catch (Exception ignore) {}
}
client.close();
}
System.out.println("end");
}
}