10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-07-07

はじめに

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

10
2
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?