Python を使用した ArcGIS Online のコンテンツを複製する方法のご紹介

1693
0
07-04-2022 09:11 PM
Labels (1)

Python を使用した ArcGIS Online のコンテンツを複製する方法のご紹介

はじめに

ArcGIS Online のほとんどのコンテンツ (フィーチャ レイヤーや Web マップなど)は、ArcGIS Assistant(ベータ版)を使用して複製することができますが、より複雑なコンテンツには、ArcGIS API for Python の利用が必要になります。

本記事では、ArcGIS API for Python を使用してダッシュボード、Web アプリ、Survey123、等のコンテンツを別のアカウントへ複製する方法についてご紹介します。

※本記事でご紹介する方法は ArcGIS StoryMaps および ArcGIS Experience BuilderInstant Apps 等には使用できませんのでご注意ください。複製可能なアイテム形式についてはガイドページ Cloning Content に記載されていますので併せてご確認ください。

 

複製したいアイテムの準備

まずは複製したいアイテムを特定します。

ArcGIS Online にアクセスし、複製したいコンテンツを所有するArcGIS アカウントでサインインします。コンテンツ タブをクリックし、複製したいアイテムを探します。アイテム名をクリックすると、アイテム詳細ページが表示されます。
ブラウザのアドレスバーから URL の最後 id= 以降に表示されるアイテム ID をコピーして控えておきます。

img1.png

 

その他にも複製させたいアイテムがあればそれぞれのアイテム ID を控えておいてください。
アイテムによっては、他のアイテムを参照している場合があります。例えば、ダッシュボードはWebマップを参照し、さらにその Webマップはフィーチャ レイヤーを参照しています。ダッシュボード、Web マップ、フィーチャ レイヤーは3つの異なるアイテムですが、ダッシュボードだけ複製を行うと、参照されているアイテムも自動的に一緒に複製されます。

 

ノートブックの作成

ArcGIS Online や ArcGIS Pro のノートブックや Jupyter Notebook などで アイテムを複製する Python のコードを作成していきます。
ArcGIS Pro をお使いの場合、挿入タブから新しい Notebook を選択しノートブックを開きます。ArcGIS Online をお使いの場合はノートブック タブをクリックし、新しいノートブックを選択し、ノートブックを開きます。

 

最初のセルに以下のコードを入力し、Run ボタンで実行します。

 

username = input("Enter username of origin organization: ")
from arcgis.gis import GIS
gis1 = GIS("https://arcgis.com", username)‍‍

 

img2.png

表示されるテキストボックスにユーザー名を入力し、Enter キーを押します。
次に表示されるテキストボックスにパスワードを入力し、Enter キーを押します。

 

続いて、アイテムの複製先の ArcGIS アカウントに接続します。
ノートブックの次のセルに以下のコードを入力し、実行します。

 

username_2 = input("Enter username of target organization: ")
gis2 = GIS("https://arcgis.com", username_2)

 

同様に表示されるテキストボックスに複製先のアカウントのユーザー名とパスワードを入力します。

 

続いて、複製するアイテムを特定し、複製先の ArcGIS Online アカウントにコピーします。
次のセルに以下のコードを入力します。

 

items = gis1.content.get("アイテムID")
print(str(len(items)) + " item will be cloned:")
items

 

 

get(“アイテムID”) に最初に控えておいたアイテム ID を入力します。
複数のアイテムがある場合は以下のように複数指定することも可能です。

 

items = gis1.content.search(query= "id:(5f3b5c9325314fc3a11c1d649d37461e OR fc1b539234f44ee89845ea926e5e393f)")‍

 

 

アイテム ID を入力したら、セルを実行します。
実行すると対象のアイテムのタイトルやタイプなどが表示されるので正しいことを確認します。

img3.png

 

最後に、アイテムを対象のアカウントに複製します。
次のセルに、以下のコードを入力し、セルを実行します。

 

def deep_copy_content(input_list):
    for item in input_list:
        try:
            print("Cloning " + item.title)
            copy_list = []
            copy_list.append(item)
            gis2.content.clone_items(copy_list,copy_data=True, search_existing_items=True)
            print("Successfully cloned " + item.title)
        except Exception as e:
            print(e)
    print("The function has completed")
deep_copy_content(items)‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

 

 

完了すると “The function has completed” というテキストが表示されます。

ArcGIS Online に移動し、対象のアカウントでサインインします。
コンテンツ タブをクリックして、アイテムが複製されたことを確認します。
他のアイテムを参照しているアイテムを複製した場合は、参照しているすべてのアイテムが表示されます。同じアイテムを参照している異なる複数のアイテムを複製する場合は、参照しているアイテムが重複して複製されることはありません。

img4.png

 

clone_items() メソッドの copy_data パラメータを False にすることで、参照するアイテムを複製しないことも可能です。clone_items() メソッドの詳細については API リファレンスをご参照ください。

 

アイテムをまとめて複製する方法

一度に複数のアイテムを複製する場合は、複製するアイテムを特定する段階で以下のようなコードを入力します。max_items パラメータで取得するアイテムの上限を設定することができます。デフォルトでは 10 が設定されています。

 

items = gis1.content.search(query="owner: {}".format(username), max_items=10, sort_field='id', sort_order='desc')
items

 

 

複数のアイテムを取得した状態でアイテムを複製する関数を定義した以下のセルを実行すると取得したアイテムを一括で複製することができます。

 

def deep_copy_content(input_list):
    for item in input_list:
        try:
            print("Cloning " + item.title)
            copy_list = []
            copy_list.append(item)
            gis2.content.clone_items(copy_list,copy_data=True, search_existing_items=True)
            print("Successfully cloned " + item.title)
        except Exception as e:
            print(e)
    print("The function has completed")
deep_copy_content(items)‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍

 

 

アイテムの取得については search() メソッドで対象のアイテムを絞り込むこともできます。
詳細は search() メソッド API リファレンス REST API Search Reference をご参照ください。

 

StoryMaps の複製について

本記事で紹介した方法は ArcGIS StoryMaps を複製することはできません。ArcGIS StoryMaps を複製する方法については本記事とは別の手順で Esri のサンプルノートブックが公開されておりますのでご参考にしていただければと思います。

 

おわりに

本記事では ArcGIS API for Python を使用した別のアカウントへのコンテンツの複製方法についてご紹介しました。組織間のデータの移行や共有、開発段階から本番段階への移行など、コンテンツの複製が必要な際にお役立てください。また、ArcGIS API for Python のガイドページには、複製できるアイテムの形式など詳細が記載されていますのでそちらもご参考にしてください。

 

関連リンク

ESRIジャパン Web サイト:

ArcGIS API for Python

ArcGIS Developer 開発リソース集

ArcGIS API for Python ガイド集

 

米国 Esri Web サイト:

ArcGIS API for Python

・ArcGIS API for Python:API リファレンス

・ArcGIS API for Python:Cloning Content

Esri CommunityHow to copy content from one ArcGIS Online account to another using Python

 

 

 

Labels (1)
Version history
Last update:
‎07-04-2022 09:18 PM
Updated by:
Contributors