2009-09-03 9 views
0

URL http://www.fourmilab.ch/cgi-bin/Earthには、地球のライブマップが表示されます。プログラムでこのページの画像を取得するにはどうすればよいですか?

このURLをブラウザ(FF)で発行した場合、画像はうまく表示されます。しかし、私は同じページをフェッチするために 'wget'を試してみると、私は失敗します!ここで

は、私が最初に試したものです:おそらく他のすべてのフォームフィールドがあまりにも必要とされている

wget -p http://www.fourmilab.ch/cgi-bin/Earth 

思考、私は、上記のページで「ソースの表示」をやった様々なフィールドの値を書き留め、その後、次のURLを発行しました:

wget --post-data "opt=-p&lat=7°27'&lon=50°49'&ns=North&ew=East&alt=150889769&img=learth.evif&date=1&imgsize=320&daynight=-d" http://www.fourmilab.ch/cgi-bin/Earth 

まだ画像がありません!

誰かがここで何が起こっているのか教えてもらえますか? CGIやフォームベースのwgetsを持つ「邪魔者」はありますか?どこで(本やオンラインリソース)そのような概念を説明するだろうか?

+1

画像のソースはhttp://www.fourmilab.ch/cgi-bin/Earth?di=154E28F95D71B37CD7215CBD4AC02097A04D68525B48181BD029ではなく、あなたが言及しているもののようなものであるように私には思えます。 –

+0

ブラウザからページをリフレッシュするたびにイメージソース/ URLが変更されています。これはすべて2つのステップで行われているようです。新しい画像と画像パスが動的に生成され、次にこの画像がクライアントに送信されます。そして私はこれをどう扱うべきか分からない! – Harry

答えて

2

ページのソースコードを調べる場合は、imgの中にアースの画像が含まれているリンクがあります。たとえば:

 
<img 
src="/cgi-bin/Earth?di=570C6ABB1F33F13E95631EFF088262D5E20F2A10190A5A599229" 
ismap="ismap" usemap="#zoommap" width="320" height="320" border="0" alt="" /> 

「ディ」パラメータを与えることなく、あなただけではない画像そのもののために、この画像を参照して、Webページ全体を求めています。

編集:「ディ」パラメータは、とにかく、受信したい地球の「一部」ではなくPOSTをGET例

 
wget http://www.fourmilab.ch/cgi-bin/Earth?di=F5AEC312B69A58973CCAB756A12BCB7C47A9BE99E3DDC5F63DF746B66C122E4E4B28ADC1EFADCC43752B45ABE2585A62E6FB304ACB6354E2796D9D3CEF7A1044FA32907855BA5C8F 

+0

はい、私もそれを見ました。しかし、私がBradの回答に対する私のコメントで言ったように、このdi値はページ更新のたびにほぼ変化しています。だから、問題は:私はそれをwgetすることができます前に、イメージのURLを見つけるか? – Harry

+0

あなたは長い名前のファイル「Earth \?di \ = F5AEC ...」を取得します。これはjpegです。非常に賢い! – pavium

+0

@someDeveloper:Diは、画像を取得する極座標を変更した場合にのみ変更されます。特定の座標を取得したい場合は、最初のページから結果を解析する必要があります。実際には以下の2つの答えがあります。 @pavium:ファイル名を変更することができます。ほとんどのプログラムはデータをstdoutにストリームすることができます。そのファイルから任意のファイルやデバイスにリダイレクトすることができます。 –

1

使用のためにしてみてくださいコードしています。彼らはバックグラウンドでCGIプログラムとはまったく異なっています。

0

あなたがダウンロードしているのは、HTMLページ全体であり、イメージではありません。画像やその他の要素もダウンロードするには、--page-requisites(場合によっては--convert-links)のパラメータを使用する必要があります。残念ながらrobots.txt/cgi-bin/の下のURLへのアクセスを許可しないため、/cgi-bin/の下にある画像はダウンロードされません。 AFAIKには、ロボットプロトコルを無効にするパラメータはありません。 Ravadreに続き

1

wget -p http://www.fourmilab.ch/cgi-bin/Earth 

は<IMG>タグが含まれているXHTMLファイルをダウンロードします。

imgタグ以外のすべてを削除するようにXHTMLを編集し、それを別のwget -pコマンドを含むbashスクリプトに変換して、?をエスケープしました。そして=本当に

私はこれを実行すると、私はearth.jpg

ないと改名14KBのファイルを持っ、プログラム、方法は、私はそれをしなかったが、私はそれを行うことができると思います。

@someeveloperが述べたように、di値は(時間に依存するので)変化しています。

+0

ありがとう、私はスクリプトでそれを包みます。 – Harry

0

皆さん、私が最後にしたのはここです。最初のwget自体で画像を取得する方法... Firefoxを使ってブラウズするときと同じユーザーエクスペリエンスを与えてくれました。

#!/bin/bash 

tmpf=/tmp/delme.jpeg 
base=http://www.fourmilab.ch 
liveurl=$(wget -O - $base/cgi-bin/Earth?opt=-p 2>/dev/null | perl -0777 -nle 'if([email protected]<img \s+ src \s* = \s* "(/cgi-bin/Earth\?di= .*?)" @gsix) { print "$1\n" }') 
wget -O $tmpf $base/$liveurl &>/dev/null 
関連する問題