2
4

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 5 years have passed since last update.

シェルスクリプトとcrontabでrssを自動取得してみる

2
Last updated at Posted at 2019-10-28

免責事項

この記事は初心者視点でザックリとした説明をしています。正確性に欠ける可能性がございますが、ご了承ください。「明らかに違うよ」ということがありましたら、ご指摘くださると幸いです。

環境

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. ファイルにシェルスクリプトを書く

ファイルには以下のように書きます。

soumu-rss.sh
# !/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のエディターを選択します。
スクリーンショット 2019-10-28 18.42.47.png
エディターを選択したら、続いてコンソールに以下のコマンドを打ちます。

$ crontab -e

これはコマンドを決めた時間に自動で打つように設定できるコマンドです。
すると、以下のような画面が表示されます。
スクリーンショット 2019-10-28 18.46.14.png
そして、マウス等で一番下まで移動すると以下のような文字が出てきます。
スクリーンショット 2019-10-28 18.46.38.png
一番下に、# 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/

2
4
2

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
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?