Python调用ArcGIS REST API进行服务管理

一、流程

1.  提供用户名密码,根据用户名密码获取令牌,从而能够读取ArcGIS Server站点的服务

2. 提供ArcGIS Server服务器名称以及要停止或启动服务的文件夹,根文件夹为root

3.  初次请求文件夹中的服务列表时,响应将以 JavaScript 对象表示法 (JSON) 的形式返回。Python 的 json.loads() 函数将 JSON 转换成一个可遍历的 Python 对象。

二、使用

     直接在ArcGIS Server的机器上双击

# -*- coding: utf-8 -*-
#启动或者停止文件夹下所有服务

import httplib, urllib, json
import sys
import getpass

import sys
reload(sys)
sys.setdefaultencoding('utf-8')  

def main(argv = None):
	print "Start or Stop service"
	#username,password
	userName = raw_input("Enter User Name:")
	password = getpass.getpass("Enter Password:")

	serverName = raw_input("Enter Server Name(IP):")
	serverPort = 6080    #10.7开始默认6443,需要在管理员目录开启http

	folder = raw_input("Enter the folder name or Root for the root folder:")
	stopOrStart = raw_input("Enter whether you want to Start or Stop the services:")

	if str.upper(stopOrStart) != "START" and str.upper(stopOrStart) != "STOP":
		print "Invalid stop or start!"
		return

	token = getToken(userName, password, serverName, serverPort)
	if token == "":
		print "Could not generate a token with the username and password provided."
		return
	
	if str.upper(folder) == "ROOT":
		folder = ""
	else:
		folder += "/"

	folderURL = "/arcgis/admin/services" + "/" + folder  #构造服务rest接口

	params = urllib.urlencode({'token': token, 'f': 'json'})
	headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}

	httpConn = httplib.HTTPConnection(serverName, serverPort)
	httpConn.request("POST", folderURL, params, headers)

	response = httpConn.getresponse()
	if (response.status != 200):
		httpConn.close()
		print "Could not read folder information!"
		return
	else:
		data = response.read()

		if not assertJsonSuccess(data):
			print "Error when reading the folder information!" + str(data)
		else:
			print "Processing folder information successfully. Now processing services......"

		dataobj = json.loads(data)

		httpConn.close()

		for item in dataobj['services']:
			fullservicename = item['serviceName'] + "." + item['type']
			print fullservicename
			stopOrStartURL = "/arcgis/admin/services/" + folder + fullservicename + "/" + stopOrStart
			print stopOrStartURL
			httpConn.request("POST", urllib.quote(stopOrStartURL.encode('utf-8')), params, headers)

			stopStartresponse = httpConn.getresponse()
			if (stopStartresponse.status != 200):
				httpConn.close()
				print "Error while excuting stop or start. Please check the url and try again!"
				return
			else:
				stopStartdata = stopStartresponse.read()

				if not assertJsonSuccess(stopStartdata):
					if str.upper(stopOrStart) == "START":
						print "Error returned when start service" + fullservicename
					else:
						print "Error returned when stop services" + fullservicename

					print str(stopStartdata)
				else:
					print "Service " + fullservicename + " processed successfully!"

			httpConn.close()

		return

def getToken(username, password, serverName, serverPort):
	tokenURL = "/arcgis/admin/generateToken"

	params = urllib.urlencode({'username': username, 'password': password, 'client': 'requestip', 'f': 'json'})
	headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"}
	httpconn = httplib.HTTPConnection(serverName, serverPort)
	httpconn.request("POST", tokenURL, params, headers)

	response = httpconn.getresponse()
	if (response.status != 200):
		httpconn.close()
		print "Error while attempting to start the services"
		return
	else:
		data = response.read()
		httpconn.close()

		token = json.loads(data)
		return token['token']

def assertJsonSuccess(data):
	obj = json.loads(data)
	if 'status' in obj and obj['status'] == "error":
		print "Error: JSON object returns an error. " + str(obj)
		return False
	else:
		return True

if __name__ == "__main__":
    sys.exit(main(sys.argv[1:]))







 

参考:

https://enterprise.arcgis.com/zh-cn/server/

 

 

附录

       欢迎大家关注我的收费课程《ArcGIS Pro 2.6和ArcGIS Enterprise学习》,共8小时,有理论有实操:https://edu.csdn.net/course/detail/31690

课程主要包含:

  1. ArcGIS Pro2.6学习

                    ①GIS中的数据

                    ②GIS中的坐标系

                    ③企业级地理数据库(SDE)设置

                    ④数据编辑及拓扑检查

                    ⑤简单制图

                   ⑥空间分析

     2.ArcGIS Enterprise学习

                  ①环境部署

                  ②二三维服务发布(矢量切片、要素服务、地图切片、地形服务、三维服务等)

                  ③使用及运维(详细介绍如何确定enterprise部署架构,简单介绍相应的运维工具)

      3.开发体系梳理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

炒菜不加盐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值