免責事項
この記事は初心者視点でザックリとした説明をしています。正確性に欠ける可能性がございますが、ご了承ください。「明らかに違うよ」ということがありましたら、ご指摘くださると幸いです。
環境
OS:最新版ではないMacOS
VirtualBox:5.2.26
Vagrant:2.2.6
Ubuntu:ubuntu/bionic64 v20181129.0.0
やること
シェルスクリプトとcrontabコマンドの設定を使い、総務省のニュースを自動取得する仕組みを作っていきます。
1. ディレクトリをつくる
まずはrssのデータ(xml形式のファイル)が保存されるディレクトリをつくりましょう。
$ mkdir ディレクトリ名
2. シェルスクリプトを書くファイルをつくる
シェルスクリプトを書くファイルをつくります。
シェルスクリプトを書くファイル名はなんでも良いです。
ここでは、soumu-rss.shとしておきます。
ついでに実行権限をすべてのユーザーに与えます。
//ファイルを作る
$ touch ~/ディレクトリ名/soumu-rss.sh
//ファイルの実行権限の設定
$ chmod a+x soumu-rss.sh
3. ファイルにシェルスクリプトを書く
ファイルには以下のように書きます。
# !/bin/bash
dirname="~/ディレクトリ名"
filename1="${dirname}/soumu-news.xml"
curl http://www.soumu.go.jp/news.rdf -s -o $filename1 -H "User-Agent: CrawlBot; 自分のメールアドレス"
filename2="${dirname}/soumu-news-`date +'%Y%m%d%H%M'`.xml"
iconv -s -f Shift_JIS -t utf-8 $filename1 -o $filename2
echo "Save to $filename2"
解説
#!/bin/bash は、シバングの設定です。
dirname="~/ディレクトリ名" は、ディレクトリを絶対パスで変数に入れています。
filename1="${dirname}/soumu-news.xml" は、RSSを仮保存するファイル名を変数に入れています。
curl http://www.soumu.go.jp/news.rdf -s -o $filename1 -H "User-Agent: CrawlBot; 自分のメールアドレス"
は、
curl http://www.soumu.go.jp/news.rdf でURLのxmlをコンソールに出力
-s でそのコンソールへの出力をなくします。
-o $filename1で出力を保存するファイルをfilename1に指定。
-H "User-Agent: CrawlBot; 自分のメールアドレス" でHTTP通信のヘッダーの設定を行なっています。詳しくはわかりません。
filename2="${dirname}/soumu-news-`date +'%Y%m%d%H%M'`.xml" は、RSSを保存するファイルを変数に入れています。
iconv -s -f Shift_JIS -t utf-8 $filename1 -o $filename2 は、
iconvは文字コードの変更を行います。
-sはコンソールへの出力をなくします。
-fで元の文字コードを指定します。元の文字コードはShift_JISです。
-tで変更先の文字コードを指定します。一般的に使いやすいutf-8に指定しました。
iconv 元のファイル名(filename1) -o 変更先のファイル名(filename2)とします。
echo "Save to $filename2"で、filename2の保存が終わったことをコンソールに表示します。
4. シェルスクリプトファイルの実行
先ほど書いたファイルの実行を行います。
$ ./soumu-rss.sh
とコンソールに打つと、
Save to ~/ディレクトリ名/soumu-news-201910281814.xml
と言う風にコンソールに表示されると思います。
最初に作ったディレクトリを確認してみると、soumu-news-201910281814.xmlが取得できているはずです。
5. RSSの自動取得
続いて、先ほどのRSSを毎時間自動取得していきます。
コンソールに、
$ select-editor
入力すると以下のような画面がでてきます。
今回は1のエディターを選択します。

エディターを選択したら、続いてコンソールに以下のコマンドを打ちます。
$ crontab -e
これはコマンドを決めた時間に自動で打つように設定できるコマンドです。
すると、以下のような画面が表示されます。

そして、マウス等で一番下まで移動すると以下のような文字が出てきます。

一番下に、# m h dom mon dow commandとあり、その下に
10 * * * * ~/soumu-rss.sh
と書き込みます。
これは、毎時間の10分になったら、
$ ./soumu-rss.sh
が自動的に実行されるという設定になります。
以上でシェルスクリプトとcrontabを使うrssの自動取得が完了しました。
参考
「N予備校 プログラミングコース」
https://www.nnn.ed.nico/
「iconv - ファイルの文字コードを変換 - Linuxコマンド」
https://webkaru.net/linux/iconv-command/