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 코드 한 줄:

% 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를 확인해 보세요. 이미지에서 웹 기록을 감지하는 명령줄 Python 도구입니다. 검사 웹 페이지에 이미지가 있는 경우 이는 매우 효과적입니다. 다음에서 설치됨Carbon14 Github 저장소, 설치 후 실행;

python carbon14.py <url>

관련 정보