私が言いたいのは、指定された期間と間隔でウェイバックマシンから利用可能な各ページをダウンロードすることです。たとえば、2012年1月から2012年12月までnature.comから毎日利用できる各ページをダウンロードしたいと思います(正確には私がやりたいことではありませんが、十分に近いです-そして良い例を提供します。)
残念ながら、Waybackマシンの動作には固有の性質があるため、wgetは機能しません。
Wayback Machineダウンローダーのようなツールは、ページの最新バージョンのみをダウンロードするようです。
IA APIとのやり取りは実行可能なルートのように見えますが、それがどのように機能するかはわかりません。
ありがとう!
wayback
URLのフォーマット方法は次のとおりです。
http://$BASEURL/$TIMESTAMP/$TARGET
ここで、BASEURL
は通常http://web.archive.org/web
です(これが唯一のBASEURLであるかどうかわからないため、通常は言います)
TARGET
は自明です(あなたの場合はhttp://nature.com
、または同様のURL)
TIMESTAMP
は、キャプチャが行われたときのYYYYmmddHHMMss
です(UTC):
YYYY
:年mm
:月(2桁-01から12)dd
:曜日(2桁-01から31)HH
:時間(2桁-00から23)MM
:分(2桁-00から59)ss
:秒(2桁-00から59)存在しないキャプチャ時間をリクエストした場合、ウェイバックマシンは、将来でも過去でも、そのURLに最も近いキャプチャにリダイレクトします。
この機能を使用して、curl -I
(HTTP HEAD
)を使用して毎日のURLを取得し、URLのセットを取得できます。
BASEURL='http://web.archive.org/web'
TARGET="SET_THIS"
START=1325419200 # Jan 1 2012 12:00:00 UTC (Noon)
END=1356998400 # Tue Jan 1 00:00:00 UTC 2013
if uname -s |grep -q 'Darwin' ; then
DATECMD="date -u '+%Y%m%d%H%M%S' -r "
Elif uname -s |grep -q 'Linux'; then
DATECMD="date -u +%Y%m%d%H%M%S -d @"
fi
while [[ $START -lt $END ]]; do
TIMESTAMP=$(${DATECMD}$START)
REDIRECT="$(curl -sI "$BASEURL/$TIMESTAMP/$TARGET" |awk '/^Location/ {print $2}')"
if [[ -z "$REDIRECT" ]]; then
echo "$BASEURL/$TIMESTAMP/$TARGET"
else
echo $REDIRECT
fi
START=$((START + 86400)) # add 24 hours
done
これにより、2012年の各日の正午に最も近いURLが取得されます。重複を削除し、、、およびページをダウンロードするだけです。
注:上記のスクリプトは、REDIRECT
が1日以上先のURLの場合にジャンプするように大幅に改善できる可能性がありますが、返されたURLを分解し、START
を正しい日付値に調整する必要があります。
Ruby Githubに宝石があります: https://github.com/hartator/wayback-machine-downloader