Pour commencer
ArcGIS API for Python est une bibliothèque Python pour l'automatisation du Web GIS. La23èmeédition GISa organisé une session centrée sur l'automatisation des opérations ArcGIS Online dans un forum communautaire.
À propos de la session
Du mercredi 27 mai 2026 au vendredi 29 mai 2026, à Roppongi Midtown Tokyola "23ème Forum Communautaire GIS"a eu lieu.
Voici un résumé complet de la session.
Lors de la session "Cours de base ArcGIS API for Python : Introduction à l'automatisation et aux opérations Web GIS" du dernier jour, le 29 à 15h55, nous avons présenté des notions fondamentales sur ArcGIS API for Python, une bibliothèque pour l'automatisation du Web GIS, ainsi que plusieurs conseils.
Les conseils présentés sont basés sur des exemples pratiques, mais nous avons reçu des retours demandant "comment faire la même chose" ou "voir plus d'exemples de code", donc nous avons décidé d'expliquer cela dans cet article.
ArcGIS API for Python est une API basée sur Python qui permet d'automatiser les opérations dans ArcGIS Online et ArcGIS Enterprise.
Pour une explication fondamentale sur ArcGIS API for Python, veuillez consulter cette série d'articles.
Contenu de cet article
Cet article explique les conseils présentés lors de la session en suivant leur ordre.
- Authentification Sign In (authentification)
- Suppression groupée de dossiers et d'items
Exécution périodique
- Contenu pour exécuter périodiquement
- Utilisation de Feature Layer
- Script pour mettre à jour Feature Layer
- Préparation pour l'authentification par clé API
- Configuration des tâches
- Authentification
- Points d'attention en cas de partage
Authentification Sign In (authentification)
Tout d'abord, Sign In est nécessaire pour accéder aux fonctionnalités ArcGIS telles que les items privés ou les web maps. Voici une explication avec des slides.
Avec ArcGIS API for Python, après authentification, vous pouvez accéder et manipuler les contenus publics ou vos propres contenus via votre compte. Dans un environnement connecté à ArcGIS Pro ou ArcGIS Online, vous pouvez facilement vous authentifier avec GIS("home").
• Fenêtre Python d'ArcGIS Pro
• Notebook ArcGIS Online / ArcGIS Enterprise
• Environnement exécutant python.exe dans l'environnement de développement d'ArcGIS Pro
Dans des environnements comme Google Colab ou sans installation d'ArcGIS Pro où GIS("home") n'est pas utilisable, il est nécessaire d'utiliser l'ID et le mot de passe ou la clé API pour s'authentifier. D'autres méthodes existent aussi ; consultez la référence du module GIS
Voici quelques exemples affichant des informations sur un compte privé avec authentification par clé API.
# Authentification par clé API
gis = GIS(api_key="<YOUR_API_KEY>",referer="https")
# Affichage de l'objet GIS
print(gis)
# Affichage de l'utilisateur
print(gis.users.me)
# Affichage d'un item privé
myItem = gis.content.get("<ID DE L'ITEM>")
myItem
Suppression groupée de dossiers et d'items
Suite à cela, voici comment supprimer en masse dossiers et items.
Lors de la session, nous avons montré une vidéo expliquant comment supprimer en masse un dossier et son contenu, mais ici nous utilisons les classes Folders Folder
pour exécuter. Ici, on récupère chaque dossier un par un, puis on affiche le nom du dossier s'il n'est pas "Root Folder", on le supprime ; si ce n'est pas possible, on supprime uniquement les items. Le dossier racine ne peut être supprimé que par suppression des items qu'il contient.
# Authentification (ici avec ID et mot de passe)
from arcgis.gis import GIS, Item
gis = GIS("URL PORTAL", "nom_utilisateur_cible", "mot_de_passe")
print(gis)
# Récupération liste des dossiers un par un
folders = gis.content.folders.list()
# Récupération des noms des dossiers sous forme de liste
folder_names = [f.name for f in folders]
# Affichage du résultat
for name in folder_names:
#if name!='Root Folder':
print(f"Le nom du dossier est {name}")
folder_name = name
folder = gis.content.folders.get(folder_name)
if name!='Root Folder':
if folder is None:
print(f"Le dossier '{folder_name}' n'a pas été trouvé.")
else:
# Suppression aussi des items dans le dossier avant suppression du dossier lui-même
ok = folder.delete()
if ok:
print(f"Le dossier '{folder_name}' et son contenu ont été supprimés.")
else:
print(f"Échec lors de la suppression du dossier '{folder_name}'.")
elif name=='Root Folder':
if folder is None:
print(f"Le dossier '{folder_name}' n'a pas été trouvé.")
else:
root_items = gis.users.me.items()
for item in root_items:
try:
print(f"{item.title} ({item.type}) a été supprimé")
item.delete()
' except Exception as e:',' print(f"Erreur lors de la suppression de {item.title} : {e}")',' '
print(f"Error deleting {item.title}: {e}")
ここで紹介した方法以外にも GIS モジュールの search メソッドで所有アイテムを検索し、アイテムを全て削除してからフォルダーを削除する方法でも同様の作業が実行できます。
定期実行
定期実行させる内容
この項では以下のような流れで外部 API と連携した Feature Layer の更新を行います。
次のセクションから各手順を説明します。
Feature Layer の用意
最初の手順として、更新するための材料を用意します。 以下のようなスクリプトで API から取得した情報を処理し、更新用データを作成します。 ここでは ArcGIS Online のノートブックで実行することを想定しています。 ※ArcGIS Online のノートブックの詳しい使い方はこちらを参照してください。
実行する時は ArcGIS Online のノートブックで新しいノートブックを Standard で作成し、1 セル目に上書きするように貼り付けてください。
from arcgis.gis import GIS
from arcgis.features import FeatureLayerCollection
import requests
import time
# 1) 接続(ここでは home で認証する)
gis = GIS("home")
# 2) ISS API から取得
ISS_URL = "http://api.open-notify.org/iss-now.json" # [1](http://open-notify.org/Open-Notify-API/ISS-Location-Now/)
def fetch_iss():
r = requests.get(ISS_URL, timeout=30)
r.raise_for_status()
data = r.json()
lat = float(data["iss_position"]["latitude"])
lon = float(data["iss_position"]["longitude"])
ts_sec = int(data["timestamp"])
ts_ms = ts_sec * 1000
return lat, lon, ts_ms
# 3) Hosted Feature Service 作成
SERVICE_NAME = "ISS_Last3Points"
service_item = gis.content.create_service(
name=SERVICE_NAME,
service_type="featureService"
)
flc = FeatureLayerCollection.fromitem(service_item)
# 4) レイヤー定義
layer_def = {
"layers": [{
"name": "<作成する Feature Layer の名前>",
"type": "Feature Layer",
"geometryType": "esriGeometryPoint",
"spatialReference": {"wkid": 4326},
"objectIdField": "ObjectID",
"fields": [
{"name": "ObjectID", "type": "esriFieldTypeOID", "alias": "ObjectID"},
{"name": "latitude", "type": "esriFieldTypeDouble", "alias": "latitude"},
{"name": "longitude", "type": "esriFieldTypeDouble", "alias": "longitude"},
{"name": "obs_time", "type": "esriFieldTypeDate", "alias": "obs_time"},
]
}]
}
# 5) 定義をサービスに追加
flc.manager.add_to_definition(layer_def)
layer = flc.layers[0]
# 6) 初期 3 件投入(ISS API 推奨に考慮して 5 秒間隔)
adds = []
for i in range(3):
lat, lon, ts_ms = fetch_iss()
adds.append({
"geometry": {"x": lon, "y": lat, "spatialReference": {"wkid": 4326}},
"attributes": {"latitude": lat, "longitude": lon, "obs_time": ts_ms}
})
if i < 2:
time.sleep(5) # ポーリング過多を避ける [1](http://open-notify.org/Open-Notify-API/ISS-Location-Now/)
res = layer.edit_features(adds=adds)
print("作成したアイテム ID:", service_item.id)
print("レイヤーURL:", layer.url)
print("追加結果:", res)
実行が終わるとこのようにアイテムが作られます。スクリプトで指定した名前でアイテムが作成されていることを確認します。
これで更新用データの用意はできました。
Feature Layer を更新するスクリプト
先ほど作成したアイテムの ID を使って更新をします。 アイテム ページの [URL] の下の下矢印を開いてアイテム ID を探します。
次に、以下のスクリプトを使用してデータの更新を行います。 ここでは 3 件あるフィーチャのうち、最も古いものを削除し、取得したデータを新たに追加するように処理しています。新しく Standard でノートブックを作成し、データ作成時と同じように 1 セル目に上書きするように貼り付けてください。
from arcgis.gis import GIS
import requests
gis = GIS("home")
ITEM_ID = "<作成したアイテム ID>"
ISS_URL = "http://api.open-notify.org/iss-now.json"
def fetch_iss():
r = requests.get(ISS_URL, timeout=30)
r.raise_for_status()
data = r.json()
lat = float(data["iss_position"]["latitude"])
lon = float(data["iss_position"]["longitude"])
ts_sec = int(data["timestamp"])
ts_ms = ts_sec * 1000
return lat, lon, ts_ms
# 1) Récupération du layer
item = gis.content.get(ITEM_ID)
layer = item.layers[0]
# 2) Récupération des 3 éléments existants par ordre chronologique (ordre ancien)
# order_by_fields correspond à orderByFields dans REST
fset = layer.query(
where="1=1",
out_fields="ObjectID,obs_time",
order_by_fields="obs_time ASC"
)
features = fset.features
# 3) Si plus de 3 éléments, suppression du plus ancien (1 élément)
if len(features) >= 3:
oldest_oid = features[0].attributes.get("ObjectID")
# deletes dans edit_features est basé sur une chaîne de caractères coupée par des virgules d'OID [10](https://gis.stackexchange.com/questions/278263/arcgis-api-for-python-delete-multiple-features)
del_res = layer.edit_features(deletes=str(oldest_oid))
print("Suppression :", del_res)
# 4) Ajout d'un nouvel élément (1 élément)
lat, lon, ts_ms = fetch_iss()
new_feature = {
"geometry": {"x": lon, "y": lat, "spatialReference": {"wkid": 4326}},
"attributes": {"latitude": lat, "longitude": lon, "obs_time": ts_ms}
}
add_res = layer.edit_features(adds=[new_feature])
print("Ajout :", add_res)
# 5) Vérification du nombre actuel d'éléments
cur_cnt = layer.query(where="1=1", return_count_only=True)
print("Nombre actuel d'éléments :", cur_cnt)
Lorsque l'exécution réussit, un message concernant la suppression et la mise à jour s'affiche comme ci-dessous.
La préparation du script pour la mise à jour est maintenant terminée. Ensuite, nous allons créer un item pour vérifier la mise à jour.
Préparation de l'item de vérification
Tout d'abord, créons une Web Map. Ouvrez l'item Feature Layer dans Map Viewer et cliquez sur [Enregistrer et ouvrir] puis [] Cliquez sur [Enregistrer sous] pour créer une Web Map.
Ainsi, lorsque la mise à jour est effectuée, vous pouvez recharger la carte et vérifier la mise à jour. De plus, depuis la Web Map, ouvrez les paramètres du Feature Layer et cochez « Mettre à jour automatiquement le layer » pour que même sans recharger le navigateur, la mise à jour soit reflétée.
Voici un exemple d'exécution.
Ensuite, configurez la planification pour mettre à jour périodiquement le point créé.
Configuration de la tâche
※Lors de l'exécution de la tâche, en fonction du temps d'exécution, le crédit sera consommé.