概要
ArcGIS API for Python を使用して、ArcGIS Online 上のフィーチャ レイヤーに添付されているファイルを一括で取得する方法をご紹介いたします。
方法
ArcGIS API for Python の gis オブジェクトの content プロパティを使用し、ContentManager クラスのインスタンスを生成した後、search() メソッドを使用して、添付ファイルを出力したいフィーチャ レイヤーを検索します。検索結果として得られた Item クラスのオブジェクトの layer プロパティを用いて FeatureLayer クラスのオブジェクトを取得します。最後に、FeatureLayer クラスのオブジェクトに対して attachments プロパティを使用し、AttachmentManager クラスのインスタンスを生成した後、 download() メソッドを使用することで添付ファイルを出力することができます。
※ ArcGIS Online のノートブックにおける処理では、ArcGIS Online 上に添付ファイルが保存されるため、大量の添付ファイルを持つフィーチャ レイヤーに対しては使用しないでください。
Python サンプル コード
- 添付ファイルを出力したいフィーチャ レイヤーを検索
# 対象のフィーチャ レイヤーのアイテムを検索 item = gis.content.get('フィーチャ レイヤーのID') # フィーチャ レイヤーの取得 layer = item.layers[0] # フィーチャ レイヤーを確認 layer - 添付ファイルの保存先を決定し、フィーチャ レイヤーから添付ファイルをダウンロード
# フィーチャ レイヤーの各フィーチャの添付ファイルをダウンロード # ダウンロード先の指定(arcgis/home 配下に attachments フォルダを作成してダウンロード) download_files_path = '/arcgis/home/attachments' # フィーチャ レイヤーのフィーチャ クラスを取得 layer_features_list = layer.query().features # 各フィーチャで処理 for feature in layer_features_list: # フィーチャ のオブジェクトID を取得 feature_objectid = feature.attributes['OBJECTID'] # 添付ファイルダウンロード処理 try: layer.attachments.download(oid=feature_objectid,save_path=download_files_path) # 結果を表示 print('object_id:'+str(feature_objectid)+' のフィーチャの添付ファイルをダウンロードしました。') except: print('object_id:'+str(feature_objectid)+' のフィーチャの添付ファイルはありませんでした。') pass - ダウンロードした添付ファイルをzipで保存
# ダウンロードした添付ファイルをzipとして保存し、元フォルダを削除 import shutil # 出力フォルダをzip化 shutil.make_archive('/arcgis/home/attachment_result', 'zip', root_dir=download_files_path) print('ダウンロードした添付ファイルを圧縮ファイルとして保存しました。') # ダウンロード用フォルダ削除 shutil.rmtree(download_files_path) print(download_files_path+' のダウンロード用フォルダを削除しました。')
実行結果
出力した添付ファイルは ArcGIS Online 上の /arcgis/home 直下に保存されます。

結果ファイルのダウンロード
出力した添付ファイルは ArcGIS Online 上の /arcgis/home 直下に保存されるため、Jupyter Notebook の画面上の [ファイル] から、結果ファイルをクリックすることでファイルをローカル環境にダウンロードが可能です。

注意事項
掲載しているコードはあくまでもサンプル (見本) として提供しているものであり、実行時に発生したエラーの対処方法につきましては、サポート対象外とさせていただきます。また、操作方法やソースコードに関するご質問は別途有償の開発者サポート契約にてご対応させていただきます。なお、コードを実行して生じたいかなる損害についても弊社では責任を負いかねます。このナレッジはお役に立ちましたか?
フィードバックをいただきありがとうございます!