package me.bell;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
public class HttpUtil {
/**
* 正常访问股票数据(重复请求)
*
* @param stockID
* @return
* @throws IOException
*/
public static ArrayList<StockData> StockHttp(String stockID) throws IOException {
String result = httpRequest(stockID);
if (result.length() > 0) {
return getCurrentStock(result);
} else {
return null;
}
}
/**
* 判断股票代码是否存在 返回正确的代码
*
* @param code
* @return
* @throws IOException
*/
public static boolean verifyCode(String code) {
try {
String result = httpRequest(code);
/*if (!result1.contains("FAILED") && !result1.endsWith("=")) {
return code;
}
String result2 = httpRequest("sh" + code);
if (!result2.contains("FAILED") && !result2.endsWith("=")) {
return "sh" + code;
}
String result3 = httpRequest("sz" + code);
if (!result3.contains("FAILED") && !result3.endsWith("=")) {
return "sz" + code;
}*/
if (!result.contains("\"results\":[]")) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
/**
* 处理网页返回的股票数据
*
* @param result
* @return
*/
public static ArrayList<StockData> getCurrentStock(String result) {
try {
ArrayList<StockData> list = new ArrayList<>();
JSONObject jsonObject = JSONObject.parseObject(result);
JSONArray jsonArray = jsonObject.getJSONArray("results");
if (jsonObject.getIntValue("errorNo") == 0 && null != jsonArray) {
for (int i = 0; i < jsonArray.size(); i++) {
JSONArray subArray = jsonArray.getJSONArray(i);
StockData data = new StockData();
data.setName(String.valueOf(subArray.get(0)));
data.setCode2(String.valueOf(subArray.get(1)));
data.setPrice(getBigDecimal(subArray.get(2)));
data.setMax(getBigDecimal(subArray.get(3)));
data.setMin(getBigDecimal(subArray.get(4)));
data.setCode1(String.valueOf(subArray.get(9)));
data.setEarn(getBigDecimal(subArray.get(11)));
data.setPercent(getBigDecimal(subArray.get(12)));
list.add(data);
}
// System.out.println(JSON.toJSONString(list));
}
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static BigDecimal getBigDecimal(Object value) {
BigDecimal ret = null;
if (value != null) {
if (value instanceof BigDecimal) {
ret = (BigDecimal) value;
} else if (value instanceof String) {
ret = new BigDecimal((String) value);
} else if (value instanceof BigInteger) {
ret = new BigDecimal((BigInteger) value);
} else if (value instanceof Number) {
ret = new BigDecimal(((Number) value).doubleValue());
} else {
throw new ClassCastException("Not possible to coerce [" + value + "] from class " + value.getClass() + " into a BigDecimal.");
}
}
return ret;
}
/**
* 请求网页内容
*
* @param stockID
* @return
* @throws IOException
*/
public static String httpRequest(String stockID) throws IOException {
// URL url = new URL("http://hq.sinajs.cn/format=text&list=" + stockID); // sz000838
URL url = new URL("https://hq.cmschina.com/market/json?funcno=20000&version=1&stock_list=" + stockID);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Content-type", "application/json; charset=UTF-8");
InputStream inputStream = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(inputStream, "utf-8");// 添加这一句话设置相应编码格式
BufferedReader br = new BufferedReader(isr);
String temp = null;
String result = "";
while ((temp = br.readLine()) != null) {
result += temp;
}
return result;
}
}