sina获取实时股票数据

标签: sina 实时 股票 | 发表时间:2016-11-09 23:36 | 作者:flylynne
出处:http://www.iteye.com
package com.cmn;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Pattern;

import net.sf.json.JSONObject;

import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;

public class StockUtil {
	public static final int CONNECTTIMEOUT = 5000;
	public static final int READRESPONSETIMEOUT = 5000;
	public static final String UTF8 = "UTF-8";
	public static final String GBK = "GBK";


	public static boolean isNotBlank(Object b) {
		if (b == null) {
			return false;
		}
		String a = b.toString();
		if (a.equals("")) {
			return false;
		} else {
			return true;
		}
	}

	public static boolean isBlank(Object b) {
		if (b == null) {
			return true;
		}
		String a = b.toString();
		if (a.equals("")) {
			return true;
		} else {
			return false;
		}
	}

	public static boolean isTrue(Object b) {
		if (b == null) {
			return false;
		}
		String a = b.toString();

		if (a.equals("1") || a.equals("true")) {
			return true;
		}

		return false;
	}


	// regular pattern
	public static boolean regex(String str, String regex) {
		if (str == null) {
			return false;
		}
		Pattern pattern = Pattern.compile(regex);
		return pattern.matcher(str).matches();
	}


	public static String postUrl(String queryUrl, Map data) {
		Iterator e = data.keySet().iterator();
		StringBuffer a = new StringBuffer();
		while (e.hasNext()) {
			String key = (String) e.next();
			a.append(key).append("=").append(data.get(key)).append("&");
		}

		InputStream ips = getInputPostStream(queryUrl, a.toString());
		if (ips == null) {
			System.err.println("connect error, please check your connection!");
			return null;
		}
		String response = getResponse(ips, "utf-8");
		if (response == null) {
			System.err.println("connect error, please check your connection.");
			return null;
		} else {
			// System.out.println(response);
		}
		return response;
	}

	/**
	 * 从请求的URL中获取返回的数据流
	 * 
	 * @param requestUrl
	 * @return InputStream
	 */

	public static InputStream getInputStream(String requestUrl) {
		URL url = null;
		HttpURLConnection conn = null;
		InputStream in = null;
		try {
			url = new URL(requestUrl);
			conn = (HttpURLConnection) url.openConnection();
			// System.setProperty("sun.net.client.defaultConnectTimeout",
			// 超时毫秒数字符串);
			// System.setProperty("sun.net.client.defaultReadTimeout",
			// 超时毫秒数字符串);
			// setConnectTimeout:设置连接主机超时(单位:毫秒)
			conn.setConnectTimeout(5000);
			// setReadTimeout:设置从主机读取数据超时(单位:毫秒)
			conn.setReadTimeout(5000);
			// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 http正文内,因此需要设为true,
			// 默认情况下是false;
			conn.setDoOutput(true);
			// 设置是否从httpUrlConnection读入,默认情况下是true;
			conn.setDoInput(true);
			conn.setUseCaches(true);
			conn.setRequestMethod("GET");
			conn.connect();
			// 实际发送请求的代码段就在这里
			in = conn.getInputStream();
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		} finally {
			conn = null;
			url = null;
		}
		return in;
	}

	/**
	 * @description 从请求的URL中获取返回的数据
	 * @param requestUrl
	 * @param postParam
	 * @return
	 */
	public static InputStream getInputPostStream(String requestUrl, String postParam) {
		URL url = null;
		HttpURLConnection conn = null;
		InputStream in = null;
		try {
			url = new URL(requestUrl);
			URLConnection urlConn = url.openConnection();
			conn = (HttpURLConnection) urlConn;
			// setConnectTimeout:设置连接主机超时(单位:毫秒)
			conn.setConnectTimeout(30000);
			// setReadTimeout:设置从主机读取数据超时(单位:毫秒)
			conn.setReadTimeout(30000);
			// 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 http正文内,因此需要设为true,
			// 默认情况下是false;
			conn.setDoOutput(true);
			// 设置是否从httpUrlConnection读入,默认情况下是true;
			conn.getDoInput();
			// Post 请求不能使用缓存
			conn.setUseCaches(false);
			conn.setRequestMethod("POST");
			// 此处getOutputStream会隐含的进行connect(即:如同调用上面的connect()方法,
			// 所以在开发中不调用上述的connect()也可以)。
			OutputStream outStrm = conn.getOutputStream();
			// 向对象输出流写出数据,这些数据将存到内存缓冲区中
			outStrm.write(postParam.getBytes());
			// 刷新对象输出流,将任何字节都写入潜在的流中(些处为ObjectOutputStream)
			outStrm.flush();
			// 关闭流对象。此时,不能再向对象输出流写入任何数据,先前写入的数据存在于内存缓冲区中,
			// 在调用下边的getInputStream()函数时才把准备好的http请求正式发送到服务器
			outStrm.close();
			// 实际发送请求的代码段就在这里
			in = conn.getInputStream();
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		} finally {
			conn = null;
			url = null;
		}
		return in;
	}

