2023/08/18

HTTP でファイルをダウンロード

Notes 10.x 以降、LotusScript の NotesHTTPRequest クラスが提供されるようになり、LotusScript からWEB の世界にアクセスしやすくなりました。このメソッドを使用するとインターネット上の様々なサービスにアクセスでき、様々なリソースを取得できます。

NotesHTTPRequest (LotusScript)


このメソッドが提供されて、最初に利用したのが、日本郵便が毎月公開している郵便番号データのダウンロードです。以前の Project KEEP 体験 の連載で、事例として利用した『郵便番号マスタ』の元データとなる CSV ファイルです。

郵便番号データダウンロード


日本郵便のサイトでは、全国一括と県別の全件データがあります。また、全国に限っては差分データも提供されています。このデータを nsf に取り込み、他のノーツアプリケーションから利用しています。

社内にデータがあると何かと便利なのですが、毎月データを更新するという処理が発生します。その際に最初に発生するのが CSV ファイルのダウンロードです。


郵便番号データのダウンロード

ということで、NotesHTTPRequest クラスを利用したダウンロードプログラムを作成したので紹介します。サンプルプログラムなので、URL や ファイルの保存パスなどはハードコーディングとしています。

Option Declare

Sub Initialize
   Dim ns As New NotesSession
   Dim nhttp As NotesHTTPRequest
   Dim nst As NotesStream
   Dim sFileName As String
   Dim sURL As String
   Dim vReturn As Variant

   'パラメータの設定
   sFileName = "ken_all.zip"
   sURL = "https://www.post.japanpost.jp/zipcode/dl/oogaki/zip/" & sFileName

   'HTTP リクエストの実行
   Set nhttp = ns.CreateHTTPRequest()
   nhttp.TimeOutSec = 120
   vReturn = nhttp.Get(sURL)

   'ファイルの保存
   Set nst = ns.CreateStream
   Call nst.Open("c:\lotus\" & sFileName, "binary")
   Call nst.write(vReturn)
   Call nst.close()
End Sub

LotusScript エージェントを作成して実行すると、鳥取県の郵便番号データが PC 内に保存されます。


ただ、このプログラムは1点問題があります。それは、大きなファイルがダウンロードできないことです。例えば、ダウンロードするファイルを全国版に変更します。

   sFileName = "ken_all.zip"

実行するとエラーが発生して、ダウンロードできません。


このエラーについては、すでに技術情報が出ていて、ダウンロードするファイルサイズが大きすぎることが原因のようです。

NotesHTTPRequest でサイズが 64KB を超えるファイルをダウンロードすることができない


技術情報内には Java を使った回避策が提案されていますが、サンプルコードは掲載されていませんね。私は、Java 使いではないので、LotusScript 登場の頃から利用していた”いにしえの呪文”に戻しました。


今の時代 64 KB を大きすぎるというのは憚られますね。昭和じゃないんだから... フロッピーディスクにもいっぱい入るサイズですよね(笑)

そんな背景から、私はこの問題は早々に改善されると思っています。すでに数年待ってるけど...


ということで、いにしえの呪文の消費期限はもう切れそうです。今のうちなので、次回、その方法を紹介します...

0 件のコメント:

コメントを投稿