一:查询接口使用聚合数据提供的免费接口,每天可以100次免费调用,点击https://www.juhe.cn/可以注册登录并免费使用接口。
二:因为我的目的是输出一个黄金种类的所有具体内容,所以具体实现代码一共分为三个类,每个类有一个方法
主函数
public class MainSocketRank
{
public static void main(String[] args) {
SocketUI Ui = new SocketUI(“上海黄金交易所”);
}
}
Encode的方法用来实现对远程返回的JSON处理,得到一个String
public class Encode
{
private static Map<String,String> map = new HashMap<>();
public static Map<String, String> encode(int n) {
UrlInter urlinter = new UrlInter();
String response = urlinter.doGet();
JSONObject jsonObject = JSON.parseObject(response);
String reason = jsonObject.getString("reason");
if(reason.equals("SUCCESSED!")) {
JSONArray ArrayResult = jsonObject.getJSONArray("result");
JSONObject varietyNum = null ;
switch(n) {
case 1: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("1");break;
case 2: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("2");break;
case 3: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("3");break;
case 4: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("4");break;
case 5: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("5");break;
case 6: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("6");break;
case 7: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("7");break;
case 8: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("8");break;
case 9: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("9");break;
case 10: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("10");break;
case 11: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("11");break;
case 12: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("12");break;
case 13: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("13");break;
case 14: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("14");break;
case 15: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("15");break;
case 16: varietyNum = JSON.parseObject(ArrayResult.get(0).toString()).getJSONObject("16");break;
default :break;
}
String variety = varietyNum.getString("variety");
String latestpri = varietyNum.getString("latestpri");
String openpri = varietyNum.getString("openpri");
String maxpri = varietyNum.getString("maxpri");
String minpri = varietyNum.getString("minpri");
String limit = varietyNum.getString("limit");
String yespri = varietyNum.getString("yespri");
String totalvol = varietyNum.getString("totalvol");
String time = varietyNum.getString("time");
/*console所使用的输出形式
System.out.printf("种类:%s%n", variety);
System.out.printf("最新价:%s%n", latestpri);
System.out.printf("开盘价:%s%n", openpri);
System.out.printf("最高价:%s%n", maxpri);
System.out.printf("最低价:%s%n", minpri);
System.out.printf("涨跌幅:%s%n", limit);
System.out.printf("昨收价:%s%n", yespri);
System.out.printf("总成交量:%s%n", totalvol);
System.out.printf("更新时间:%s%n", time);
*/
//UI所使用的输出形式,如果需要用console输出,则需要将方法的返回值改成void
map.put("variety", variety);
map.put("latestpri", latestpri);
map.put("openpri", openpri);
map.put("maxpri", maxpri);
map.put("minpri", minpri);
map.put("limit", limit);
map.put("yespri", yespri);
map.put("totalvol", totalvol);
map.put("time", time);
}
else {
System.out.printf("未找到所给种类");
}
return map;
}
}
用来远程获取数据返回字符串(因为我写这个是课上作业需要,所以在编写时借鉴了大佬的代码,侵删DDwyane)
public class UrlInter
{
private static String APP_KEY = “****”;//你的KEY
private static String APP_URL = “http://web.juhe.cn:8080/finance/gold/shgold”;
public static String doGet()
{
HttpURLConnection connection = null;
InputStream inputStream = null;
BufferedReader bufferedReader = null;
String result = null;
// 创建远程url连接对象
URL url;
try
{
url = new URL(new StringBuffer(APP_URL).append("?key=").append(APP_KEY).toString());
// 通过远程url连接对象打开一个连接,强转成httpURLConnection类
connection = (HttpURLConnection) url.openConnection();
// 设置连接方式:get
connection.setRequestMethod("GET");
// 设置连接主机服务器的超时时间:15000毫秒
connection.setConnectTimeout(5000);
// 设置读取远程返回的数据时间:60000毫秒
connection.setReadTimeout(6000);
// 发送请求
connection.connect();
// 通过connection连接,获取输入流
if (connection.getResponseCode() == 200) {
inputStream = connection.getInputStream();
// 封装输入流,并指定字符集
bufferedReader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
// 存放数据
StringBuilder sbf = new StringBuilder();
String temp;
while ((temp = bufferedReader.readLine()) != null) {
sbf.append(temp);
sbf.append(System.getProperty("line.separator"));
}
result = sbf.toString();
}
} catch (IOException e)
{
e.printStackTrace();
}finally {
// 关闭资源
if (null != bufferedReader) {
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != inputStream) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (connection != null) {
connection.disconnect();// 关闭远程连接
}
}
return result;
}
}