2013年10月19日土曜日

複数URLのリンク切れをチェックするシェルスクリプト


ドメインの異なる複数のWebサイトに対してリンク切れが発生していないか
URLのリストに従ってチェックするシェルスクリプトのサンプルです。
wgetの--spiderオプションを利用しています。

OS: CentOS 6.4(64-bit)
wget: GNU Wget 1.12 built on linux-gnu.


■シェルスクリプトサンプル
#!/bin/sh
#######################################################################
# << 機能概要 >>
# URLリストを読み込んでリンク切れチェックするスクリプト
#
# << 変更履歴 >>
# Version  変更日       変更者        変更内容
# --------+------------+-----------+----------------------------------
#     1.0  2013/10/12   tanyao      New
#######################################################################

URL_LIST=url_list.txt
OUTPUT=url_result.txt

# URLリスト存在チェック
if [ ! -e $URL_LIST ]; then
    echo "`date \"+%Y%m%d %H:%M:%S\"` ERROR: $URL_LIST is not exist."
    exit 1
fi

# 出力結果クリア
:> $OUTPUT

# URLリスト読み込み
i=0
while read line
do
    url[$i]="$line"

    # リンク切れチェック結果出力
    wget -nv --spider --timeout 15 -t 1 ${url[$i]} -a $OUTPUT

    i=`expr $i + 1`
done < $URL_LIST

exit 0
url_check.sh というファイル名で保存し、パーミッションを755に変更。

■URLリストファイル準備
[root@centos64 url_check]# head url_list.txt
http://kakaku.com/item/J0000011385/
http://kakaku.com/item/J0000009488/
http://kakaku.com/item/K0000588606/
http://kakaku.com/item/K0000590023/
http://kakaku.com/item/K0000999999/
http://static.panoramio.com/photos/large/94004107.jpg
http://static.panoramio.com/photos/large/94007107.jpg
http://static.panoramio.com/photos/large/9d004108.jpg
http://www.atmarkit.co.jp/ait/articles/1302/05/news222.html
http://topics.jp.msn.com/world/topics.aspx?topicid=1985
url_check.sh と同階層にurl_list.txtを配置する。

■スクリプト実行
url_result.txtが出力される。
[root@centos64 url_check]# ./url_check.sh
[root@centos64 url_check]# head url_result.txt
2013-10-07 00:39:20 URL: http://kakaku.com/item/J0000011385/ 200 OK
2013-10-07 00:39:21 URL: http://kakaku.com/item/J0000009488/ 200 OK
2013-10-07 00:39:21 URL: http://kakaku.com/item/K0000588606/ 200 OK
2013-10-07 00:39:21 URL: http://kakaku.com/item/K0000590023/ 200 OK
http://kakaku.com/item/K0000999999/:
リモートファイルが存在していません -- リンクが壊れています!!!
2013-10-07 00:39:22 URL: http://static.panoramio.com/photos/large/94004107.jpg 200 OK
2013-10-07 00:39:22 URL: http://static.panoramio.com/photos/large/94007107.jpg 200 OK
http://static.panoramio.com/photos/large/9d004108.jpg:
リモートファイルが存在していません -- リンクが壊れています!!!
wgetのバージョンによっては、ステータスコードが200の場合、何も出力されない場合があります。

リンクチェック対象が多いとそれなりに時間がかかります。この情報がお役にたてれば幸いです。

0 件のコメント:

コメントを投稿