• 締切済み

wgetの正規表現について

どなたかご教授下さい。linux初心者です。 気象庁の地震速報の詳細ページを日別に自動で入手したいのです。 たとえば今日ならば、ひとつのファイルは http://www.jma.go.jp/jp/quake/20110612112208391-121117.html ...112208391-121117が発生時刻と発表時刻となるようなので 規則性がありません。そこで: $ wget http://www.jma.go.jp/jp/quake/20110612\d{9}-\d{6}.html とやったのですが; --2011-06-12 12:58:36-- http://www.jma.go.jp/jp/quake/20110612d%7B9%7D-d%7B6%7D.html Resolving www.jma.go.jp (www.jma.go.jp)... 124.40.39.100 Connecting to www.jma.go.jp (www.jma.go.jp)|124.40.39.100|:80... connected. HTTP request sent, awaiting response... 404 Not Found 2011-06-12 12:58:36 ERROR 404: Not Found. となってしまいます。 これはwgetの正規表現がおかしいのでしょうか?

みんなの回答

  • dscripty
  • ベストアンサー率51% (166/325)
回答No.5

「正規表現の理 解不足だったようです。」 自己解決がとんでもない方向にむかいそうなので軌道修正するよ。 まず、理解不足なのは「正規表現」じゃなくて、Linux のコマンドなら正規表現がつかえるだろうというおもいこみかな? しらなかったかもしれないけど、wget は正規表現つかえないよ。正規表現がつかえるコマンドなんてもともとそんなに多くないし。 正規表現がつかえるコマンドかどうかは、 $ man コマンド名 で表示されるコマンドリファレンスのなかに正規表現のことがかいてあるからわかるとおもうよ。 あと、正規表現っていっても方言のようなものがあって、コマンドによってつかえる表現が少しずつちがうから注意してね! 正規表現を覚えるなら、とりあえず grep からでいいかな? http://linuxjm.sourceforge.jp/html/GNU_grep/man1/grep.1.html 質問の解決策は、[ANo.4] さんが回答してくれてるからとくにいらないよね。 よい Linux ライフを!

bs_hikapon
質問者

お礼

ありがとうございました。正規表現をdosのワイルドカードと誤解してしまい、ファイル名が不明でも規則に従ってwget出来る、と誤解していました。 unixは勉強し始めたばかりで、皆さんに迷惑をかけてしまいました。あれから自力でスクリプトを書いて(下記)みたのですが、やはり[ANo.4]が綺麗ですね。大変勉強になりました。 #(1)気象庁ファイルの抜き出し wget http://www.jma.go.jp/jp/quake/quake_local_index.html #(2)特定月日の行だけ抜く awk '/20110612/ {print $0}' quake_local_index.html > quake.log #(3)html部分だけ抜く $ awk '{print substr($0,25,30)}' quake.log > add_quake.log #(4)シェルスクリプト作成 cat add_quake.log | awk '{print "wget http://www.jma.go.jp/jp/quake"$1}' > jikko.sh #(5)実行 sh jikko.sh

  • astronaut
  • ベストアンサー率58% (303/516)
回答No.4

地震の一覧ページを取得して、欲しい日付のファイルをダウンロードするスクリプトを書けばよいでしょう。 ということで書いてみました。 #!/bin/bash # 前日の地震の情報を取得するスクリプト date=`date +%Y%m%d --date=yesterday` wget http://www.jma.go.jp/jp/quake/quake_local_index.html -O html.txt for html in `grep "./$date" html.txt | cut -b 26-54` do wget -p --cut-dirs=2 http://www.jma.go.jp/jp/quake/$html done

bs_hikapon
質問者

お礼

ありがとうございました。あれから自分でも考えて見よう見まねで作ってみたのですが、さすが見事なスクリプトです。大変勉強になりました。ご指導感謝します。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

httpでの通信では、一般的には、「有効なURLの一覧表」なんてものを受けとれるものではありません。 正規表現は、対象と比較してマッチするかどうかを調べるのに使うものです。 「比較対象」である「URL一覧」が無いのに、どうやって比較するのでしょう? 通常は、RSSとか、一覧表示するページとかから、正規表現にマッチするURLを抽出してそれをwgetで処理します。

bs_hikapon
質問者

お礼

申し訳ありません。正規表現の理解不足だったようです。もう少し勉強したいと思います。

回答No.2

コマンドラインに書くURLに正規表現が使えるwgetがあるんでしょうか? http://www.gnu.org/software/wget/manual/wget.html \d{9}-\d{6} の『\d』ってこれ一般的な正規表現なのでしょうか? http://www.kt.rim.or.jp/~kbk/regex/regex.html # 回答でなく質問ですみません。 # お使いのwgetが特殊(?)な実装を施したものであるのなら・・・以下略

bs_hikapon
質問者

お礼

申し訳ありません。正規表現の理解不足だったようです。もう少し勉強したいと思います。

  • localica
  • ベストアンサー率52% (202/385)
回答No.1

正規表現? リゾルバで別サイトへリダイレクトされているでしょう。 オプションをきちんと理解する方が良いです。 http://ja.m.wikipedia.org/wiki/2009%E5%B9%B4

bs_hikapon
質問者

お礼

申し訳ありません。正規表現の理解不足だったようです。もう少し勉強したいと思います。

関連するQ&A

  • yumがインストールできない

    はじめまして宜しくお願いします。 OSはCENTOS6.1です。 yum自体が入っておらずgoogleで色々検索したのですが、インストールの方法が見つかりません。 ためしにやってみたことは rpm -q yum とすると当然 package yum is not installed となってしまいます。 wget http://ftp.iij.ad.jp/pub/linux/centos/6/os/i386/Packages/yum-3.2.27-14.el6.centos.noarch.rpm とすると --2012-09-15 20:01:48-- http://ftp.iij.ad.jp/pub/linux/centos/6/os/i386/Packages/yum-3.2.27-14.el6.centos.noarch.rpm Resolving ftp.iij.ad.jp... 202.232.140.143, 202.232.140.144, 2001:240:bb8f::f:301, ... Connecting to ftp.iij.ad.jp|202.232.140.143|:80... connected. HTTP request sent, awaiting response... 404 Not Found 2012-09-15 20:01:49 ERROR 404: Not Found. となってしまい先に進めません どうぞ宜しくお願い致します。

  • 「*」が付いてる都市とついてない都市がありますが

    気象庁の地震速報を見ると http://www.jma.go.jp/jp/quake/index.html 街の名前の後ろに「*」が付いてる都市とついてない都市がありますが 違いは何でしょうか?

  • 地震速報を自動メール送信するマクロはできますか?

    地震速報のページがあります。 http://www.jma.go.jp/jp/quake/quake_sindo_index.html このページのテーブルの一番上に、 最新の地震速報が更新されていく仕組みです。 最新の地震速報が現れた瞬間に、 MS OUTLOOKでメールを送信したいのです。 そのようなマクロを作ろうとしているのですが、 新しい情報が現れた時、をどのように定義するのかがよく分かりません ※マクロの経験あります

  • IP自動更新スクリプトがうまく動作しません

    環境 FreeBSD9 IP自動更新スクリプトを作成したのですが、うまく動作しません。メールでwget not foundが10分間隔で送られてきます。 wgetコマンドが見つからないと言ってるようです。/usr/local/bin/にwgetコマンドがあります。 また、コマンドラインでもwgetを使用してダウンロードできます。 vi /usr/local/bin/ddo.sh に以下のスクリプトを作成して、実行権限を与えました。 #!/bin/sh wget -O - "http://free.ddo.jp/dnsupdate.php?dn=hogehoge&pw=hogehoge1234" >> /var/log/result.log コマンドプロンプトでddo.shを実行すると、正常にIP更新がされログにその更新内容が記載されます。 スクリプトをcrontab -eに登録しました。 */10 * * * * /usr/local/bin/ddo.sh 10分間隔で実行はされるのですが、wget not found がメールに届き、ログに更新内容の記載がありません。 何がいけないのでしょうか? よろしくお願いします。

  • Macでswfmillをインストールしたい

    こんにちわ。 いつも活用させていただいています。 当方、Mac OS 10.5.8 を使っています。 ターミナルを利用して、swfmillとゆうプログラムをインストールを行おうとしています。 いろいろなサイトを参考にして試してみたのですがうまくいきません。。 参考サイト(http://www.plusmb.jp/2008/12/05/1510.html)に記載されているとおり「wget」や「configure」、「make」といったコマンドを使ったのですが、ほとんどcommand not found と表示されまったくうまくいきません。。 本当に困っております。。 どなかたお詳しいかたご教授お願い致します!

    • ベストアンサー
    • PHP
  • Windows版『WgetPRO』

    Windows版『WgetPro』の所在ご存知の方、教えてください。 (1) http://wgetpro.sourceforge.net/ の物はLinux版です。 (2) http://www.paehl.com/open_source/?GNU_Wget は、Windows版っぽいのですが、実際に実行してみると、 ------------------ > wpro.exe mms://・・・・ ・・・ --13:53:19-- mms://■■■■■■■■■.wmv (try:19) => `■■■.wmv' Connecting to server[server_ip]:1755... connected. MMS request sent, awaiting response... OK Length: 24,376,548 [Microsoft ASF] 0% [ ] 0 --.--K/s Retrying. (20回繰り返して終わる) ------------------ と、Retryingを繰り返してダウンロードできません。 (3) http://sourceforge.net/projects/wgetpro には Operating System: All 32-bit MS Windows (95/98/NT/2000/XP), All BSD Platforms (FreeBSD/NetBSD/OpenBSD/Apple Mac OS X), All POSIX (Linux/BSD/UNIX-like OSes), Linux, OS X と書かれているのですが、置いてあるのはソースです。 おろらく(3)のWindowsコンパイルしたのが(2)なのではないかと勝手に思っています。 しかし、(2)はうまく動かないという状態が私の想像するところです。 動くWindowsバイナリがある or ソースからWindowsコンパイルの方法 をご存知の方、ご教授ください。

  • apacheで.pyファイルを扱いたい

    .pyファイルを表示しようとすると Object not found! となり、 URLの本来であれば~~.pyと表示される部分が %7B0%7D となってしまいます。 apacheが.pyファイルを実行ファイルとして認識していないんだと思うのですが どうしたら認識してくれるのか分りません。

    • ベストアンサー
    • CGI
  • Cron Daemon [root@ABCDE.dynsite.net]からのメール

    vine2.5をインストールしダイナミックDNSをminiDNSに 登録しました。IPアドレス自動アップデート`areg.php?opcode=ADD&username=ABCDE&password%0A=FGH123&host=ABCDE.dynsite.net&' を設定しメールサーバをたてました。Cron Daemon [root@ABCDE.dynsite.net]より1時間おきにメールが入ります。件名は Cron <root@pecolin> run-parts /etc/cron.hourlyです。内容-21:01:00-- http://www.minidns.net/areg.php?opcode=ADD&username=ABCDE&password%0A=FGH123&host=ABCDE.dynsite.net& => `areg.php?opcode=ADD&username=ABCDE&password%0A=FGH123&host=ABCDE.dynsite.net&' Resolving www.minidns.net... done. Connecting to www.minidns.net[123.45.67.890]:80... connected. HTTP request sent, awaiting response... 200 OK Length: unspecified [text/html] 0K 47.85 KB/s 21:01:01 (47.85 KB/s) - `areg.php?opcode=ADD&username=ABCDE&password%0A=FGH123&host=ABCDE.dynsite.net&' saved [49] この意味するところを教えてください。 また、IP自動更新は有効でこのメールを受け取らなくする方法を教えてください。

  • シフト表を自動で作成する方法

    指定した日付のシフト表を自動で作成する方法ですが、下記の方法を教えていただきました。 Sub シフト表作成() Dim org As Integer Dim dst As Integer Dim i As Integer Worksheets("週シフト表").Activate Range("C4:I4").Find(What:=Worksheets("日別").Range("C3").Value, _ LookAt:=xlWhole).Select Range(ActiveCell.Offset(2), ActiveCell.Offset(6)) _ .Copy Destination:=Worksheets("日別").Range("C6") Worksheets("日別").Activate For i = 6 To 10 If Range("C" & i).Value <> "休み" Then org = Application.WorksheetFunction.VLookup( _ Worksheets("日別").Range("C" & i), _ Worksheets("シフトマスタ").Range("B4:D6"), 2, False) dst = Application.WorksheetFunction.VLookup( _ Worksheets("日別").Range("C" & i), _ Worksheets("シフトマスタ").Range("B4:D6"), 3, False) Range(Cells(i, org - 5), Cells(i, dst - 5)).Interior.Color = vbBlue End If Next End Sub 日別のシートにシフトを作成しており、週シフトシートに、個々の日別の勤務(早番、遅番等)が記載されており、シフトマスタシートに各勤務の開始時刻を終了時刻が記載されています。 今は以下のような日別シートがあり、勤務に合わせてD列~P列間で色がつくようになっています。 _____A_______B________C_______D_______E_______F ・・・・ P 5_________氏名_____シフト___9時____10時____11時 ・・・・ 21時 6_________1さん_____早 7_________2さん_____遅 8_________3さん_____休 9_________4さん_____遅 10_______5さん_____遅 これを、1時間単位ではなく、30分単位(E列が9時30分、F列が10時、G列が10時30分・・・)にすると色の付く範囲がずれてしまいます。 コードをどのように変えれば良いかわからず困っております。 お手隙の方、いらっしゃいましたら何卒ご教授の程、お願い致します。

  • RST-FFの矛盾?

    AND, OR, NOT、そしてSRT-FFを用いた回路に、 時刻 1 2 3 A   1  1 1 B   1  1 0 C   0  1 0 D   0  1 0 S   *  * x R   *  * y Q   *  * z 時刻1,2,3の順に入力A,B,C,Dがそれぞれ真理値表に示すように加わったとき、この表のx, y, z(右下)を求めよ。 ただし、*は何らかの値をとることを示す。 ここで図は書けませんが、 AとBはANDゲートでSにつながっており Cは直接Tにつながっており BとDがORゲートで結ばれたのちNOTゲートが来てその出力がRにつながっています。 そして、QとQバーが最終的な出力です。 ここで、上の問題のおれの考えなのですが まず 時刻 1 2 3 A   1  1 1 B   1  1 0 C   0  1 0 D   0  1 0 S   1  1 x R   0  0 y T   0  1 0 Q   1  × z と表が埋まるのでx = 0, y = 1となります。 そして、なぞは2個あるのですが (i)SとTが同時に立つことってあるんですか?? (ⅱ)z って 0ですよね? 分かる方お願いします。 何か間違っている箇所、または足りない箇所ありましたら指摘お願いします。