日本語

操作手順: Python を使用して ArcGIS Pro のホスト フィーチャ サービスを ArcGIS Online に上書きする

概要

回避策として、arcgis.gis.module を使用してホスト フィーチャ サービスを上書きすることができます。 このモジュールは、Python スクリプトでの ArcGIS Online 認証情報に伴う ArcPy モジュールの既知の制限を解決するために使用されます。 Python スクリプトは、処理の自動化を可能にします。 ただし、ArcGIS Pro のインストールに含まれている Python 3 が必要です。

この記事では、モジュールおよび認証情報を指定し、サービス定義 (SD) ファイルを作成して公開する手順について説明します。

注意: この手順は、既存のサービス定義ファイルを持つホスト フィーチャ サービスでのみ実行できます。

手順

  1. 必要なモジュールをインポートします。
import arcpy import os, sys from arcgis.gis import GIS
  1. プロジェクト ファイル (*.aprx) の場所を指定します。
prjPath = r"C:\Users\SampleFolder\Project_Name.aprx"
  1. 所有者の認証情報を含めて、ArcGIS Online のフィーチャ サービス名を指定します。
sd_fs_name = "hosted feature service name" portal = "http://www.arcgis.com" user = "USERNAME" password = "PASSWORD"
  1. 目的の共有オプションを設定します。 以下のサンプル コードは、組織のみで共有されるサービスを設定します。
shrOrg = True shrEveryone = False shrGroups = ""
  1. サービス定義ドラフトおよびサービス定義ファイルを公開するために使用される一時的コンテンツを格納するローカル パスを指定します。
relPath = r'C:\Users\SampleFolder_1' sddraft = os.path.join(relPath, "temporary service name.sddraft") sd = os.path.join(relPath, "temporary service name.sd")
  1. 新しい SDDraft ファイルを作成し、ドラフトを SD ファイルにステージングします。
注意: sharing_draft = mp.getWebLayerSharingDraft("HOSTING_SERVER", "FEATURE", sd_fs_name) セクションでは、"HOSTING_SERVER" パラメーターと "FEATURE" をデフォルト パラメーターとして残しておきます。 定義済みのパラメーター (sd_fs_name) のみを、ユーザー定義された変数名で編集してください。
print("Creating SD file") arcpy.env.overwriteOutput = True prj = arcpy.mp.ArcGISProject(prjPath) mp = prj.listMaps()[0] #HOSTING_SERVER および FEATURE パラメーターをデフォルト パラメーターとし、getWebLayerSharingDraft 関数を使用するよう新しいオブジェクトを定義する sharing_draft = mp.getWebLayerSharingDraft("HOSTING_SERVER", "FEATURE", sd_fs_name) sharing_draft.summary = "My Summary" sharing_draft.tags = "My Tags" sharing_draft.description = "My Description" sharing_draft.credits = "My Credits" sharing_draft.useLimitations = "My Use Limitations" sharing_draft.exportToSDDraft(sddraft) arcpy.StageService_server(sddraft, sd)
  1. 指定したポータルに接続します。
print("Connecting to {}".format(portal)) gis = GIS(portal, user, password)
  1. 手順 3 で特定した SD ファイルを見つけ、指定したポータル上のサービスを更新して上書きします。
print("Search for original SD on portal…") print(f"Query: {sd_fs_name}") sdItem = gis.content.search(query=sd_fs_name, item_type="Service Definition") i = 0 while sdItem[i].title != sd_fs_name:             i += 1 print('"Item Found") print(f'item[i].title = {sdItem[i].title}, sd_fs_name = {sd_fs_name}') item = sdItem[i]  item.update(data=sd) print("Overwriting existing feature service…") fs = item.publish(overwrite=True) if shrOrg or shrEveryone or shrGroups:     print("Setting sharing options…")     fs.share(org=shrOrg, everyone=shrEveryone, groups=shrGroups) print("Finished updating: {} – ID: {}".format(fs.title, fs.id))

以下に完全なスクリプトを示します。

import arcpy import os, sys from arcgis.gis import GIS prjPath = r"C:\Users\SampleFolder\Project_Name.aprx" sd_fs_name = "hosted feature service name" portal = "http://www.arcgis.com" # ローカル ポータルを参照することも可能 user = "username" password = "password" shrOrg = True shrEveryone = False shrGroups = "" relPath = r'C:\Users\SampleFolder' sddraft = os.path.join(relPath, "temporary service name.sddraft") sd = os.path.join(relPath, "temporary service name.sd") print("Creating SD file") arcpy.env.overwriteOutput = True prj = arcpy.mp.ArcGISProject(prjPath) mp = prj.listMaps()[0] sharing_draft = mp.getWebLayerSharingDraft("HOSTING_SERVER", "FEATURE", sd_fs_name) sharing_draft.summary = "My Summary" sharing_draft.tags = "My Tags" sharing_draft.description = "My Description" sharing_draft.credits = "My Credits" sharing_draft.useLimitations = "My Use Limitations" sharing_draft.exportToSDDraft(sddraft) arcpy.StageService_server(sddraft, sd) print("Connecting to {}".format(portal)) gis = GIS(portal, user, password) # SD を見つけて更新し、上書きして公開して、共有とメタデータを設定する print("Search for original SD on portal…") print(f"Query: {sd_fs_name}") sdItem = gis.content.search(query=sd_fs_name, item_type="Service Definition") i=0 while sdItem[i].title != sd_fs_name:             i += 1 print('Item Found') print(f'item[i].title = {sdItem[i].title}, sd_fs_name = {sd_fs_name}') item = sdItem[i]  item.update(data=sd) print("Overwriting existing feature service…") fs = item.publish(overwrite=True) if shrOrg or shrEveryone or shrGroups:     print("Setting sharing options…")     fs.share(org=shrOrg, everyone=shrEveryone, groups=shrGroups) print("Finished updating: {} – ID: {}".format(fs.title, fs.id))

関連情報

更新日時: 11/10/2021

記事 ID: 000023164

ソフトウェア: ArcGIS Pro 2.4.3, 2.4.2, 2.4.1, 2.4, 2.3.3, 2.3.2, 2.3.1, 2.3, 2.2.4, 2.2.3, 2.2.2, 2.2.1, 2.2, 2.1.3, 2.1.2, 2.1.1, 2.1, 2.0.1, 2.0