URLがいつ更新されたかを確認するコマンドラインツールはありますか?

URLがいつ更新されたかを確認するコマンドラインツールはありますか?

HTTPヘッダーを使用して最後に変更されたタイミングを確認するためにURLを照会するためにPythonに何かをまとめることは間違いなく可能です。しかし、これを行うための既存のツールがあるかどうか疑問に思います。私は次のことを想像します:

% checkurl http://unix.stackexchange.com/questions/247445/
Fri Dec  4 16:59:28 EST 2015

または:

% checkurl "+%Y%m%d" http://unix.stackexchange.com/questions/247445/
20151204

ベルおよび/または笛で。私はwgetやカールが私に必要なものを持っていないと思いますが、それが間違っていることが判明しても驚かないでしょう。そこにそのようなものはありますか?

答え1

これは目的の操作を実行するようです(応答データのレコード区切り文字として '\ r \ n'を使用するように更新されます)。

#!/bin/sh

get_url_date()
{
    curl --silent --head "${1:?URL ARG REQUIRED}" | 
    awk -v RS='\r\n' '
        /Last-Modified:/ {
            gsub("^[^ ]*: *", "")
            print
            exit
        }
    '
}

unset date_format
case $1 in
    (+*)
        date_format="$1"
        shift
        ;;
esac

url_date="$(get_url_date "${1:?URL ARG REQUIRED}")"

if [ -z "$url_date" ]
then
    exit 1
fi

if [ "$date_format" != "" ]
then
    date "$date_format" -d"$url_date"
else
    echo "$url_date"
fi

答え2

Perlコード1行:

% perl -MLWP::Simple -MDate::Format -e 'print time2str "%C\n", (head $ARGV[0])[2]' http://example.com
Sat Aug 10 02:54:35 EEST 2013

最新のLinuxまたはFreeBSDシステムには、必要なモジュールがすでにインストールされている可能性があります。

答え3

カールとwgetの両方がこれを行うことができますが、最終的にPythonではそれほど価値があるかもしれません。これが私が書いた内容です。

#!/usr/bin/env python3

import sys, dateutil.parser, subprocess, requests
from getopt import getopt

errflag = 0
gTouch = None
gUsage = """Usage: lastmod [-t file] url
where:
-t file     Touches the given file to make its modification date
            the same as the URL modification date.
url         A URL to be retrieved
"""

opts, args = getopt(sys.argv[1:], "t:v?")

for k, v in opts:
    if k == "-t":           # File to touch
        gTouch = v
    elif k == "-?":         # Write out usage and exit
        errflag += 1

if len(args) != 1:
    errflag += 1

if errflag:
    sys.stderr.write(USAGE)
    sys.exit(1)

res = requests.head(args[0])

if res.status_code != 200:
    sys.stderr.write("Failed to retrieve URL\n")
    sys.exit(1)

if not 'Last-Modified' in res.headers:
    sys.stderr.write("Headers has no last-modified date\n")
    sys.exit(1)

dt = dateutil.parser.parse(res.headers['Last-Modified'])

if gTouch:
    subprocess.call(["touch", "-t", dt.strftime("%Y%m%d%H%m"), gTouch])
else:
    sys.stdout.write("%s\n" % dt.ctime())

答え4

Carbon14をチェックしてください。画像からWeb履歴を検出するコマンドラインPythonツール。スキャンWebページに画像がある場合、これは非常に効果的です。以下からインストールCarbon14 Githubリポジトリ、インストール後に実行。

python carbon14.py <url>

関連情報