ファイルのダウンロード
いろいろな方法で、ZIP/MP3ファイルをダウンロードしてみます。
・直接URL指定でダウンロード
・変数使用
・ダウンロードファイルを指定する
・IEブラウザ上で検索、ダウンロード、保存
・ファイル名に本日の日付を付加
・名前が毎日変わるファイルをダウンロード −NHK WORLD
・一括ダウンロード − 住所.jp CSVファイル
・一括ダウンロード − 総務省人口統計 エクセルファイル
直接URL指定でダウンロード
対象のページは、全国の住所コードや郵便番号を記したCSVファイルのダウンロードサイト「住所.jp」
まず、URLを直接指定するので、IEを開かずに直接ダウンロードします。
保存先は「デスクトップ」
定義済みの %desktop% 変数がデスクトップのパスを表し、
%desktop%\01_miyagi.zip で保存ファイルのフルパスを表せます。
|
|
|
001 ! 直接URL指定
002 IEDownload http://jusyo.jp/downloads/new/csv/csv_04miyagi.zip %desktop%\04miyagi.zip
コードの使用方法
変数使用
ファイル名を変数に入れて、少しだけ融通が効くようにします。
001 ! ファイルを可変
002 Set filename 04miyagi.zip
003 IEDownload http://jusyo.jp/downloads/new/csv/csv_%filename% %desktop%\%filename%
コードの使用方法
ダウンロードファイルを指定する
インプットボックスを使用して、ダウンロードするファイルを指定します。
入力が空白の場合は「キャンセル」とみなして、何もしません。
001 ! ファイルを入力
002 Set // インプットボックスからファイル名を入力 filename inputbox("ダウンロードするファイルを指定 例:04miyagi.zip","04miyagi.zip","04miyagi.zip")
003 If // 入力あり? %filename%<>""
004 IEDownload // ダウンロード http://jusyo.jp/downloads/new/csv/csv_%filename% %desktop%\%filename%
005 End-If
コードの使用方法
I
IEブラウザ上で検索、ダウンロード、保存
IEに対象ページを表示し、指定したキーワードの位置からダウンロードします。
対象ページの指定箇所をマウスで直接ダウンロードするので、本体フォームが邪魔にならないように、
実行中はタスクトレイに収納します。(INITコマンド)
001 INIT 145 418 645 697 1,0,1,600000,0,MyData
002 Set // キーワード keyword inputbox("ダウンロードするキーワードを入力 例:miyagi","キーワード入力","miyagi")
003 Set // 対象イページのURL url http://jusyo.jp/csv/new.php
004 Set // 保存ファイル名 filename %desktop%\%keyword%.zip
005 !
006 If // キーワードが入力された? %keyword% <> ""
007 IENavigate // ウェブページを開く %url% NewWindow
008 IEPoint // キーワードをポイント %keyword% 表示文字
009 IEDownload // ポイント位置からダウンロード %filename%
010 MSG_BOX // 完了メッセージ ダウンロード&保存完了 %filename%
011 End-If
コードの使用方法
ファイル名に本日の日付を付加
ファイル名に本日の日付を指定の書式で付加します。
日付の形式は、 miyagi(20140201).zip の形式とします。
書式:
%keyword%Format(Now(),"(yyyymmdd)")
Now() 関数で現在の日時を表すシリアル値(例:41669.243256)が返され、
Format() 関数にて、カッコで囲まれた、(20140201) の形式で日付文字列に編集されます。
y:年 m:月 d:日 yyyyyは4桁の年を表す
Now():現在の日時を表すシリアル値を返す関数
format():数値を指定の書式の文字列に編集する関数
001 INIT 145 418 645 697 1,0,1,600000,0,MyData
002 Set // キーワード keyword inputbox("ダウンロードするキーワードを入力 例:miyagi , akita","キーワード入力","miyagi")
003 Set // 対象イページのURL url http://jusyo.jp/csv/new.php
004 Set // 保存ファイル名 filename %desktop%\%keyword%Format(Now(),"(yyyymmdd)").zip
005 !
006 If // キーワードが入力された? %keyword% <> ""
007 IENavigate // ウェブページを開く %url% NewWindow
008 IEPoint // キーワードをポイント %keyword% 表示文字
009 IEDownload // ポイント位置からダウンロード %filename%
010 MSG_BOX // 完了メッセージ ダウンロード&保存完了 %filename%
011 End-If
コードの使用方法
名前が毎日変わるファイルをダウンロード − NHK WORLD
日付がファイル名の一部になっているファイルをダウンロードする。
ここでは、例として、NHK WORLD の ポッドキャストページから音声ファイル(MP3)をダウンロードします。
ファイル名は、 20140202140100_1_english.mp3 のような形式。
日付がファイル名の一部になっているため、固定したファイル名を用いることはできません。(ピンク色の部分が毎日変化する)
そこで、上記は昨日の日付となっているので、ファイル名は本日の日付−1から作成することにします。本日を2014年2月3日8時とすると、
昨日の日付文字列は、 Format(Now()-1,"yyyymmdd") で作成できます。
Now() は現在の日時(シリアル値)を返す関数。
よって、ファイル名は、 Format(Now()-1,"yyyymmdd)140100_1_english.mp3
それぞれ変数を以下のように定義すると、
日付 :dt
ファイル名 :filename
サイトのURL :base_url
ファイルのURL :url
保存ファイル名:save_filename (デスクトップに保存)
dt : Now()-1
filename : Format(%dt%,"yyyymmdd)140100_1_english.mp3
base_url : http://www9.nhk.or.jp/rj/podcast/mp3/
url : %base_url%%filename%
save_filename : %desktop%\%filename%
実行すると、下図のように変数内容を書き出して、ファイル名やURLが正しいかを確認できるようにしておきます。
プログラムリスト
001 INIT 398 500 877 774 1,0,1,600000,0,MyData
002 !
003 ! 名前が毎日変わるファイルをダウンロード
004 !
005 Set // ベースURL base_url http://www9.nhk.or.jp/rj/podcast/mp3/
006 Set // 対象日付 dt now()-1
007 Set // ファイル名 filename format(%dt%,yyyymmdd)140100_1_english.mp3
008 Set // ファイルのURL url %base_url%%filename%
009 Set // 保存ファイル名 save_filename %desktop%\%filename%
010 !
011 SHOW_MSG 0 2760 2055 15900 5385 0,-2147483643,0,0,-2147483640,12,MS ゴシック,False,False,False,False, デバッグ表示
ファイル名: %filename%
ダウンロードURL: %url%
保存ファイルパス:%save_filename%01001
012 !
013 IEDownload // ダウンロード %url% %save_filename%
コードの使用方法
時刻によってファイル名が切り替わる
ダウンロードページ: 前項と同じく、NHK WORLD の ポッドキャストページから音声ファイル(MP3)をダウンロード
前項のファイル名をよく見ると、20140201140100_1_english.mp3 のピンク部分は時刻を表しています。
すなわち、このポッドキャストは、14時01分00秒に更新されることを意味しています。
実際には、下記のように1日2回更新されています。
20140201140100_1_english.mp3
20140201210100_1_english.mp3
よって、ファイル名の決定は3つに分かれます。
14時01分より前は
前日の日付の 20140131210100_1_english.mp3
14時01分以降
21時01分より前
当日の日付の 20140201140100_1_english.mp3
21時01分以降
当日の日付の 20140201210100_1_english.mp3
前日日付は、日にちから1を引くことで得られます
時刻の判定は、 (Now()-Int(Now()) < Timeserial(14,1,0) で判定。
式の意味:
Timeserial(14,1,0) は、14時01分00秒を表すシリアル値を返します。
日時のシリアル値では、整数部が日にち、小数部が時刻を表す。
14時01分は、0.584027777777778 となる。
Now()-Int(Now()) は、現在の日時の小数部(時刻を表す)を取り出しています。
下記の012〜019行がファイル名を決定する処理
001 INIT 398 500 877 774 1,0,1,600000,0,MyData
002 !
003 ! 名前が毎日変わるファイルをダウンロード
004 ! 14:01〜21:00 当日 1401
005 ! 21:01〜24:00 2101
006 ! 00:00〜14:00 前日 2101
007 !
008 Set // ベースURL base_url http://www9.nhk.or.jp/rj/podcast/mp3/
009 Set // 対象日付 dt Now()
010 Set // 年月日 既定:当日 ymd %dt%
011 Set // 時分 既定:210100 hn 210100
012 !
013 ! ファイル名の決定
014 If // 14時01分以降? (Now()-Int(Now())) >= Timeserial(14,1,0)
015 Set // 14時より後 → 当日 ymd %dt%
016 If // 21時01分より前? (Now()-Int(Now())) < Timeserial(21,1,0)
017 Set // 1401 hn 140100
018 End-If
019 Else // 14時1分より前
020 AddVar // 前日 %ymd% -1
021 End-If
022 Set // ファイル名 filename Format(%ymd%,"yyyymmdd")%hn%_1_english.mp3
023 !
024 Set // ファイルのURL url %base_url%%filename%
025 Set // 保存ファイル名 save_filename %desktop%\%filename%
026 !
027 SHOW_MSG // デバッグ用情報表示 0 2760 2055 15900 5385 0,-2147483643,0,0,-2147483640,12,MS ゴシック,False,False,False,False, デバッグ表示
ファイル名: %filename%
ダウンロードURL: %url%
保存ファイルパス:%save_filename%01001
028 !
029 IEDownload // ダウンロード %url% %save_filename%
コードの使用方法
既存ファイルがあったら中止
ダウンロードページ: 前項と同じく、NHK WORLD の ポッドキャストページから音声ファイル(MP3)をダウンロード
既にダウンロード済みのファイルが在ったら処理を中止します。
ファイルの有無判定は、029行目
GetFileCount(ファイル名) は指定ファイル名(ワイルドカード使用可)の個数を返し、
返却値(ファイル個数)が0個以上であれば処理を中止(QUIT)します。
001 INIT 398 500 877 774 1,0,1,600000,0,MyData
002 !
003 ! ファイルが既に在る場合は処理を中止
004 ! ファイル名 14:01〜21:00 当日 1401
005 ! 21:01〜24:00 2101
006 ! 00:00〜14:00 前日 2101
007 !
008 Set // ベースURL base_url http://www9.nhk.or.jp/rj/podcast/mp3/
009 Set // 対象日付 dt Now()
010 Set // 年月日 既定:当日 ymd %dt%
011 Set // 時分 既定:210100 hn 210100
012 !
013 ! ファイル名の決定
014 If // 14時01分以降? (Now()-Int(Now())) >= Timeserial(14,1,0)
015 Set // 14時より後 → 当日 ymd %dt%
016 If // 21時01分より前? (Now()-Int(Now())) < Timeserial(21,1,0)
017 Set // 1401 hn 140100
018 End-If
019 Else // 14時1分より前
020 AddVar // 前日 %ymd% -1
021 End-If
022 Set // ファイル名 filename Format(%ymd%,"yyyymmdd")%hn%_1_english.mp3
023 !
024 Set // ファイルのURL url %base_url%%filename%
025 Set // 保存ファイル名 save_filename %desktop%\%filename%
026 !
027 SHOW_MSG // デバッグ用情報表示 0 2760 2055 15900 5385 0,-2147483643,0,0,-2147483640,12,MS ゴシック,False,False,False,False, デバッグ表示
ファイル名: %filename%
ダウンロードURL: %url%
保存ファイルパス:%save_filename%01001
028 !
029 If // 既存ファイル在り? GetFileCount(%save_filename%) > 0
030 MSG_BOX // 確認メッセージ表示 4 %save_filename%
は、既に存在します。
上書きダウンロードしますか?
031 If // いいえ? %MSGBOX% = 7
032 QUIT // 終了
033 End-If
034 End-If
035 !
036 IEDownload // ダウンロード %url% %save_filename%
コードの使用方法
上書きしない−既存ファイルがあったら中止(関数型でパラメータ指定) エキスパート 14.51版以降
ダウンロードページ: 前項と同じく、NHK WORLD の ポッドキャストページから音声ファイル(MP3)をダウンロード
関数のパラメータにて、上書きダウンロードしないように指定してダウンロードする。
プログラムで判定しないので、少し簡素になる。
ファイルダウンロードは、027行目
GetIeDownload(URL,保存先パス,上書きスイッチ)
上書きスイッチ:省略−上書き 1:既存ファイルが在る場合はダウンロードしない
001 INIT 398 500 877 774 1,0,1,600000,0,MyData
002 !
003 ! ダウンロード
004 ! 上書きしない
005 !
006 Set // ベースURL base_url http://www9.nhk.or.jp/rj/podcast/mp3/
007 Set // 対象日付 dt Now()
008 Set // 年月日 既定:当日 ymd %dt%
009 Set // 時分 既定:210100 hn 210100
010 !
011 ! ファイル名の決定
012 If // 14時01分以降? (Now()-Int(Now())) >= Timeserial(14,1,0)
013 Set // 14時より後 → 当日 ymd %dt%
014 If // 21時01分より前? (Now()-Int(Now())) < Timeserial(21,1,0)
015 Set // 1401 hn 140100
016 End-If
017 Else // 14時1分より前
018 AddVar // 前日 %ymd% -1
019 End-If
020 Set // ファイル名 filename Format(%ymd%,"yyyymmdd")%hn%_1_english.mp3
021 !
022 Set // ファイルのURL url %base_url%%filename%
023 Set // 保存ファイル名 save_filename %desktop%\%filename%
024 !
025 SHOW_MSG // デバッグ用情報表示 0 2760 2055 15900 5385 0,-2147483643,0,0,-2147483640,12,MS ゴシック,False,False,False,False, デバッグ表示
ファイル名: %filename%
ダウンロードURL: %url%
保存ファイルパス:%save_filename%01001
026 !
027 Set // ダウンロード(上書きしない) rc GetIeDownload(%url%,%save_filename%,1)
028 MSG_BOX // 結果表示 ダウンロード結果 = %rc%
0:正常
1:既存ファイル在り
-1:パラメータエラー
-2:ダウンロードエラー
コードの使用方法
指定更新日以降のファイル − VOA(Voce of America Pod cast) エキスパート 14.56版以降
VOAのPODCASTページから、カテゴリごとに下記の規則によりMP3ファイルをダウンロードします。
このサイトは海外のニュースを英語で聞きたい場合にお役にたちます。
ニュース朗読の速度は比較的ゆっくりとしていて、発音も聞き取りやすく、初心者にとってはとても良いサイトです。
また、英語学習のみならず、以下のような、分野ごとに掘り下げたテーマで解説していて、一般教養としても有意義です。
・科学関連
・アメリカの歴史
・英単語の起源と歴史
などなど
ダウンロードの概要
PODCASTのページから、指定したサイトのMP3ファイルを一括してダウンロードします。
ダウンロードの仕様
・ファイルの日付を指定:
ファイルの更新日付が指定日以降(遡及日数を指定する 0:当日 1:1日前から・・)
・保存ファイル名:
通番_サイト名_更新年月日_時分秒.mp3
・上書きはしない:
同じファイルがある場合はダウンロードしない
ダウンロードするカテゴリは右記赤枠
他にもありますので、好みで追加してください。
Voice Of America のサイト構成
VOA (Voice of America) は歴史のあるアメリカの国営ラジオ放送です。
そのサイトの中のLearninng English は英語が第一言語でない人達のためにも、わかりやすいラジオ番組を提供しようという目的で作られ、アメリカの生活や世界のニュースを聞きながら英語を学ぶことができます。
VOAのPODCASTページでは、下図のようにカテゴリで分別され、クリックすると記事のページ(ダウンロード)にジャンプするようになっています。
(下図の左赤枠内をクリックすると、右側のような個別の記事ページにジャンプ)
それぞれのURLは統一性がないので、直接ダウンロードサブルーチンのパラメータで指定します。
個別ページのHTMLソースを見ると、ダウンロードするMP3ファイルには、下記のような規則性があります。
xxを任意の文字、nを任意の数字とすると、
http://xxxLERE/nnnn/nn/nn/xxx.mp3
の形式のURL。これを正規表現で記述すると、
http:\/\/.+?LERE\/\d\d\d\d\/\d\d\/\d\d\/(.+?\.mp3)
となります。
\d:任意の1つの数字
\/:スラッシュは特殊記号なので「\」でエスケープ
.+:任意の文字列の最短マッチ
処理概要
ほとんどはサブルーチン(DL_Sub)で行います。
サブルーチンへのパラメータは、
サイト名 , 保存フォルダパス , 遡及日数 , URL
の4つ。
通番_サイト名 |
|
遡及日数 |
URL |
01_In-the-News | |
6 |
http://learningenglish.voanews.com/archive/learningenglish-programs-radio-in-the-news/latest/1577/1577.html |
02_As-It-Is | |
1 |
http://learningenglish.voanews.com/archive/as-it-is/latest/3521/3521.html |
03_Science-in-the-News | |
6 |
http://learningenglish.voanews.com/archive/learningenglish-programs-radio-science-in-the-news/latest/1579/1579.html |
04_The-Making-of-a-Nation | |
6 |
http://learningenglish.voanews.com/archive/learningenglish-programs-radio-making-of-a-nation/latest/979/979.html |
05_Words-and-Their-Stories | |
6 |
http://learningenglish.voanews.com/archive/learningenglish-programs-radio-words-stories/latest/987/987.html |
06_American-Mosaic | |
6 |
http://learningenglish.voanews.com/archive/learningenglish-programs-radio-american-mosaic/latest/986/986.html |
07_This-Is-America | |
6 |
http://learningenglish.voanews.com/archive/learningenglish-programs-radio-this-is-america/latest/1580/1580.html |
以下、プログラム
保存フォルダの指定は、7行目。
ここではデスクトップを指定していますが、コメントアウトとしている8行目のように記述すれば、リムーバブルディスクも指定できます。
(リムーバブルディスクは割り当てられるドライブレター(C,D,E,F・・)が一定でないので、ドライブ名で指定。
ディスク名は、エクスプローラーで指定可。名前を、C , Dのようにすると、通常のドライブ C , Dとなります。)
実行すると、デスクトップ上に「01_VOA」のフォルダが作成され、その中にファイルが自動でダウンロードされていきます。
所要時間は、10〜20分くらい(回線速度に依存)
001 ! ファイルのダウンロード
002 ! 対象:VOA - Voice of America - Pod Cast
003 ! ------------------------------------------------
004 !
005 ! 指定遡及日以降を全ダウンロード
006 Set // 正規表現パターン pattern http:\/\/av.voanews.com\/clips\/LERE\/\d{4}\/\d{2}\/\d{2}\/.+?\.mp3
007 Set // 保存フォルダパス FolderPath %Desktop%\01_VOA
008 ! Set // 保存フォルダパス FolderPath GetDriveLetter("MT-MDISK8"):\01_VOA
009 Set // 開始時刻 StTime Now()
010 !
011 ! サブルーチンコール
012 Call // In-the-News "01_In-the-News" , 6 , %FolderPath% , http://learningenglish.voanews.com/archive/learningenglish-programs-radio-in-the-news/latest/1577/1577.html DL_SUB
013 Call // As-It-Is "02_As-It-Is" , 1 , %FolderPath% , http://learningenglish.voanews.com/archive/as-it-is/latest/3521/3521.html DL_SUB
014 Call // Science-in-the-News "03_Science-in-the-News" , 6 , %FolderPath% , http://learningenglish.voanews.com/archive/learningenglish-programs-radio-science-in-the-news/latest/1579/1579.html DL_SUB
015 Call // The-Making-of-a-Nation "04_The-Making-of-a-Nation" , 6 , %FolderPath% , http://learningenglish.voanews.com/archive/learningenglish-programs-radio-making-of-a-nation/latest/979/979.html DL_SUB
016 Call // Words-and-Their-Stories "05_Words-and-Their-Stories" , 6 , %FolderPath% , http://learningenglish.voanews.com/archive/learningenglish-programs-radio-words-stories/latest/987/987.html DL_SUB
017 Call // American-Mosaic "06_American-Mosaic" , 6 , %FolderPath% , http://learningenglish.voanews.com/archive/learningenglish-programs-radio-american-mosaic/latest/986/986.html DL_SUB
018 Call // This-Is-America "07_This-Is-America" , 6 , %FolderPath% , http://learningenglish.voanews.com/archive/learningenglish-programs-radio-this-is-america/latest/1580/1580.html DL_SUB
019 ! Call // People-in-America "People-in-America" , 6 , %FolderPath%,http://learningenglish.voanews.com/archive/learningenglish-programs-radio-people-in-america/latest/1578/1578.html DL_SUB
020 ! Call // Learning-English-Broadcast "Learning-English-Broadcast" , 6 , %FolderPath% , http://learningenglish.voanews.com/archive/special-english-broadcast/latest/978/1689.html DL_SUB
021 Jump // → 終了 QUIT
022 !
023 QUIT QUIT // 終了
024 !
025 ! ============================================
026 DL_SUB // ダウンロード&保存サブ
027 ! パラメータ
028 ! サイト名,遡及日,保存パス,サイトURL
029 ! --------------------------------------------
030 Set // サイト名 Site %user_arg1%
031 Set // 遡及日数 0:当日 1:前日から befor %user_arg2%
032 Set // 保存フォルダパス folder_path %user_arg3%
033 Set // URL url %user_arg4%
034 !
035 Set // 開始日 stdate int(now())-%befor%
036 Set // HTML取得 html GetWebDoc(%url%)
037 If %html%=""
038 MSG_BOX HTMLドキュメント取得エラー
039 QUIT
040 End-If
041 !
042 Set // マッチ個数 cnt GetRegExCount(%html%,%pattern%)
043 If // チェック %cnt% = 0
044 SHOW_MSG // マッチ無し ………
045 QUIT // 終了
046 End-If
047 !
048 FolderCreate // フォルダ作成 %folder_path%
049 !
050 Set // ループカウンタ n
051 For // マッチ個数分ループ n;1;%cnt%
052 Set // ファイルURL file_url GetRegEx(%html%,%pattern%,%n%)
053 !
054 ! 日付処理
055 Set // ファイル更新日付取得 file_date GetWebLastModefied(%file_url%)
056 !
057 ! ファイルパス処理
058 Set // Web上のファイル名取得 file_name_web GetRegEx(%file_url%,".+?LERE\/\d\d\d\d\/\d\d\/\d\d\/(.+?\.mp3)")
059 Set // 保存ファイル名作成 file_name %Site%_format(%file_date%,"yyyymmdd-hhnnss")_%file_name_web%
060 Set // 保存ファイルパス作成 file_path %folder_path%\%file_name%
061 !
062 ! ダウンロード要かを判定
063 ! 指定日以降のファイル かつ
064 ! 既存の同一ファイルが場合にダウンロードする
065 !
066 Set // ダウンロード? dl "Skip"
067 If // 指定日以降 かつ 既存なし? ( %file_date% >= %stdate% ) && ( GetFileCount(%file_path%)=0 )
068 Set dl ダウンロード
069 End-If
070 SHOW_MSG // 処理中詳細表示 ……
071 If %dl% = "ダウンロード"
072 IEDownload %file_url% %file_path%
073 End-If
074 !
075 Next-For
076 !
077 Return // 戻る
プログラム説明
42行目 |
|
HTMLソースから、MP3ファイルのURL個数を正規表現により取得 |
48行目 |
|
フォルダを生成。無ければ作り、既存が有ったら何もしない |
51行目 |
|
URL個数分ループ |
52行目 |
|
MP3ファイルのURLを正規表現で取得 |
58〜60 |
|
WEB上のファイル名取得、保存ファイル名/パス名作成 |
61行目 |
|
処理中情報の表示 |
66〜73 |
|
ダウンロードすべきかを判定
ファイルの更新日が指定日(遡及日数)以降、かつ
既存ファイルが無い場合にのみダウンロードする |
|
|
|
コードの使用方法
一括ダウンロード − 住所.jp CSVファイル エキスパート 14.40版以降
住所.jpのサイトから、正規表現を使用して、郵便番号、住所コードのファイルを一括ダウンロードします。
ダウンロードするファイルはCSV形式。
ダウンロード対象は、HTMLソースから調べて
<span class='dl-filename'><a href='xxxxxx'> の xxx 部分
保存場所は、デスクトップに作成する「jusyo」フォルダ |
|
|
コードの使用方法
ダウンロードするファイルの部分をHTMLソース (GetWebDoc()関数で取得)では、下記のようになっています。
<span class='dl-kenmei'>北海道</span><br /><span class='dl-filename'><a href='../downloads/new/csv/csv_01hokkai.zip'>csv_01hokkai.zip</a><br />(227,965byte)</span>
ここで取り出したい情報は、赤色の部分
それぞれ、
ファイルの説明、ファイルのURL、ファイル名、サイズ
これを、正規表現関数(GetRegExCount,GetRegEx)を使用して取り出します。
上記のHTMLソースから、正規表現パターンは下記のように記述できます。
(実際にはもう少し短く記述できますが、わかりやすくするため下記のようにしています。)
<span class='dl-kenmei'>(.+?)</span>(?:.|\n)*?<span class='dl-filename'><a href='(.+\.zip)?'>(.+\.zip)?</a>.*?(\(.+?\))</span>
赤色の部分が、それぞれ、ファイルの説明、ファイルのURL、ファイル名、サイズ となり、
GetRegExCountによって、ヒットした(ダウンロードすべきファイルの)個数、
GetRegExによって、それぞれの個別の情報が取得され、定義済み変数 $1 , $2 , $3 , $4 にマッチ順で格納されます。
(?:.|\n)* は改行を含む任意の0個以上文字列を表す。ただしキャッチアップされない(変数 $n には格納されない)
(\(.+?\)) は括弧「(」で始まり括弧「)」で終わる1個以上の任意の文字列を表す。\はメタ文字をエスケープ(打ち消す)記号
注意点
・ダウンロードするファイルのURLは「../」のように相対パス指定になっているので、
絶対パスに変換しておく必要があります。
ダウンロードサイトのURLが
http://jusyo.jp/csv/ なので、
上記の場合のファイルのURLは、
http://jusyo.jp/csv/../downloads/new/csv/csv_zenkoku.zip
で表すことができます。
(http://jusyo.jp/downloads/new/csv/csv_zenkoku.zip と同等)
変数を使う場合、ダウンロードサイトのURLを url_base に入れ、
正規表現で取得したファイルのパス $2 と連結することで、
ファイルの絶対パスは、%url_base%%$2% と表せます。
処理手順
4〜7
10〜13
15
18
19
22
25〜41
44〜45
|
|
説明表示と実行確認
各種変数定義、初期値設定
ウェブページのドキュメントソースを取得
正規表現でダウンロード対象を見つける正規表現検索パターン
検索パターンから対象の個数を取得
保存用のフォルダを作成
個数分ループしてファイルをダウンロード
分かり易くするために進捗状況を表示
ダウンロードが終わったら、フォルダ内容と一覧表を表示する
|
実行中の様子
ダウンロードファイルごとに、全体における何番目の処理中であるか、
また、その個別情報を左上隅に表示し、ダウンロード状況を中央に表示(IEDownloadコマンド内で自動表示)します。
ダウンロードが終わると、保存先フォルダを開き、また、ファイルの一覧を表示します。
プログラムリスト
001 !
002 ! 「住所.jp」のCSVファイルを一括ダウンロード
003 !
004 MSG_BOX // 説明表示&実行確認 1 日本郵便配布の住所CSVを元にした住所データ、住所コード、住所マスタを
「住所.jp」から、一括ダウンロードします。
ダウンロードするファイル形式はZIP圧縮ファイル、
ダウンロード先は、デスクトップに作成する「jusyo」フォルダ。
ダウンロードに要する時間は、PCや回線の処理速度によりますが、
30秒(速い場合)〜3分(遅い場合)くらいです。
開始してよろしいですか?
005 If // キャンセル? %MSGBOX% = 2
006 QUIT
007 End-If
008 !
009 ! 変数定義&初期値セット
010 Set // ダウンロードURL url_base http://jusyo.jp/csv/
011 Set // ページURL url %url_base%new.php
012 Set // 保存先 folder %desktop%\jusyo
013 Set // カウンタ n 1
014 !
015 Set // ページHTML取得 1 0 html GetWebDoc(%url%,UTF8)
016 ! SHOW_MSG // デバッグ用−HTML表示 0 765 300 13155 9225 0,-2147483643,0,0,-2147483640,12,MS Pゴシック,False,False,False,False, %html%01101
017 !
018 Set // 正規表現−ダウンロードファイル reg_pattern (.+?)(?:.|\n)*?(.+\.zip)?.*?(\(.+?\))
019 Set // マッチする個数取得 cnt GetRegExCount(%html%,%reg_pattern%)
020 Set // 検知文字列を格納する変数 S
021 !
022 FolderCreate // フォルダ作成 %folder%
023 !
024 ! ダウンロードループ
025 Do-While // マッチ個数分ループ %cnt% >= %n%
026 !
027 Set // 正規表現検索 rc GetRegEx(%html%,%reg_pattern%,%n%)
028 // 変数に値をセット
029 Set // 都道府県名 kenmei %$1%
030 Set // ダウンロードURL url_dl %url_base%%$2%
031 Set // ファイル名 filename %$3%
032 Set // ファイルサイズ size %$4%
033 !
034 SHOW_MSG // 進捗状況表示 0 15 15 6465 2895 0,-2147483643,0,0,-2147483640,20.25,MS Pゴシック,False,False,False,False,
進捗:%n% / %cnt% %kenmei%
%filename% %size%00000
035 IEDownload // ダウンロード %url_dl% %folder%\%filename%
036 !
037 Set // 一覧作成 S %S% %kenmei% {tab} %url_dl% {tab} %$2% {tab} %size% byte {enter}
038 !
039 AddVar // カウンタアップ %n% 1
040 !
041 WLoop
042 !
043 ! 結果表示
044 AP_Open // フォルダを開く 1 %folder%
045 SHOW_MSG // 一覧表示 0 4125 3480 16185 10695 0,14942152,0,0,-2147483640,12,MS ゴシック,False,False,False,False, %S%01101
一括ダウンロード − 総務省人口統計 エクセルファイル エキスパート 14.40版以降
総務省統計局のサイトから、人口統計のファイルを一括ダウンロードします。
ダウンロードするファイルはエクセル(xls)形式。
保存先は「デスクトップ」に作成する「pop」フォルダ
HTMLソースファイル
<a href="zuhyou/n0200100.xls"><strong>人口の推移と将来人口</strong>(エクセル:62KB)</a>
正規表現パターン
<a href=\x22(.+\.xls)?\x22><strong>(.+?)</strong>(エクセル:([\d,\,]+)?KB)</a>
ここでは、ファイル名を、正規表現により取得した表示文字列+.xls
としています。
ファイル名をダウンロードパスのファイル名とするには、
24行目において変数 filename に格納する値を
GetRegEx(%url_dl%,"[^/]+$") とします。
30行目も少し変更要。
ただし、ファイル名は単なる連番数字となり、ファイル名からは内容がわからなくなります。
補足:
上記の正規表現 [^/]+$ は、行末から見て
「/」(スラッシュ)以外の1個以上連続する文字列
を意味します。
|
|
|
保存されたファイル
コードの使用方法
プログラムリスト
001 !
002 ! 総務省人口統計
003 !
004 MSG_BOX // 説明表示&実行確認 1 総務省統計局のサイトから、人口統計のファイルを一括ダウンロードします。
ダウンロードするファイル形式はエクセルファイル(xls)、
ダウンロード先は、デスクトップに作成する「pop」フォルダ。
ダウンロードに要する時間は、PCや回線の処理速度によりますが、
30秒(速い場合)〜3分(遅い場合)くらいです。
開始してよろしいですか?
005 If // キャンセル? %MSGBOX% = 2
006 QUIT
007 End-If
008 !
009 Set // ダウンロードベースURL url_base http://www.stat.go.jp/data/nihon/
010 Set // ページURL url http://www.stat.go.jp/data/nihon/02.htm
011 Set // WEB HTML 1 0 html GetWebDoc(%url%,shiftjis)
012 Set // 保存フォルダ folder %desktop%\pop
013 !
014 ! SHOW_MSG // HTML表示(デバッグ用) 0 2655 645 16575 10530 0,-2147483643,0,0,-2147483640,12,MS Pゴシック,False,False,False,False, %html%01100
015 !
016 Set // 正規表現パターン reg_pattern (.+?)(エクセル:([\d,\,]+)?KB)
017 Set // マッチ個数 cnt GetRegExCount(%html%,%reg_pattern%)
018 Set // カウンタ n 1
019 Set // 検知文字列 S
020 !
021 FolderCreate // フォルダ作成 %folder%
022 !
023 ! ダウンロードループ 個数分
024 !
025 Do-While // マッチ個数分ループ %cnt% >= %n%
026 !
027 Set // 正規表現検索 rc GetRegEx(%html%,%reg_pattern%,%n%)
028 Set // ダウンロードURL url_dl %url_base%%$1%
029 Set // ファイル名 filename %$2%
030 ! Set // ファイル名 filename GetRegEx(%url_dl%,"[^/]+$")
031 Set // ファイルサイズ size %$3%
032 !
033 SHOW_MSG // 進捗状況 0 15 15 6465 2895 0,-2147483643,0,0,-2147483640,20.25,MS Pゴシック,False,False,False,False,
進捗:%n% / %cnt%
%filename% %size% KB00000
034 !
035 IEDownload // ダウンロード %url_dl% %folder%\%filename%.xls
036 ! IEDownload // ダウンロード %url_dl% %folder%\%filename%
037 !
038 Set // 一覧作成 S %S% %filename% {tab} %url_dl% {tab} %$2% {tab} %size% Kbyte {enter}
039 AddVar // カウンタアップ %n% 1
040 !
041 WLoop
042 !
043 ! 後処理−結果表示
044 !
045 AP_Open // フォルダを開く 1 %folder%
046 SHOW_MSG // 結果一覧表示 0 660 1515 18105 8730 0,16777183,0,0,-2147483640,12,MS ゴシック,False,False,False,False, %S%01101