股市数据API接口和实例

There's more than one way to do it!
https://metacpan.org http://perlmonks.org
回复
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

股市数据API接口和实例

帖子 523066680 »

1楼占位

头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

通过雪球网站接口获取沪深股票清单

帖子 523066680 »

代码: 全选

use utf8;
use Encode;
use Modern::Perl;
use File::Slurp;
use File::Path qw/make_path/;
use POSIX;
use Mojo::UserAgent;
use JSON qw/from_json to_json/;
STDOUT->autoflush(1);

binmode(STDOUT, ":encoding(gbk)");

my $wdir = "./沪深一览";
# my $wdir = "./ETF一览";
make_path( gbk($wdir) ) unless -d gbk($wdir);

# 沪深 https://stock.xueqiu.com/v5/stock/screener/quote/list.json
# ETF https://stock.xueqiu.com/v5/stock/screener/fund/list.json

my $url = "https://stock.xueqiu.com/v5/stock/screener/quote/list.json";

my %args = (
        'page' => '1',
        'size' => '90',
        'order' => 'desc',
        'orderby' => 'percent',
        'order_by' => 'percent',
        # 'type' => '18', # ETF
        'type' => 'sh_sz',  # 沪深
        'parent_type' => 1
    );

my $ua = Mojo::UserAgent->new();

$ua->cookie_jar->add( 
    Mojo::Cookie::Response->new(
        name   => "xq_a_token",
        value  => "xq_a_token 值从chrome调试中获取",
        domain => 'stock.xueqiu.com',
        path   => '/',
    )
);

my $export = "list.json";
my %list;

# 获取第一页
my $res = $ua->get( $url, form => \%args )->result;
if ( exists $res->json->{data}{count} )
{
    update_list( \%list, $res->json );
}

my $count = $res->json->{data}{count};
my $last = ceil($count / 90);

printf "总数 %d\n", $count;

# 剩余页面
for my $pg ( 2 .. $last )
{
    $args{'page'} = $pg;
    my $res = $ua->get( $url, form => \%args )->result;
    if ( exists $res->json->{data}{count} )
    {
        printf "Page: %d\n", $pg;
        update_list( \%list, $res->json );
    }
    else
    {
        printf "Page: %d, false\n", $pg;
    }
}

write_file( $export, utf8(to_json( \%list, { pretty => 1, canonical => 1 } )) );

sub update_list
{
    my ( $list, $data ) = @_;
    for my $e ( @{$data->{data}{list}} )
    {
        # next if $e->{name} =~ /^(ST|\*ST)/i;
        # printf "%s %s\n", $e->{symbol}, gbk($e->{name});
        $list->{ $e->{symbol} } = $e->{name};
    }
}

sub gbk { encode('gbk', $_[0]) }
sub utf8 { encode('utf8', $_[0]) }
sub u2gbk { encode('gbk', decode('utf8', $_[0])) }
sub uni { decode('utf8', $_[0]) }

生成结果

list.json
(156.11 KiB) 已下载 370 次

代码: 全选

{
   "SH600000" : "浦发银行",
   "SH600004" : "白云机场",
   "SH600006" : "东风汽车",
   "SH600007" : "中国国贸",
   "SH600008" : "首创环保",
   "SH600009" : "上海机场",
   "SH600010" : "包钢股份",
   "SH600011" : "华能国际",
   "SH600012" : "皖通高速",
   "SH600015" : "华夏银行",
   "SH600016" : "民生银行",
   ...
   
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

获取沪深股票清单 - 歪枣网

帖子 523066680 »

这里歪枣网的获取方式就简单多了

代码: 全选

use utf8;
use Encode;
use Modern::Perl;
use File::Slurp;
use Mojo::UserAgent;
use JSON qw/from_json to_json/;
STDOUT->autoflush(1);

my %args = (
        'code' => "All",  # 全部
        'fields' => 'code,name,z50,z53', # 股票代码、股票名称、归属行业板块名称、归属概念板块名称
        'token' => '从歪枣网的用户中心 -> 账户基本信息 中获取',
        'export' => "1", 
    );

# export 导出类型
# 0.Txt字符串  1.Json字符串  2.Txt文件  3.Json文件  4.Csv文件  5.DataFrame格式

my $ua = Mojo::UserAgent->new();
my $res = $ua->get( "http://api.waizaowang.com/doc/getStockHSABaseInfo", form => \%args )->result;

print u2gbk( $res->body );


sub gbk { encode('gbk', $_[0]) }
sub utf8 { encode('utf8', $_[0]) }
sub u2gbk { encode('gbk', decode('utf8', $_[0])) }
sub uni { decode('utf8', $_[0]) }

获取结果部分内容截取

代码: 全选

{"code":200,"message":"成功","data":[{"name":"平安银行","z53":"HS300_,深圳特区,机构重仓,深成500,融资融券,互联金融,证金持股,深证100R,深股通,MSCI中国,区块链,富时罗素,标准普尔,跨境支付,破净股","code":"000001","z50":"银行"},{"name":"万  科A","z53":"AH股,HS300_,深圳特区,深成500,融资融券,央视50_,养老概念,智能家居,北京冬奥,证金持股,深证100R,深股通,超级品牌,MSCI中国,租售同权,富时罗素,标准普尔,猪肉概念,装配建筑,REITs概念,破净股","code":"000002","z50":"房地产开发"},
回复

在线用户

正浏览此版面之用户: 没有注册用户 和 8 访客