ファイルのダウンロード

いろいろな方法で、ZIP/MP3ファイルをダウンロードしてみます。

直接URL指定でダウンロード
変数使用
ダウンロードファイルを指定する
IEブラウザ上で検索、ダウンロード、保存
ファイル名に本日の日付を付加

名前が毎日変わるファイルをダウンロード −NHK WORLD
時刻によってファイル名が切り替わる
既存ファイルが在ったら中止
上書きしないようにダウンロード関数を使用

指定更新日以降のファイル − VOA(Voce of America Pod cast)

一括ダウンロード − 住所.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