Linuxには、コンソールからヘビーJavaアプリケーションまで、さまざまなロッカーがあります。私のスクリプトは、単なる新しいロッカーではなく、標準のWgetの見事なラッパーです。 潜在的にはWgetでできることはすべて実行できますが、最も基本的な機能のみを実装しました。 このスクリプトの目的は、wgetを使用してダウンロードを開始し(ブラウザからダウンロードする)、実行の進行状況を表示することです。
GTK + 環境には 、ダイアログボックスの表示に使用するすばらしいZenityユーティリティがあります。 リンクには使用のすべての側面が十分に詳細に表示されるため、レビューは行いませんが、すぐに使用方法を示します。
ですから、私のスクリプトでは、快適にダウンロードするために最小限の機能を実装しました:リンクのリスト、プロキシの選択、http、ftpプロトコル、ダウンロードしたファイルの名前の修正(YouTubeのビデオなどに非常に役立ちます)、コマンドラインからの作業( Firefox FlashGotプラグインで動作します)。
#!/ bin / bash
#使用法:./guiwget
#FlashGot引数付き:[URL] [REFERER] [POST]
#Dependens:wget> = 1.11.1、zenity
はい、はい! wgetのバージョンには違いがあります。 バージョン1.11.1では、wgetはオプション--content-dispositionのサポートを開始しました。これは、ifolderやyoutubeなどの交換機からダウンロードするときに必要です。 また、FlashGotでflv-videosをダウンロードし、ダウンロードしたwgetを転送できるようにするオプションも示しました。
#URLを取得
[ "$ 1" ] && url = $ 1 || url = " $(zenity --text-info --editable --title =" URLリストを入力してください "--width = 500 --height = 300) " ;
[ " $ url " ] || exit 0 ;
リンクがFlashGotを介して送信された場合、パラメーターが処理され、直接実行された場合、URLのリストを要求するウィンドウが表示されます。 ダウンロードリストが空の場合、スクリプトは終了します。
#プロキシ
proxy1 = "アンゴラ" ; proxy1addr = "41.210.252.11:80" ;
proxy2 = "バングラデシュ" ; proxy2addr = "202.168.236.178:8080" ;
p = " $(zenity --list --title ="プロキシ選択 "--print-column = 2 --column =" "--column =" "" $ proxy1 "" $ proxy1addr "" $ proxy2 "" $ proxy2addr ") " ;
[ " $ p " = "" ] || proxy = "export http_proxy = http:// $ p " ;
プロキシを使用すると、たとえば2つのプロキシが表示されるなど、異常なものはありません。 理論的には、準備されたプロキシリストのインポートを実装する必要がありますが、私はそれを必要としません。 直接ダウンロードする場合は、ウィンドウの[キャンセル]ボタンをクリックします。
#ファイルのダウンロード用のフォルダの選択
downdir = " $(zenity --file-selection --directory --title ="保存するディレクトリを選択 ") " ;
[ " $ downdir " ] || exit 0 ;
ダウンロードするフォルダーを選択します。 スクリプトでパスをハードコーディングできますが、私はその多様性が大好きです:)
設定が終わり、最も基本的な作業が始まります。
$ urlの urs
する
#ログファイル
output = "/ tmp / ` date +%N` -log " ;
#Wget start
id = $ ( $ proxy ; wget -b -o " $ output " -P " $ downdir " --referer = "$ 2" --post-data = "$ 3" " $ urs " | egrep -o "[0- 9] + " ) ;
[ " $ id " ] || exit 0 ;
受信したパラメーターでwgetを起動し、バックグラウンドに送信し、ダウンロードの進行状況をログに書き込みます。ログは処理され、プロセスIDを記憶します。
#名前ファイルとサイズ
h = "" ;
while [ " $ h " == "" ] ; する
if [ -x / proc / $ id ]
それから
h = $ ( egrep -o "[^ \ /] + '。$" $ output ) ;
[ " $ h " = "" ] && h = $ ( sed -n '/RETR/s/.*RETR \([[:print:]] * \)... done。$ / \ 1 / p' $出力 ) ;
realname = " $ {h%\ '。} " ;
downfile = " $ {realname %% \?*} " ;
[ 「 $ realname 」 ! = " $ downfile " ] && [ -f " $ downdir / $ downfile " ] && downfile = ` date + % N` " _ " $ downfile ;
他に
zenity --text-info --title = "Error" --filename = $ output --width = 700 --height = 400 ;
h = "FAIL" ;
rm $出力 ;
fi
完了 ;
[ " $ h " == "FAIL" ] && continue ;
size = $ ( grep "Length:" $ output | tail -1 | egrep -o "\(。+ \)" | cut -d "(" -f2 | cut -d ")" -f1 ) ;
ファイル名、サイズを決定し、サーバーがファイルを提供することを確認します。何か問題が発生した場合、ログのあるウィンドウが表示され、wgetは通常、正確に問題を書き込みます。 downfile変数は、ファイル名を正しく表示するため、およびファイル名file?Var = 1&var = 2をファイルに変換するために必要です。
一つのニュアンス-作業はロシア語のログで行われ、ロシア語の単語は傍受されます。そうでない場合は、スクリプトの「完了」と「長さ」の単語を修正してください。
#Graficalプログレスバー
( tail -f --pid = $ id $ output | sed -u -n の/.* \。[] * \([[:print:]] * \)%[] * \([[:グラフ:]] * \)\([[:graph:]] * \)$ /# ' " $ downfile " ': ' $ size ' \ 1%[\ 2B \ / s](\ 3)\ n \ 1 / p ' ) | zenity --title = " $ pファイルをダウンロード" --progress --percentage = 0 --auto-close
[ $? -eq 0 ] && notify-send "ダウンロード完了" "ファイル: $ downfile " || ( [ -x / proc / $ id ] && kill $ id || zenity --text-info --title = "Error" --filename = $ output --width = 700 --height = 400 ) ;
mv " $ downdir / $ realname " " $ downdir / $ downfile " ;
#きれい
rm $出力 ;
やった
そして、これがどのように機能するかを伝える私のノウハウです。
tail -f --pidはログの追跡に最適であり、プロセスのpidも監視します。したがって、指定されたpidを持つプロセスが終了すると、tailはパイプラインも停止します。 ストリームテールはwgetログファイルを(awkとは異なり)ストリーミングsedに転送します。このsedはそれを処理し、必要な情報を抽出して適切にフォーマットすると、テキストが完全になります。
少し説明してみましょう。進行中に、フォームでテキストを送信する必要があります。
#表示するテキスト
0
#表示するテキスト
10
...
ここで、2行目はパーセント数です。 wgetログからのこの変換は、tail + sedによって行われます。 次はエラー処理またはダウンロードが成功した場合のポップアップメッセージ出力です。必要に応じて、ファイル名の変更も行う必要があります。
それだけです。ファイルを都合の良い場所に保存し、実行ビットを設定し、ソケットに起動ボタンを追加して使用するか、Firefox + FlashGot経由でタスクを送信します。
最後の仕上げとして、Rapidshareや、リンクインターセプターが気に入らないその他のファイルホスティングサービスを無効にするために、次の行を.wgetrcファイルに追加します。
header = Accept-Language:ru、en-us; q = 0.7、en; q = 0.3
header = Accept:text / html、application / xhtml + xml、application / xml; q = 0.9、* / *; q = 0.8
header = Accept-Encoding:gzip、deflate
ヘッダー= Accept-Charset:UTF-8、*
ヘッダー=キープアライブ:300
ヘッダー=接続:キープアライブ
user_agent = Mozilla / 5.0(X11; U; Linux i686; ru; rv:1.9.1.2)Gecko / 20090804知床/ 3.5.2
content_disposition = on
ブラウザに従ってユーザーエージェントを修正します。
スクリプトはここから入手できます: nebulosa2007.narod.ru/guiwget.tar.gz