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;
}
}