#!/usr/bin/perl -w
use
if
DEBUG,
'Smart::Comments'
;
use
JSON
qw( decode_json )
;
our
$VERSION
=
'1.64_02'
;
our
@labels
=
qw/last date isodate symbol/
;
sub
labels {
return
(
six
=> \
@labels
);
}
sub
methods {
return
(
six
=> \
&six
);
}
sub
six {
my
$quoter
=
shift
;
my
@symbols
=
@_
;
my
$ua
=
$quoter
->user_agent();
my
%info
;
foreach
my
$symbol
(
@_
) {
eval
{
my
$reply
=
$ua
->get(
$url
);
my
$search
= JSON::decode_json
$reply
->content;
my
$valorid
=
$search
->{rowData}->[0][0];
die
"$symbol not found"
unless
defined
$valorid
;
$url
=
'https://www.six-group.com/fqs/ref.json?select=DividendEntitlementFlag,FirstTradingDate,LastTradingDate,ISIN,IssuerNameFull,IssuerNameShort,MarketDate,NominalCurrency,NominalValue,NumberInIssue,ProductLine,SecTypeDesc,ShortName,SmallestTradeableUnit,TitleSegment,TitleSegmentDesc,TradingBaseCurrency,ValorNumber,ValorSymbol&where=ValorId='
.
$valorid
;
$reply
=
$ua
->get(
$url
);
my
$metadata
= JSON::decode_json
$reply
->content;
my
@metacols
= @{
$metadata
->{colNames}};
my
%metamap
=
map
{
$metacols
[
$_
] =>
$_
} (0 ..
$#metacols
);
my
$metarow
=
$metadata
->{rowData}->[0];
$info
{
$symbol
,
'symbol'
} =
$metarow
->[
$metamap
{ValorSymbol}];
$info
{
$symbol
,
'isin'
} =
$metarow
->[
$metamap
{ISIN}];
$info
{
$symbol
,
'name'
} =
$metarow
->[
$metamap
{IssuerNameFull}];
$info
{
$symbol
,
'currency'
} =
$metarow
->[
$metamap
{TradingBaseCurrency}];
$quoter
->store_date(\
%info
,
$symbol
, {
isodate
=>
$metarow
->[
$metamap
{MarketDate}]});
$url
=
'https://www.six-group.com/fqs/movie.json?select=AskPrice,AskVolume,BidPrice,BidVolume,ClosingDelta,ClosingPerformance,ClosingPrice,DailyHighPrice,DailyHighTime,DailyLowPrice,DailyLowTime,LatestTradeVolume,MarketMakers,MarketTime,MidSpread,OffBookTrades,OffBookTurnover,OffBookVolume,OnMarketTrades,OnMarketTurnover,OnMarketVolume,OpeningPrice,PreviousClosingPrice,SwissAtMidTrades,SwissAtMidTurnover,SwissAtMidVolume,TotalVolume,VWAP60Price,YearAgoPerformance,YearlyHighDate,YearlyHighPrice,YearlyLowDate,YearlyLowPrice,YearToDatePerformance,YieldToWorst&where=ValorId='
.
$valorid
;
$reply
=
$ua
->get(
$url
);
my
$data
= JSON::decode_json
$reply
->content;
my
@datacols
= @{
$data
->{colNames}};
my
%datamap
=
map
{
$datacols
[
$_
] =>
$_
} (0 ..
$#datacols
);
my
$datarow
=
$data
->{rowData}->[0];
$info
{
$symbol
,
'ask'
} =
$datarow
->[
$datamap
{AskPrice}]
if
$datarow
->[
$datamap
{AskPrice}] and looks_like_number(
$datarow
->[
$datamap
{AskPrice}]);
$info
{
$symbol
,
'close'
} =
$datarow
->[
$datamap
{ClosingPrice}]
if
$datarow
->[
$datamap
{ClosingPrice}];
$info
{
$symbol
,
'high'
} =
$datarow
->[
$datamap
{DailyHighPrice}]
if
$datarow
->[
$datamap
{DailyHighPrice}];
$info
{
$symbol
,
'low'
} =
$datarow
->[
$datamap
{DailyLowPrice}]
if
$datarow
->[
$datamap
{DailyLowPrice}];
$info
{
$symbol
,
'open'
} =
$datarow
->[
$datamap
{OpeningPrice}]
if
$datarow
->[
$datamap
{OpeningPrice}];
$info
{
$symbol
,
'last'
} =
$datarow
->[
$datamap
{ClosingPrice}]
if
$datarow
->[
$datamap
{ClosingPrice}];
$info
{
$symbol
,
'volume'
} =
$datarow
->[
$datamap
{TotalVolume}]
if
$datarow
->[
$datamap
{TotalVolume}];
$info
{
$symbol
,
'success'
} = 1;
};
if
($@) {
my
$error
=
"SIX failed: $@"
;
$info
{
$symbol
,
'success'
} = 0;
$info
{
$symbol
,
'errormsg'
} = trim(
$error
);
}
}
return
wantarray
() ?
%info
: \
%info
;
}
1;