`
shanyuxiyun
  • 浏览: 11413 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

java 获取sina股票信息

    博客分类:
  • j2se
阅读更多
package com.lee.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 
 * @author Don.W.Lee
 * @version 1.0
 * @since 2012-03-29
 *
 */
public class SinaStock {
	private static String db  = "C:\\Documents and Settings\\Administrator\\桌面\\sina-stock-codes.txt" ;
	private static final int COLUMNS = 32;
	private static List<String> codes = new ArrayList<String>() ;
	
	static{
		File in = new File(db) ;
		if(! in.exists()){
			// 从网络获取
			if(codes.size() < 1 )
				try {
					codes = getAllStackCodes() ;
				} catch (IOException e) {
					e.printStackTrace();
				}
		}else{
			// 从本地获取
			if(codes.size() < 1)
				try {
					codes = getAllStockCodesFromLocal() ;
				} catch (IOException e) {
					e.printStackTrace();
				}
		}
	}
	
	// 解析一组股票代码字符串   把code中包括的所有股票代码放入List中
	private static List<String> handleStockCode(String code){
		List<String> codes = null ;
		int end = code.indexOf(";") ;
		    code = code.substring(0,end) ;
		int start = code.lastIndexOf("=") ;
		   code = code.substring(start) ;
		   code = code.substring(code.indexOf("\"")+1,code.lastIndexOf("\"")) ;
		   codes = Arrays.asList(code.split(",")) ;
		return codes ;
	}
	
	//   返回的值是一个js代码段  包括指定url页面包含的所有股票代码
	private static String getBatchStackCodes(URL url) throws IOException{
	 	 URLConnection connection = url.openConnection() ;
		 connection.setConnectTimeout(30000) ;
		 BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())) ;
		 String line = null ;
	   	 StringBuffer sb = new StringBuffer() ;
		boolean flag =false ;
		 while((line = br.readLine()) != null ){
			 if(line.contains("<script type=\"text/javascript\">") || flag){
				 sb.append(line) ;
				 flag = true ;
			 }
			 if(line.contains("</script>")){
				 flag =false ;
				 if(sb.length() > 0 ){
					 if(sb.toString().contains("code_list") && sb.toString().contains("element_list")){
						 break ;
					 }else{
						 sb.setLength(0) ;
					 }
				 }
			 }
		 }
		 if(br != null ){
			 br.close() ;
			 br= null ;
		 }
		return sb.toString() ;
	}
	
	// 获取新浪38也的所有股票代码
	private static List<String> getAllStackCodes() throws IOException{
		List<String> codes = new ArrayList<String>() ;
		int i =1 ;
		URL url = null ;
		// 新浪 股票 好像目前为止就 38页
		for(; i < 39 ; i ++ ){
			 url = new URL("http://vip.stock.finance.sina.com.cn/q/go.php/vIR_CustomSearch/index.phtml?p="+i) ;
			 String code = getBatchStackCodes(url) ;
			 codes.addAll(handleStockCode(code)) ;
		}
		if(! ( new File(db) ).exists() )
			saveStockCodes(codes) ;
		return codes ;
	}
	
	//把新浪38页的所有股票代码存入本地文件
	private static void saveStockCodes(List<String> codes ) throws IOException{
		//将所有股票代码存入文件中
		File out = new File(db) ;
		if(! out.exists())
			out.createNewFile() ;
		BufferedWriter bw = new BufferedWriter(new FileWriter(out)) ;
		for(String code : codes ){
			bw.write(code) ;
			bw.newLine() ;
		}
		if(bw != null ){
			bw.close() ;
			bw = null ;
		}
	}
	
	private static List<String> getAllStockCodesFromLocal() throws IOException{
		List<String> codes = new ArrayList<String>() ;
		File in = new File(db) ;
		if(! in.exists())
			throw new IOException("指定数据文件不存在!");
		BufferedReader br = new BufferedReader(new FileReader(in)) ;
		String line = null ;
		while( ( line = br.readLine() ) != null ){
			codes.add(line) ;
		}
		// 删除最后一个空行
		codes.remove(codes.size()-1) ;
		if(br != null ){
			br.close() ;
			br = null ;
		}
		return codes ;
	}
	
	public static String[]  getStockInfoByCode(String stockCode) throws IOException{
		// 仅仅打印
		 String[] stockInfo = new String[COLUMNS] ; 
		 URL url = new URL("http://hq.sinajs.cn/?list="+stockCode) ;
		 URLConnection connection = url.openConnection() ;
		 connection.setConnectTimeout(16000) ;
		 BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())) ;
		 String line = null ;
		 StringBuffer sb = new StringBuffer() ;
		 while(( line = br.readLine()) != null ){
			 sb.append(line) ;
		 }
		 if(sb.length() > 0 ){
			 String rs = sb.toString() ;
			 rs = rs.substring(rs.indexOf("\"")+1,rs.lastIndexOf("\"")) ;
			 String[] rss = rs.split(",") ;
			 for(int i = 0 ;  i< rss.length ; i ++ ){
				 System.out.print(rss[i]+"\t|");
				 stockInfo[i] = rss[i];
			 }
			 System.out.println("\n------------------------------------"); 
		 }
		 return stockInfo ;
	}
	
	public static void getAllStockInfo() throws IOException{
		String[] header = getHeaders() ;
		System.out.println(header.length);
		for(int i = 0 ; i < header.length ;  i++ ){
			System.out.print(header[i]+"\t|");
		}
		for(String code : codes ){
			getStockInfoByCode(code) ;
		}
	}
	
	/**
	 * 
	 * @param first 从0开始
	 * @param last  不包括 last
	 * @return
	 */
	public static List<String[]> getStockInfo(int first , int last , int recoeds)throws Exception{
		List<String[]> stockInfo = new ArrayList<String[]>() ;
		first = first < 0 ? 0 : first ;
		if(first > last )
			throw new Exception("参数不合法!") ;
		int i = 0 ;
		while(last > codes.size()  ){
			if(first + recoeds < codes.size()+1 ){
				last = first +  recoeds ;
				break ;
			}else{
				last = first + recoeds +(--i) ;
			}
		}
		for( i = first ; i <= last ; i ++ ){
			stockInfo.add(getStockInfoByCode(codes.get(i))) ;
		}
		return stockInfo ;
	}
	
	public static String[] getHeaders(){
		String[] header = {"股票名字","今日开盘价	","昨日收盘价","当前价格","今日最高价","今日最低价","竟买价","竞卖价","成交的股票数","成交金额(元)","买一","买一","买二","买二","买三","买三","买四","买四","买五","买五","卖一","卖一","卖二","卖二","卖三","卖三","卖四","卖四","卖五","卖五","日期","时间"} ;
		return header ;
	}	
	
	public static List<String> getStockCodes(){
		return codes ;
	}
	public static void main(String[] args) {
		try {
			getAllStockInfo() ;
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
[align=left][/align]
分享到:
评论

相关推荐

    java获取新浪股票信息

    ### 一、理解新浪股票API 新浪财经提供了免费的股票数据接口,可以用来获取股票的实时行情。通过访问特定的URL,如`http://hq.sinajs.cn/list=sz000723`,我们可以得到股票的详细信息。这些信息以字符串形式返回,...

    java股票实时查询小软件

    【Java股票实时查询小软件】是一款利用JavaFX技术构建用户界面,通过访问新浪博客的URL获取股票实时数据的简易应用。这款软件的核心功能是展示股票信息,并允许用户点击每条股票数据来查看对应的股价走势。下面我们...

    股票价格查询 java swing 小程序

    该程序利用了新浪提供的股票接口,能够获取实时或历史的股票数据,并在用户界面上展示股票的名称、交易时间以及相应的价格。 【描述】描述中提到,这个小程序的亮点在于其用户友好的图形界面,用户可以直观地看到...

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

    该Android项目源码是开发一个基于新浪股票数据源的股市行情小软件的实例,主要涉及的技术栈包括Android、Java和Apache HTTP库。这个项目对于学习Android应用开发,特别是与网络数据交互的开发者来说,是非常有价值的...

    Java从网络获取股票实时数据,2种方法webservice和javascript.docx

    新浪提供了免费的股票数据接口,用于获取股票的实时行情。下面以大秦铁路(股票代码:601006)为例介绍具体的使用方法: - **访问地址**:`http://hq.sinajs.cn/list=sh601006` - **返回结果示例**: - "大秦铁路...

    股票数据实时获取

    以下是一个简单的Python示例,展示了如何使用requests库获取新浪股票的实时数据: ```python import requests import json def get_stock_data(stock_code): url = "http://hq.sinajs.cn/list=" + stock_code ...

    新浪股票数据借口

    新浪股票数据接口API是开发者获取实时股票市场信息的重要工具,尤其对于进行数据分析、金融建模或者开发相关应用的人员来说,它提供了丰富的股票数据来源。本文将详细介绍如何使用新浪股票数据接口,以及它能提供的...

    基于新浪股票接口的Android股票查询系统

    - **新浪接口介绍**:新浪股票接口提供了实时股票数据,开发者通过API调用获取所需信息,如股票报价、历史数据等。 - **主界面各控件功能的实现**:包括搜索框、列表视图,以及与服务器交互的逻辑。 - **股票详细...

    新浪股票Demo源码

    新浪股票Demo源码是针对股票数据获取和分析的一个示例程序,它为开发者提供了一种便捷的方式去理解如何通过编程接口(API)获取实时和历史的股票市场数据。这篇解析将深入探讨这个Demo的结构、功能以及其在实际开发...

    实时股票查询系统

    实时股票查询系统是一种基于Java开发的应用程序,专用于在Eclipse平台上实时获取并展示股票市场数据。这个系统利用了JavaFx作为用户界面框架,提供直观且动态的交互体验。JavaFx是一个强大的图形库,允许开发者创建...

    istock:一个基于spring boot实现的java股票爬虫(仅支持A股),如果你请。 V2升级版正在开发中!

    :check_box_with_check:公司基本信息,前10大股东信息 演示效果 :link:(demo版) :link: :collision:效果图 :collision: 代码分支说明 开发正在开发版本(不稳定) master发布版(稳定) 1.x 1.x版本代码...

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

    在本项目中,“Android项目源码基于新浪股票数据源的股市行情小软件”是一个实际的安卓应用程序,旨在为用户展示实时的股市行情信息。开发者利用新浪提供的股票API接口,将股票数据集成到这个小巧的应用中,使用户...

    新浪api

    新浪API是新浪为开发者提供的一种接口,允许外部应用通过授权机制访问新浪微博的相关功能,例如发布微博、获取用户信息等。OAuth是新浪API采用的主要认证协议,用于保障用户数据的安全,防止应用滥用用户权限。 ...

    新浪股票在线

    1. 数据获取:新浪股票数据的获取主要依赖于新浪提供的API接口。开发者需要熟悉这些接口的使用方法,包括请求格式、参数设置以及如何解析返回的JSON或XML数据。此外,可能还需要处理不同时间周期(如分钟、日、周)...

    股票代码查询股票代码查询

    - Java:可以利用JQuantlib、Quandl Java API等工具进行股票代码查询和行情获取。 - JavaScript:使用Alpha Vantage或IEX Cloud的API可实现股票代码查询。 6. 数据分析与投资决策: - 通过查询股票代码,投资者...

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

    例如,"新浪股票接口"是一个常见的第三方数据提供商,它能够提供准确、快速的股票市场数据,包括A股的数据。 在使用这些API时,开发者需要了解几个关键概念: 1. **授权和认证**:为了确保数据安全,大多数API会...

    股票涨跌幅限值提醒小工具

    8. **编程语言与技术**:虽然未直接提供,但开发此类应用通常会用到编程语言如Python、C#或Java,配合GUI库(如Qt、WinForms或WPF)创建用户界面,并可能使用第三方API来获取股票数据,如雅虎财经、新浪财经等提供的...

    股票接收通用程序样本

    2. **API接口**:许多金融数据提供商如雅虎财经、Google财经、新浪财经等都提供了API,开发者需要理解如何调用这些API来获取股票数据。 3. **数据解析**:股票数据通常以JSON、XML或CSV格式返回,理解这些数据格式...

    课程设计---股票交易系统

    你需要通过API接口(如雅虎财经、新浪财经等)获取股票价格、交易量等信息。数据通常以JSON或CSV格式返回,需要解析并存储在数据库中。数据库管理(如MySQL、MongoDB)是关键,用于高效地存储和查询大量历史及实时...

    条件选股编程教程(真正实现股票程序化交易).pdf

    这可以通过连接到股票数据API(如雅虎财经、新浪财经等)或者直接读取本地数据库来实现。数据通常包括开盘价、收盘价、最高价、最低价、成交量等。 2. 设定条件:根据投资策略,定义选股条件。这可能涉及到编写逻辑...

Global site tag (gtag.js) - Google Analytics