Newer
Older
stockTray / stock_new / src / me / bell / HttpUtil.java
ubt on 25 May 2018 3 KB stock new
package me.bell;


import com.alibaba.fastjson.JSON;
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;
import java.util.List;

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