ticker=bvsn
此处的ticker是 "键",bvsn是 "值"。键告诉接收者,值bvsn是一个股票代号。
如果在yahoo查看股票行情,你要发送这样的URL: http://finance.yahoo.com/q
以及两对键/值:
· s - 股票代号
· d - 查看级别(基本信息,详细信息等)
所以,想要查看bvsn,需要POST下面的消息: http://finance.yahoo.com/q?s=bvsn&d=v1
类似地,如果是Quicken的股票行情系统,你得发送这样的URL:http://www.quicken.com/investments/quotes/
以及一对键/值:
symbol - 股票代号
所以,在Quicken查看bvsn,需要POST下面的消息: http://www.quicken.com/investments/quotes/?symbol=bvsn
下面的代码是针对这两种Message的实现:
public class YahooStockQuote extends AbstractMessage {
private String _ticker;
private final static String _TICKER_KEY = "s";
private final static String _D_VALUE = "v1";
private final static String _D_KEY = "d";
public YahooStockQuote( String ticker )
{
_ticker = ticker;
}
public void setTicker( String ticker )
{
_ticker = ticker;
}
protected String [][] values()
{
String [][] values = {
{ _TICKER_KEY, _ticker },
{ _D_KEY, _D_VALUE }
};
return values;
}
}
以及:
public class QuickenStockQuote extends AbstractMessage
{
private String _ticker;
private final static String _TICKER_KEY = "symbol";
public QuickenStockQuote( String ticker )
{
_ticker = ticker;
}
public void setTicker( String ticker )
{
_ticker = ticker;
}
protected String [][] values()
{
String [][] values = {
{ _TICKER_KEY, _ticker }
};
return values;
}
}
这些Message只知道如何处理它们的数据以及构造二维 "键/值对" 数组。
程序示例
看看下面的股票信息示例程序:
public class QuoteGetter
{
public final static void main( String [] args )
{
if( args.length != 2 )
{
System.out.println( "Incorrect Useage:" );
System.out.println( "java QuoteGetter <quicken or yahoo> <TICKER>" );
return;
}
String service = args[0];
String ticker = args[1];
Message message = null;
MessageBus bus = null;
if( service.equalsIgnoreCase( "quicken" ) )
{
bus =
new HttpMessageBus( "http://www.quicken.com/investments/quotes/" );
message = new YahooStockQuote( ticker );
}
else // default to yahoo
{
bus =
new HttpMessageBus( "http://finance.yahoo.com/q" );
message = new QuickenStockQuote( ticker );
}
try
{
String response = sendMessage( message, bus );
System.out.println( response );
}
catch( Exception ignore )
{
System.out.println( "Lookup Failed for: " + ticker );
ignore.printStackTrace();
}
}
private static String sendMessage( Message message, MessageBus bus )
throws BusException
{
return message.send( bus );
}
}