加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl 新浪股票信息收集

发布时间:2020-12-15 20:59:36 所属栏目:大数据 来源:网络整理
导读:通过解析SINA HTTP 返回的数据获取股票信息,具体返回值参考文章实时股票数据接口大全。 使用说明: perl script.pl [-c -f] -d 获取默认@defaultstock列表中股票信息,参数-c 清屏,参数-f 输出更加完整的信息,参考图例 perl script.pl -m [sh sz zx cy]

通过解析SINA HTTP 返回的数据获取股票信息,具体返回值参考文章实时股票数据接口大全。


使用说明:

  • perl script.pl [-c -f] -d 获取默认@defaultstock列表中股票信息,参数-c 清屏,参数-f 输出更加完整的信息,参考图例
  • perl script.pl -m [sh sz zx cy] 四个参数分别代表获取上海,深圳,中小,创业板股票的信息
  • perl script.pl sh600001 sz000858 获取参数提供的股票信息

如果需要代理(公司里上网),修改PROXY地址并取消$us->proxy行注释。修改@defaultstock为自己关注的股票。

use strict;
use warnings;
use Carp;
use LWP::UserAgent;
use Getopt::Std;

use constant MAXNUMBER => 500;
use constant LINE => 30;
use constant PROXY => 'http://10.40.14.56:80';
$| = 1; 

my %opts;
getopts('cdfm:',%opts);

my %market = (
	sh => sub {map {"sh$_"} ('600001' .. '602100')},sz => sub {map {"sz$_"} ('000001' .. '001999')},zx => sub {map {"sz$_"} ('002001' .. '002999')},cy => sub {map {"sz$_"} ('300001' .. '300400')},);

my @defaultstock = qw(sh601818 sz300229 sz002649 sz002368 sh600667 sz000858);

if($opts{c}){
	system 'cls';
}
my $func = $opts{f} ? &;DrawStock : &;DrawMarket;
my @stock;
if($opts{d}){
	@stock = @defaultstock;
}
elsif($opts{m} && exists $market{lc $opts{m}}){
	@stock = $market{lc $opts{m}}->();
}
else{
	@stock =  grep {/s[hz]d{6}/} map {lc} @ARGV;
}
Stocks($func,@stock) if @stock;


sub Stocks{
	my $drawfunc = shift;
	
	my @stocklist = grep {/s[hz]d{6}/i} map {lc} @_;
	return unless @stocklist;
	
	while(my @tmp = splice @stocklist,MAXNUMBER){
		my $strs = GetStockValue(@tmp);
		for(split /;/,$strs){
			my ($code,$value) = /hq_str_(s[hz]d{6})="([^"]*)"/;
			if($value){
				$drawfunc->($code,$value);
			}
		}
	}
}

sub GetStockValue{
	croak "Length > MAXNUMBER" if @_>MAXNUMBER;
	
	my $ua = LWP::UserAgent->new();
	#~ $ua->proxy('http',PROXY);
	
	my $res = $ua->get("http://hq.sinajs.cn/list=".join(',',@_));
	if($res->is_success){
		return $res->content;
	}
}

sub DrawMarket{
	my ($stockcode,$value) = @_;
	my @list = split /,/,$value;
	
	$^ = "MARKET_TOP";
	$~ = "MARKET";
	$= = LINE+3;
	write;
	
	format MARKET_TOP = 

code     name          current (   +/-       %)    open   close          low(ch)        high(ch)  S(W)    $(W) [             buy <=>   sell          ]
======================================================================================================================================================
.

	format MARKET = 
@<<<<<<< @<<<<<<<<<<<< @###.## (@##.## @##.##%) @###.## @###.## @###.## (@##.##) @###.## (@#.##) @#### @###### [@########@###.## <=>@###.##@######## ]
$stockcode,$list[0],$list[3],$list[3]-$list[2],$list[2]>0?($list[3]-$list[2])*100/$list[2]:0,$list[1],$list[2],$list[5],$list[5]-$list[2],$list[4],$list[4]-$list[2],$list[8]/10000,$list[9]/10000,$list[10],$list[11],$list[21],$list[20],.
}

sub DrawStock{
	my ($stockcode,$value;
	
	$~ = "STOCK";
	write;

	format STOCK = 
=====================================================================
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<@>>>>>>>>>>>>>>>>>>
"$stockcode: $list[0]","$list[30] $list[31]",=====================================================================
current:@###.## (@##.##@##.##%) |@########@###.## <=>@###.##@########
$list[3],close:  @###.##                 |@########@###.## <=>@###.##@########
$list[2],$list[12],$list[13],$list[23],$list[22],open:   @###.##                 |@########@###.## <=>@###.##@########
$list[1],$list[14],$list[15],$list[25],$list[24],low:    @###.## (@##.##)        |@########@###.## <=>@###.##@########
$list[5],$list[16],$list[17],$list[27],$list[26],high:   @###.## (@##.##)        |@########@###.## <=>@###.##@########
$list[4],$list[18],$list[19],$list[29],$list[28],S(W):    @#####                 |------------------------------------
$list[8]/10000,$(W):    @#####                 |@########                  @########
$list[9]/10000,$list[10]+$list[12]+$list[14]+$list[16]+$list[18],$list[20]+$list[22]+$list[24]+$list[26]+$list[28],.
}

输出示例:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读