	/**
	 * @description 将流数据转换成字符串
	 * @param ips
	 * @param codeFormat
	 * @return
	 */
	public static String getResponse(InputStream ips, String codeFormat) {
		StringBuffer sb = new StringBuffer();
		InputStreamReader isreader = null;
		try {
			isreader = new InputStreamReader(ips, codeFormat);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
			return null;
		}

		BufferedReader bufferedReader = new BufferedReader(isreader);
		String line = null;
		try {
			while ((line = bufferedReader.readLine()) != null) {
				sb.append(line);
			}
			bufferedReader.close();
			isreader.close();
			ips.close();
			ips = null;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
		return sb.toString();
	}

	/**
	 * 根据url调用web接口
	 * 
	 * @param url
	 *            访问地址, 必备参数
	 * @param method
	 *            请求方式post还是get, 默认get
	 * @param params
	 *            参数列表 post必备, 比如:"name=张三&age=18"
	 * @param sessionInfo
	 *            可以保持session, 默认不保持
	 * @param encoding
	 *            编码格式, 默认UTF_8
	 * @param isLine
	 *            得到的源码是否换行, 默认false
	 * @return String
	 */
	public static String requestUrl(String url, String method, String params, String sessionInfo, String encoding, boolean isLine) {
		try {
			encoding = (isBlank(encoding) ? UTF8 : encoding);
			method = (isBlank(method) ? "GET" : method.toUpperCase());
			String mathStr = "mathRandom=" + Math.random();
			if (method.equals("GET")) {
				url += (url.indexOf("?") != -1 ? "&" : "?") + mathStr;
				if (!isBlank(params)) {
					url += "&" + params;
				}
				System.out.println("url="+url);
			}
			HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
			if (!isBlank(sessionInfo)) {
				connection.setRequestProperty("Cookie", sessionInfo);
			}
			connection.setRequestMethod(method);
			connection.setConnectTimeout(15000);
			connection.setReadTimeout(15000);
			if (method.equals("POST")) {
				connection.setDoOutput(true);
				params = (isBlank(params) ? mathStr : params + "&" + mathStr);
				OutputStream output = connection.getOutputStream();
				output.write(params.getBytes(encoding));
				output.flush();
				output.close();
			}
			// String result = FileUtil.readFile(connection.getInputStream(),
			// encoding, 1, isLine);
			String result = getResponse(connection.getInputStream(), encoding);
			connection.disconnect();
			return result;
		} catch (Exception e) {
			System.out.println("根据url调用web接口" + e);
			e.printStackTrace();
		}
		return null;
	}

	public static void main(String[] args) {
		Date date = new Date();
		System.out.println(requestUrl("http://hq.sinajs.cn/list=sh601002 ", "GET", null, null, "GBK", false));
		System.out.println("本次调用web接口耗时" + (new Date().getTime() - date.getTime()) + "毫秒");
	}
}

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [sina 实时 股票] 推荐:

sina获取实时股票数据

- - 互联网 - ITeye博客
* 从请求的URL中获取返回的数据流. // setConnectTimeout:设置连接主机超时(单位:毫秒). // setReadTimeout:设置从主机读取数据超时(单位:毫秒). // 设置是否向httpUrlConnection输出,因为这个是post请求,参数要放在 http正文内,因此需要设为true,.

Sina股票数据接口

- - 互联网 - ITeye博客
以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据. 接口:http://hq.sinajs.cn/list=sh601006这个url会返回一串文本,例如:. var hq_str_sh601006="大秦铁路, 27.55, 27.25, 26.91, 27.55, 26.20, 26.91, 26.92,.

sina微博面试题

- - CSDN博客综合推荐文章
以下至少三个名词进行解释:. 请分别描述防范SqlInjection ,XSS,CSRF(或XSRF)攻击的关键要点. 请描述Mysql中varchar(2),int(9),int(11). Mysql的存储引擎,常用的MyIsAM,InnoDB. 正则表达式中贪婪和懒惰的区别,举例使用场景. 列出至少两种在不同程序间进行数据交互的通用格式(如XML),列出优缺点.

Sina App Engine与Google App Engine区别对比

- Chris - 互联网的那点事...
新浪推出了自己的云计算服务平台,和Google一样,都叫App Engine. 根据NIST的定义,Google App Engine属于PaaS平台型服务,那么它具体提供什么样的服务,新浪推出的Sina App Engine和Google的又有哪些区别呢. 云计算服务在Google、Amazon等公司成功产品的引领下,正在商业化的道路上大步向前.

编程:获取股票实时行情数据大全

- - 鲁塔弗的博客
股票软件都提供自定义公式的功能,但因为常规股票软件都是点播数据,自定义公式对分时行情完全无效,要想更细腻的分析,只能找股票实时行情接口. 一般来说,有如下3种版本. 去门户财经频道采集数据,百度,sina,搜狐,网易,和讯都有. 首推sina,页面结构良好,同时提供js接口和动态gif绘制. sina提供js data url 有很多,到sina网站上仔细研究即可.

获取股票实时交易数据的方法

- - 互联网 - ITeye博客
调用sina专门的js服务器来获得数据,速度飞快:. var hq_str_s_sh000001="上证指数,2289.791,-16.065,-0.70,599419,5529858";. var hq_str_s_sz399001="深证成指,9790.197,-59.573,-0.60,71142542,5714888";.

挖掘与分析网络中的个人“情绪”数据,股票雷达为用户判断股票走向提供实时支持

- - 36氪
早在2010年10月,国际知名学术网站arXiv.org刊登的一篇研究报告称,Twitter中的“镇定度”水平能够提前2至6天预测道琼斯工业平均指数的走向,并且准确度可达到87.6%. 到去年9月,伦敦投资公司Derwent Captial Markets启动一只总额为2500万英镑的基金,通过评价人们当前的心理状态,例如愉快、悲伤、焦虑和疲倦,来进行投资.

[水木特快] 女孩独行川藏遇害过程披露:疑犯劫财将其砸死 sina (转载)

- gavin - 水木社区 今日十大热门话题
发信人: liangxianfan (坚决|遏制|洗衣粉|价格|过快|上涨|势头), 信区: NewExpress. 标 题: 女孩独行川藏遇害过程披露:疑犯劫财将其砸死 sina. 发信站: 水木社区 (Mon Jul 4 11:35:00 2011), 站内. 【 以下文字转载自 Travel 讨论区 】.

股票API

- 狗尾草 - 博客园-首页原创精华区
股票数据的获取目前有如下两种方法可以获取:. http/javascript接口取数据. 1.http/javascript接口取数据. 以大秦铁路(股票代码:601006)为例,如果要获取它的最新行情,只需访问新浪的股票数据. 这个url会返回一串文本,例如:. var hq_str_sh601006="大秦铁路, 27.55, 27.25, 26.91, 27.55, 26.20, 26.91, 26.92, .

股票市场

- - 人月神话的BLOG
国内市场本质还是一个投机市场而没有价值投资,市场监管机制本身的不完善和信息的不对称性,注定了散户本身的弱势地位. 任何上涨时候的疯狂伴随的都是暴跌时候的毁灭,正是由于这个原因更应该要做到尊重市场和趋势,对市场时刻保持敬畏之心. 对于自己的判断要勇于认错,当持有的股票出现下跌时候,我们习惯性的是找寻支撑该股票上涨的理由或做着不合理的价值分析,即我们不断为自己错误的判断找理由而不是尊重趋势尽快的认错,最终而出现深度的套牢或者亏损,措施下次的机会.