Engineer of the lawyer

I was able to pass the Network Specialist. Next target is the Project Manager.

プログラム素人がPerlでプログラムを作ったのでメモ

すごい単純なものですが、なんだかんだ6時間ぐらい程かかったので
やっぱりPGは尊敬するなぁとつくづく感じました。

作っている間、不完全燃焼のところがいくつもあったけど、触って
いくうちに覚えていこうというスタンスなので、とりあえず細かい
ところは気にしないで、手を進めていきました。

Perlはメンテナンス程度に触ったことがあるぐらいで、ほぼ素人
の状態です。

VMwareCentOSPerl のインストールからはじめたので
結構時間かかってます。

やりたいこと

ある会社の株価の終値CSVに自動的に記録していきたい。

考え方

Perlで株価を表示しているWEBサイトへアクセス。
②現在価格を取得して日付とともにCSVファイルへ追記する。
③これをCronで夜に1回だけ動かす。

まだ②までしかできてないけど、③はすぐできそうなので、一旦休憩。

以下実際の成果物
#!/usr/bin/env perl
use strict;
use warnings;
use LWP::Simple;

### utf8のERRORが出るので、とりあえずこれ入れたら解決した。
binmode(STDOUT, ":utf8");


###################################################################
# 本日の日付を取得する。
###################################################################
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime;

#localtime関数からは1900年から数えた年が返却される。
$year += 1900;

# 月は0から始まるので、1を加える
$mon++;

# 日曜日は0
my @day_of_week = qw/日 月 火 水 木 金 土/;

print "$year\-";
print "$mon\-";
print "$mday\t";

##################################################################
# XXXの株価ページからYYY社の株価を取得する
##################################################################

my $url = 'http://XXX株価が表示しているページXXX';

# LWP::Simpleの「get」関数を使用
my $html = get($url) or die "Couldn't get it!";

#$htmlを一行ずつ、配列に格納する
my @lines = split m{\n}, $html;

# foreachで処理する前に変数を宣言しておかないとERRORになるので、適当にここで宣言
my $value = 0;

foreach (@lines) {

# 該当の文字列が部分一致する箇所をif文でマッチさせる
        if(/X部分一致させたい文字列X/){
        $value = "$_";
                };
        };

### 正規表現で、数値のみが残るように、置換する。
$value =~ s/^.*?(\d+).*$/$1/;

print "$value\n";

open(FH,">> RESULT-xxx.csv");
        print FH "$year\-";
        print FH "$mon\-";
        print FH "$mday\t";
        print FH "$value\n";
close(FH);
やってみて

●my ~ で変数定義しないといけなかったっけ?って思ってたら、
use strict;
を使ってるからなんやな。これはスペルミスを防ぐものだと思う。

●utf8のエラーが出たので、ぐぐって荒療治しているけど、
次回までには理解して何とかしよう。

●ファイルハンドルの概念がいまいちよくわからん。

●LWPというものをはじめて知った。このPerlのモジュールを
使わないと、WEBサイトへGETするのがPerlでは難しいと思われる。

●if文の条件パターンになぜか2byte文字が使えなかった。

【課題】

●数値への置換が1,000とかの表記だとうまくいかない。コピペしてきただけなので要確認。

次もなんかぼちぼちやっていこう。