はじめに
「Python だと 10 行のコードで日経新聞 Web サイトから株価を取得できる」という記事が何かの書籍に書かれていたそうです。
Delphi でもやってみましょう。使うのは 10.3 Rio です。
コードを書く
Indy (Internet Direct) を使ってもいいのですが、今回は THTTPClient を使います。
コード
短く書く事が目的なので、コンソールアプリケーションです。
Nikkei.dpr
program Nikkei;
{$APPTYPE CONSOLE}
uses
System.SysUtils, System.Classes, System.Net.HttpClient, System.RegularExpressions;
const
url = 'https://www.nikkei.com/markets/kabu/';
begin
var http := THttpClient.Create;
var sl := TStringList.Create;
try
sl.LoadFromStream(http.Get(url).ContentStream, TEncoding.UTF8);
var m := TRegEx.Match(sl.Text, '<span class="mkc-stock_prices">(?<price>(\d+[,.])*\d+)</span>');
if m.Success then
writeln('日経平均株価: ', m.Groups.Item['price'].Value);
finally
sl.Free;
http.Free;
end;
end.
日経平均株価: 21,746.38
10 行とは行きませんでしたが、Delphi 10.3 だと可読性を損ねずにそこそこ短く書けますね!
uses System.SysUtils, System.Classes, System.Net.HttpClient, System.RegularExpressions;
begin
var http := THttpClient.Create;
var sl := TStringList.Create;
sl.LoadFromStream(http.Get('https://www.nikkei.com/markets/kabu/').ContentStream, TEncoding.UTF8);
var m := TRegEx.Match(sl.Text, '<span class="mkc-stock_prices">(?<price>(\d+[,.])*\d+)</span>');
writeln('日経平均株価: ', m.Groups.Item['price'].Value);
sl.Free;
http.Free;
end.
空行を無くして例外処理も省けば 10 行で書けなくもないですが、そこまでする必要性はないと思います。
See also:
- System.Net.HttpClient.THTTPClient (DocWiki)
- System.RegularExpressions (DocWiki)
- SkRegExp (GitHub)
- 正規表現の活用 (主に Delphi 2009 以降)
- Delphi で最少のソースコードを書いてみる (Qiita)
おわりに
THTTPClient に関しては @pik さんの記事がとても参考になりますので、そちらもご覧ください。
See also: