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

Perl 腾讯股票信息收集

发布时间:2020-12-15 20:58:45 所属栏目:大数据 来源:网络整理
导读:之前的新浪股票脚本信息不太全,参考前面一篇文章腾讯股票接口,写了一个更加方便的,信息比较全的。看代码: use utf8;use Encode;use strict;use warnings;use LWP::UserAgent;use threads (exit = 'threads_only',);use threads::shared;use constant URL

之前的新浪股票脚本信息不太全,参考前面一篇文章腾讯股票接口,写了一个更加方便的,信息比较全的。看代码:

use utf8;
use Encode;

use strict;
use warnings;
use LWP::UserAgent;
use threads (exit => 'threads_only',);
use threads::shared;

use constant URL	=> 'http://qt.gtimg.cn/q=';
use constant PROXY	=> 'http://10.40.14.56:80'; #使用代理修改此处并去掉下边代码中的注释
use constant MAXNUMBER	=> 50; #腾讯每次最多取60个左右的股票信息,设置一个整数,HTTP GET中使用

use constant CONFIG	=> 'detail';
use constant COLUMN	=> qw(1 2 3 4 5 7 8 10 9 19 20 31 32 36 37 38 39 46 44 45); #要显示的列,自己根据需要修改
use constant ORDER	=> 2; #要排序的列

my @result : shared 	= ();
my @stocklist 		= (
	sub { map {"sh$_"} ('600001' .. '602100') }->(),sub { map {"sz$_"} ('000001' .. '001999') }->(),sub { map {"sz$_"} ('002001' .. '002999') }->(),sub { map {"sz$_"} ('300001' .. '300400') }->(),);

my %config = (
	detail => {
		method => sub { @_ },0 	=> '未知',1 	=> '名字',2 	=> '代码',3 	=> '当前价格',4 	=> '昨收',5 	=> '今开',6 	=> '成交量',7 	=> '外盘',8 	=> '内盘',9 	=> '买一',10 	=> '买一量',19 	=> '卖一',20 	=> '卖一量',29 	=> '最近逐笔成交',30 	=> '时间',31 	=> '涨跌',32 	=> '涨跌%',33 	=> '最高',34 	=> '最低',35 	=> '价格/成交量(手)/成交额',36 	=> '成交量',37 	=> '成交:万',38 	=> '换手率%',39 	=> '市盈率',40 	=> '',41 	=> '最高',42 	=> '最低',43 	=> '振幅%',44 	=> '流通市值',45 	=> '总市值',46 	=> '市净率',47 	=> '涨停价',48 	=> '跌停价',},);

GetStocks();
@result = sort { ($a->[ORDER] || 0) <=> ($b->[ORDER] || 0) } @result; #可以使用grep添加更多过滤条件
PrintStock();


=head
Get stock information from QQ
=cut
sub GetStockInfomation{
	return unless @_;
	
	my $ua = LWP::UserAgent->new();
	# $ua->proxy('http',PROXY);
	
	my $res = $ua->get(URL.join(',',$config{&CONFIG}{method}->(@_)));
	if($res->is_success){
		for(split /;/,$res->content){
			if(/"(.+)"/){
				my @tmp = split /~/,$1;
				push @result,shared_clone(@tmp);
			}
		}
	}
}

sub GetStocks{
	while(my @tmp = splice @stocklist,MAXNUMBER){
		threads->create(&;GetStockInfomation,@tmp);
	}

	# $_->join() for threads->list();
	while(threads->list()){
		$_->join for threads->list(threads::joinable);
	}

}

=head
Print stock information
=cut
sub PrintStock{
	my $j = 0;
	for(@result){
		unless($j++ % MAXNUMBER){
			print "n";
			# for my $col (COLUMN){
			# 	printf "%10s",encode('gb2312',$config{&CONFIG}{$col});
			# }
			printf "%10s" x COLUMN,map {encode('gb2312',$config{&CONFIG}{$_})} COLUMN;
			print "n",'=' x 10 x COLUMN,"n";
		}
		# for my $col (COLUMN){
		# 	printf "%10s",$_->[$col];
		# }
		printf "%10s" x COLUMN,@$_[COLUMN];
		print "n";
	}

	print "nTotal: ",$#result;
}

输出:

(编辑:李大同)

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

    推荐文章
      热点阅读