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语言从新浪获取股票信息,包括理解数据格式、解析数据以及利用这些信息进行进一步的处理或展示。 ### 一、理解新浪股票API 新浪财经提供了免费的股票数据接口,可以用来获取股票的实时...
GDAT 的核心功能在于其数据引擎,它能够快速地处理和分析大量股票数据,为用户构建个性化的选股策略提供强有力的支持。 **实时数据的重要性** 在股票投资领域,实时数据至关重要。由于股票市场的波动性,每分每秒...
本文将详细介绍如何利用Sina提供的HTTP/JavaScript接口来获取股票数据,并提供一些示例代码来帮助理解整个过程。 #### 二、HTTP/JavaScript接口取数据 ##### 1.1 Sina股票数据接口 Sina提供了多种方式来获取股票...
本示例主要关注如何通过编程方式从新浪财经获取股票数据。新浪作为国内知名的财经信息提供平台,提供了丰富的股票API接口供开发者使用。下面我们将深入探讨这个小例子中的关键知识点。 首先,我们需要了解新浪股票...
首先,让我们了解“股票数据实时获取”的基本概念。实时股票数据是指股票市场中最新的交易信息,如当前价、最高价、最低价、成交量等。这些数据不断更新,帮助投资者快速做出决策。为了获取这些数据,我们通常需要与...
本文将详细介绍如何使用Python通过新浪、网易、腾讯提供的实时tick接口来获取股票数据,并探讨这些接口的工作原理以及如何利用这些数据进行股票分析。 首先,"tick数据"是股票市场交易中最小的数据单位,包括了股票...
获取实时股票数据与股票数据接口API,如果你要同时查询多个股票,那么在URL最后加上一个逗号,再加上股票代码就可以了;比如你要一次查询大秦铁路(601006)和大同煤业(601001)的行情,就这样使用URL: ...
该源代码项目是一个基于VC++的股票数据获取与实时图表显示的应用程序,使用了Visual Studio 2010进行开发。这个程序的核心功能是通过新浪网提供的股市接口,获取最新的股票市场数据,包括6个主要的大盘指数和50个...
在金融数据分析领域,获取实时股票数据是至关重要的。在Python编程环境下,新浪、网易和腾讯等网站提供了API接口,使得开发者能够便捷地获取到股票的Tick数据。Tick数据是指股票市场中每一笔交易的最详细数据,包括...
通过不断调用新浪财经的API获取A股的实时数据,包括实时数据,最高最低价,昨日收盘价,买5,卖5的成交价,成交量等信息,并可以实时进行分时图的绘画。
最近学习Python进行量化交易,本资源是从新浪财经最新API接口获取期货秒级实时行情数据后,对开盘涨跌幅进行排序,选取涨跌幅最大的品种,另加自选3个品种进行实时监测,每隔2分钟对所有品种排一次序,然后再选涨...
最近学习Python进行量化交易,第一步是获取实时行情数据,本资源是从新浪财经API接口获取期货实时行情数据的Python源代码(本代码获得的数据不再仅是5分钟行情数据,而是秒级行情更新,行情刷新间隔视网速及获取品种...
Matlab通过Yahoo与Sina获取历史与实时股票数据 inaYahooDataTest by LiYang Email:farutoliyang@gmail.com 2013/11/26 Contents A Little Clean Work 获取历史数据测试 获取实时数据测试 Record Time A Little ...
本文将深入探讨如何利用Python来对接新浪、网易、腾讯的实时tick接口,以便获取股票数据。Tick数据是指股票交易中最小的时间单位,包含了每笔交易的详细信息,如价格、数量、买卖方向等。这些接口对于进行高频交易、...
通过以上步骤,我们可以使用 Delphi Xe10 中的 Indy 库轻松地从新浪股票 API 获取股票行情数据。这种方法不仅简单易用,而且适用于各种规模的应用程序。此外,还可以根据实际需求扩展代码,比如添加错误处理机制、...
本主题聚焦于使用C#来实现Sina股票信息的查询功能,这涉及到网络编程和数据处理的知识点。 首先,要从Sina股票接口获取信息,你需要了解HTTP请求和响应的工作原理。C#提供了多种方式来发送HTTP请求,如使用`System...
新浪股票数据接口API是开发者获取实时股票市场信息的重要工具,尤其对于进行数据分析、金融建模或者开发相关应用的人员来说,它提供了丰富的股票数据来源。本文将详细介绍如何使用新浪股票数据接口,以及它能提供的...
股票行情实时数据接口-A股,完全免费的沪深证券股票数据-中国股市,python最简封装的API接口,包含日线,历史K线,分时线,分钟线,全部实时采集,系统包括新浪腾讯双数据核心采集获取,自动故障切换,STOCK数据格式成...