web-dev-qa-db-ja.com

方法:指定した間隔でウェイバックマシンからページをダウンロードする

私が言いたいのは、指定された期間と間隔でウェイバックマシンから利用可能な各ページをダウンロードすることです。たとえば、2012年1月から2012年12月までnature.comから毎日利用できる各ページをダウンロードしたいと思います(正確には私がやりたいことではありませんが、十分に近いです-そして良い例を提供します。)

残念ながら、Waybackマシンの動作には固有の性質があるため、wgetは機能しません。

Wayback Machineダウンローダーのようなツールは、ページの最新バージョンのみをダウンロードするようです。

IA APIとのやり取りは実行可能なルートのように見えますが、それがどのように機能するかはわかりません。

ありがとう!

11

waybackURLのフォーマット方法は次のとおりです。

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を正しい日付値に調整する必要があります。

5
Samveen

Ruby Githubに宝石があります: https://github.com/hartator/wayback-machine-downloader

4
duenni