`
flylynne
  • 浏览: 373622 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

sina获取实时股票数据

 
阅读更多
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()) + "毫秒");
	}
}

 

 

分享到:
评论

相关推荐

    java获取新浪股票信息

    本文将深入探讨如何使用Java语言从新浪获取股票信息,包括理解数据格式、解析数据以及利用这些信息进行进一步的处理或展示。 ### 一、理解新浪股票API 新浪财经提供了免费的股票数据接口,可以用来获取股票的实时...

    获取股票实时数据的接口Gdat

    GDAT 的核心功能在于其数据引擎,它能够快速地处理和分析大量股票数据,为用户构建个性化的选股策略提供强有力的支持。 **实时数据的重要性** 在股票投资领域,实时数据至关重要。由于股票市场的波动性,每分每秒...

    股票数据实时获取

    首先,让我们了解“股票数据实时获取”的基本概念。实时股票数据是指股票市场中最新的交易信息,如当前价、最高价、最低价、成交量等。这些数据不断更新,帮助投资者快速做出决策。为了获取这些数据,我们通常需要与...

    新浪、网易、腾讯实时tick接口_python股票_股票接口_新浪股票_tick股票_股票接口_源码.zip

    本文将详细介绍如何使用Python通过新浪、网易、腾讯提供的实时tick接口来获取股票数据,并探讨这些接口的工作原理以及如何利用这些数据进行股票分析。 首先,"tick数据"是股票市场交易中最小的数据单位,包括了股票...

    获取实时股票数据与股票数据接口API

    获取实时股票数据与股票数据接口API,如果你要同时查询多个股票,那么在URL最后加上一个逗号,再加上股票代码就可以了;比如你要一次查询大秦铁路(601006)和大同煤业(601001)的行情,就这样使用URL: ...

    VC++获取网上股市数据并实时图表显示的源代码

    该源代码项目是一个基于VC++的股票数据获取与实时图表显示的应用程序,使用了Visual Studio 2010进行开发。这个程序的核心功能是通过新浪网提供的股市接口,获取最新的股票市场数据,包括6个主要的大盘指数和50个...

    python获取新浪A股实时股票数据并实时画图

    通过不断调用新浪财经的API获取A股的实时数据,包括实时数据,最高最低价,昨日收盘价,买5,卖5的成交价,成交量等信息,并可以实时进行分时图的绘画。

    新浪、网易、腾讯实时tick接口_python股票_股票接口_新浪股票_tick股票_股票接口

    在金融数据分析领域,获取实时股票数据是至关重要的。在Python编程环境下,新浪、网易和腾讯等网站提供了API接口,使得开发者能够便捷地获取到股票的Tick数据。Tick数据是指股票市场中每一笔交易的最详细数据,包括...

    获取新浪股票信息的代码

    本示例主要关注如何通过编程方式从新浪财经获取股票数据。新浪作为国内知名的财经信息提供平台,提供了丰富的股票API接口供开发者使用。下面我们将深入探讨这个小例子中的关键知识点。 首先,我们需要了解新浪股票...

    新浪财经最新API获取实时行情数据后进行涨跌幅排序并对波动大的品种进行跟踪监测及预警的源代码

    最近学习Python进行量化交易,本资源是从新浪财经最新API接口获取期货秒级实时行情数据后,对开盘涨跌幅进行排序,选取涨跌幅最大的品种,另加自选3个品种进行实时监测,每隔2分钟对所有品种排一次序,然后再选涨...

    Matlab通过Yahoo与Sina获取历史与实时股票数据

    Matlab通过Yahoo与Sina获取历史与实时股票数据 inaYahooDataTest by LiYang Email:farutoliyang@gmail.com 2013/11/26 Contents A Little Clean Work 获取历史数据测试 获取实时数据测试 Record Time A Little ...

    C# 股票信息查询 sina股票接口

    本主题聚焦于使用C#来实现Sina股票信息的查询功能,这涉及到网络编程和数据处理的知识点。 首先,要从Sina股票接口获取信息,你需要了解HTTP请求和响应的工作原理。C#提供了多种方式来发送HTTP请求,如使用`System...

    股票行情实时数据接口-A股,完全免费的沪深证券股票数据-中国股市,python最简封装的API接口,包含日线,历史K线,分时线,分钟线,全部实时采集,系统包括新

    股票行情实时数据接口-A股,完全免费的沪深证券股票数据-中国股市,python最简封装的API接口,包含日线,历史K线,分时线,分钟线,全部实时采集,系统包括新浪腾讯双数据核心采集获取,自动故障切换,STOCK数据格式成...

    获取股票数据

    在IT行业中,获取股票数据是一项常见的任务,尤其对于金融分析师、投资者和开发人员来说,能够实时、准确地获取和分析股票数据是至关重要的。这里我们将深入探讨如何获取股票数据,并结合提供的“获取股票数据.xls”...

    实时股票数据接口大全.zip

    2. **请求和响应**:通过HTTP协议发送请求到服务器,获取股票数据的JSON或XML格式的响应。请求可能包括股票代码、日期范围等参数。 3. **数据字段**:不同的API可能会提供不同的数据字段,如股票代码、开盘价、收盘...

    Android项目源码基于新浪股票数据源的股市行情小软件.rar

    再者,标签中的“新浪”提示我们,该项目获取股票数据是通过新浪的API。新浪作为知名的财经信息提供者,提供了公开的股票数据接口供开发者使用。通过这些接口,应用可以实时获取到最新的股票数据,如开盘价、收盘价...

    获取股票实时价格

    在IT行业中,获取股票实时价格是一项常见的需求,特别是在金融数据分析和投资决策支持系统中。本项目通过调用新浪提供的接口来实现这一功能,对于个人投资者或者开发金融应用的程序员来说,具有很高的实用价值。下面...

Global site tag (gtag.js) - Google Analytics