Edited at

【Delphi】そこそこ短いコードで Web サイトのデータを持ってくる


はじめに

「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:


おわりに

THTTPClient に関しては @pik さんの記事がとても参考になりますので、そちらもご覧ください。

See also: