第17回 SORACOM公式ブログ

ソラコム公式ブログ

SORACOM Harvest Filesにアップロードされた大量のファイルをまとめてダウンロードする方法

桶谷(takuya)/ソラコム

  • この記事をはてなブックマークに追加
  • 本文印刷

 本記事はソラコムが提供する「SORACOM公式ブログ」に掲載された「SORACOM Harvest Filesにアップロードされた大量のファイルをまとめてダウンロードする方法」を再編集したものです。

 はじめまして、こんにちは。ソリューションアーキテクトの桶谷(ニックネーム: takuya)です。

 今回はSORACOM Harvest FilesにSORACOM APIを用いてアクセスして大量のファイルをダウンロードする方法をご紹介します。

SORACOM Harvest Files とは

 SORACOM Harvest FilesはIoTデバイスからのデータを収集、可視化およびファイルを保存するSORACOM Harvestの機能のひとつです。Harvest Filesは主に画像やログなどのファイルを扱います。例えばIoTデバイスに接続されたカメラの画像やログファイルなどIoTデバイスで収集した「ファイル」をSORACOMに保存できます。またアップロードするファイルパスにIMSIやタイムスタンプといったメタ情報を自動的に付与することができます。

概要や用途、SORACOM Lagoonとの連携

 SORACOM Harvest Files(以下、Harvest Files)は2019年7月2日よりサービスを開始しており、多くのお客さまにご利用いただいています。

 用途としては先に挙げたIoTデバイスからファイルをアップロードする先として利用する他にも、IoTデバイスのファームウェアをHarvest Filesに配置しておき、IoTデバイス側からダウンロードして適用するという使い方があります。

 また Harvest Filesにアップロードされたカメラ画像のファイルをSORACOM Lagoonのダッシュボードに表示し、時系列に収集したセンサーデータの値と合わせて最新のカメラ画像を表示することで、視覚的に理解しやすいダッシュボードを作成されているお客さまもいらっしゃいます。

さらなる活用を考えた時に困ること

 SORACOM Harvest Filesに蓄積されたデータは、貴重な現場のデータです。例えば長期間のデータを分析することで予知保全に活かしたり、カメラの画像を機械学習で分析して物体抽出や製造業の合否判定に活用できる可能性があります。大規模なデータの分析や機械学習を行ないたい場合、Harvest Files内に格納された大量のデータを利用したくなります。また、SORACOM Harvest Filesにアップロードしたファイルの保存期間は作成日から2年間となっており、期限が来る前のファイルを一括でダウンロードしたいケースもあります(ファイル毎の有効期限の確認方法はこちらのブログをご覧ください)。

 ここで少し困りごとが出てきます。Harvest Filesはファイルをひとつずつダウンロードする事は簡単なのですが、ダウンロード対象数が増えてくると、ウェブブラウザーでは手間がかかるという事です。

SORACOM APIによる解決策

 今回のような大量のファイルを対象とするといった、ウェブブラウザーでは手間のかかる作業でもSORACOM APIを用いることで簡単に確実に処理を行なうことができます。今回はSORACOM Harvest Filesから大量のファイルをまとめて取り出すサンプルスクリプトを作成してみたので、それをもとに説明していきたいと思います。

soracom-labs/soracom-harvest-files-tools
Contribute to soracom-labs/soracom-harvest-files-tools development by creating an account on GitHub.

利用しているAPI

・FileEntry:listFiles
・FileEntry:getFile

 上記の2つのAPIを利用しています。FileEntry:listFilesは保存されているファイルの一覧を取得する API、FileEntry:getFileはファイルを取得するAPIです。

サンプルスクリプトの中身

 引数で渡された認証キーIDと認証キーシークレットを用いてファイルを取得するフォルダからファイルの一覧を取得し、1ファイルずつダウンロードを繰り返す、という形になっています。


def main(args):
    --- 中略 ---
    token = auth(auth_key_id, auth_key)
    file_names = list_file(
        base_path, search, limit_num_to_list, limit_num_to_list_per_req, last_evaluated_key, token
    )
    get_and_save_images(file_names, base_path, save_path, limit_size_to_files, delete, token)

 シンプルに複数ファイルをダウンロードするだけであれば簡単なのですが、今回はよくありそうな要件をオプションで指定できるようにしてみましたので、いくつかご紹介します。

--limit_size_to_files

 SORACOM Harvest Filesからファイルをダウンロードする際、ダウンロードしたファイルのサイズに応じてファイルエクスポート料金が発生します。全てのファイルを一括でダウンロードしてしまうと当月の料金が大きく増加してしまいます。料金を抑えるために複数回/月に分けてダウンロードする際に、合計ダウンロードサイズで処理を制限できるオプションです。

--last_evaluated_key

 FileEntry:listFilesで取得するファイルの一覧はファイル名順で取得されます(Harvest Filesにファイル名順に格納されています)。ファイル名を指定することで、その次のファイル以降がダウンロード対象となります。複数回に分けてダウンロードを行なう際、前回の最後にダウンロードしたファイル名を指定することで、続きからダウンロードを再開することができるオプションです。

 その他のオプション、使い方や詳細についてはREADME.mdをご一読ください。

まとめ

 いかがでしたでしょうか。

 SORACOM APIを利用することで、人の手では時間やコストがかかる作業を簡単に実現できました。またスクリプトから実行することで、人が操作する場合と比較してミスが混入する可能性を下げることもできます。

 今回は SORACOM Harvest Filesにアップロードされた大量のファイルをまとめて取り出すというお題でしたが、SORACOMの各サービスはAPIで操作することができますので、色々なケースにおいて SORACOM APIを利用することで作業を改善できるかと思います。

 APIの詳細は、APIリファレンスに掲載されており、仕様を確認できるだけではなく、実際にAPIをインタラクティブに呼び出してみることができます。また特別なお申し込みも不要で、すぐに始めることが可能となっています。

 「こんな事できないかな」「これはどの API を使えばいいのだろう」といった疑問がありましたらTwitterのハッシュタグ#soracomでツイートしたり、SORACOMサポートまでお問い合わせください。

 今後もSORACOM APIを使った便利な使い方をご紹介していきますので、ご期待ください!

過去記事アーカイブ

2021年
01月
02月
03月
04月
05月
06月
07月
08月
09月