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]
分享到:
相关推荐
### 一、理解新浪股票API 新浪财经提供了免费的股票数据接口,可以用来获取股票的实时行情。通过访问特定的URL,如`http://hq.sinajs.cn/list=sz000723`,我们可以得到股票的详细信息。这些信息以字符串形式返回,...
【Java股票实时查询小软件】是一款利用JavaFX技术构建用户界面,通过访问新浪博客的URL获取股票实时数据的简易应用。这款软件的核心功能是展示股票信息,并允许用户点击每条股票数据来查看对应的股价走势。下面我们...
该程序利用了新浪提供的股票接口,能够获取实时或历史的股票数据,并在用户界面上展示股票的名称、交易时间以及相应的价格。 【描述】描述中提到,这个小程序的亮点在于其用户友好的图形界面,用户可以直观地看到...
该Android项目源码是开发一个基于新浪股票数据源的股市行情小软件的实例,主要涉及的技术栈包括Android、Java和Apache HTTP库。这个项目对于学习Android应用开发,特别是与网络数据交互的开发者来说,是非常有价值的...
新浪股票数据接口API是开发者获取实时股票市场信息的重要工具,尤其对于进行数据分析、金融建模或者开发相关应用的人员来说,它提供了丰富的股票数据来源。本文将详细介绍如何使用新浪股票数据接口,以及它能提供的...
新浪提供了免费的股票数据接口,用于获取股票的实时行情。下面以大秦铁路(股票代码: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调用获取所需信息,如股票报价、历史数据等。 - **主界面各控件功能的实现**:包括搜索框、列表视图,以及与服务器交互的逻辑。 - **股票详细...
新浪股票Demo源码是针对股票数据获取和分析的一个示例程序,它为开发者提供了一种便捷的方式去理解如何通过编程接口(API)获取实时和历史的股票市场数据。这篇解析将深入探讨这个Demo的结构、功能以及其在实际开发...
实时股票查询系统是一种基于Java开发的应用程序,专用于在Eclipse平台上实时获取并展示股票市场数据。这个系统利用了JavaFx作为用户界面框架,提供直观且动态的交互体验。JavaFx是一个强大的图形库,允许开发者创建...
:check_box_with_check:公司基本信息,前10大股东信息 演示效果 :link:(demo版) :link: :collision:效果图 :collision: 代码分支说明 开发正在开发版本(不稳定) master发布版(稳定) 1.x 1.x版本代码...
在本项目中,“Android项目源码基于新浪股票数据源的股市行情小软件”是一个实际的安卓应用程序,旨在为用户展示实时的股市行情信息。开发者利用新浪提供的股票API接口,将股票数据集成到这个小巧的应用中,使用户...
新浪API是新浪为开发者提供的一种接口,允许外部应用通过授权机制访问新浪微博的相关功能,例如发布微博、获取用户信息等。OAuth是新浪API采用的主要认证协议,用于保障用户数据的安全,防止应用滥用用户权限。 ...
1. 数据获取:新浪股票数据的获取主要依赖于新浪提供的API接口。开发者需要熟悉这些接口的使用方法,包括请求格式、参数设置以及如何解析返回的JSON或XML数据。此外,可能还需要处理不同时间周期(如分钟、日、周)...
- Java:可以利用JQuantlib、Quandl Java API等工具进行股票代码查询和行情获取。 - JavaScript:使用Alpha Vantage或IEX Cloud的API可实现股票代码查询。 6. 数据分析与投资决策: - 通过查询股票代码,投资者...
例如,"新浪股票接口"是一个常见的第三方数据提供商,它能够提供准确、快速的股票市场数据,包括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)是关键,用于高效地存储和查询大量历史及实时...
这可以通过连接到股票数据API(如雅虎财经、新浪财经等)或者直接读取本地数据库来实现。数据通常包括开盘价、收盘价、最高价、最低价、成交量等。 2. 设定条件:根据投资策略,定义选股条件。这可能涉及到编写逻辑...