CÓMO
Es posible agregar un servicio de entidades alojado a una aplicación web pública. Ofrece a los usuarios capacidades de edición. En algunos casos, es posible que los propietarios prefieran recibir notificaciones de actualizaciones programadas cuando se agregan nuevas entidades alojadas al servicio de entidades alojado. Puede crear un script de Python para comprobar la existencia de cambios en el servicio de entidades alojado durante un intervalo determinado y enviar un correo electrónico al propietario. Puede enviar un correo electrónico automático con el módulo smptlib para acceder al protocolo SMTP de correo electrónico del proveedor de correo web deseado, por ejemplo, Gmail o Hotmail.
import urllib2, json, urllib, datetime, time, smtplib from datetime import timedelta
username = 'Username' # Nombre de usuario de ArcGIS Online password = 'password' # Contraseña de ArcGIS Online URL = 'https://services.arcgis.com/[Folder]/arcgis/rest/services/[Feature Data]/FeatureServer/2/query' # URL del servicio de entidades uniqueID = 'OBJECTID' # Campo que desea comprobar dateField = 'Date' # Campo de fecha que desea consultar hoursValue = 1 # Número de horas para comprobar cuándo se agregó una entidad fromEmail = 'Sample@email.com' # Correo electrónico del remitente toEmail = 'Sample@email.com' # Correo electrónico del destinatario #smtpServer = 'smtp.gis.com' # Nombre del servidor SMPT #portNumber = 25 # Puerto del servidor SMTP # Cree una lista vacía para los uniqueID oidList = []
try: print('Generating Token') tokenURL = 'https://www.arcgis.com/sharing/rest/generateToken' params = {'f': 'pjson', 'username': username, 'password': password, 'referer': 'http://www.arcgis.com'} req = urllib2.Request(tokenURL, urllib.urlencode(params)) response = urllib2.urlopen(req) data = json.load(response) token = data['token'] except: token = ''
params = {'f': 'pjson', 'where': "1=1", 'outfields' : '*' , 'returnGeometry' : 'false', 'token' : token} req = urllib2.Request(URL, urllib.urlencode(params)) response = urllib2.urlopen(req) data = json.load(response)
for feat in data['features']: createDate = feat['attributes'][dateField] createDate = int(str(createDate)[0:-3]) t = datetime.datetime.now() - timedelta(hours=hoursValue) t = time.mktime(t.timetuple()) if createDate > t: oidList.append(feat['attributes'][uniqueID]) print("Edited feature")
FROM = 'remitente@hotmail.com' TO = ['destinatario@yahoo.com'] SUBJECT = 'Nueva entidad agregada' TEXT = "Se agregaron entidades con OBJECTID " + str(oidList) + "."
message = """\ From: %s To: %s Subject: %s %s """ % (FROM, ", ".join(TO), SUBJECT, TEXT) emailPassword = 'Password'
Nota: Algunos proveedores de correo electrónico, por ejemplo, Gmail, requieren inicios de sesión de acceso seguro desde las aplicaciones. La opción que permite el acceso menos seguro de aplicaciones se requiere para establecer correctamente una conexión con el servidor smtp.
if len(oidList) > 0: server = smtplib.SMTP_SSL('smtp.gmail.com') server.connect('smtp.gmail.com') server.ehlo() server.login(FROM, gmailPWD) server.sendmail(FROM, TO, message) print "Correo electrónico enviado correctamente" server.close() else: print "No se encontraron nuevos datos."
El siguiente script muestra el código final:
import urllib2, json, urllib, datetime, time, smtplib from datetime import timedelta # Variables username = 'Username' password = 'password' URL = 'https://services.arcgis.com/Wl7Y1m92PbjtJs5n/arcgis/rest/services/tem_data/FeatureServer/2/query' # URL del servicio de entidades uniqueID = 'OBJECTID' dateField = 'EditDate' hoursValue = 1 fromEmail = 'test@gmail.com' toEmail = 'test@esri.com' oidList = [] try: print('Generating Token') tokenURL = 'https://www.arcgis.com/sharing/rest/generateToken' params = {'f': 'pjson', 'username': username, 'password': password, 'referer': 'http://www.arcgis.com'} req = urllib2.Request(tokenURL, urllib.urlencode(params)) response = urllib2.urlopen(req) data = json.load(response) token = data['token'] except: token = '' params = {'f': 'pjson', 'where': "1=1", 'outfields' : '*' , 'returnGeometry' : 'false', 'token' : token} req = urllib2.Request(URL, urllib.urlencode(params)) response = urllib2.urlopen(req) data = json.load(response) for feat in data['features']: createDate = feat['attributes'][dateField] createDate = int(str(createDate)[0:-3]) t = datetime.datetime.now() - timedelta(hours=hoursValue) t = time.mktime(t.timetuple()) if createDate > t: oidList.append(feat['attributes'][uniqueID]) print("Edited feature") print(oidList) FROM = fromEmail TO = [toEmail] SUBJECT = 'Nuevas entidades agregadas' TEXT = "Se agregaron entidades con {0}s {1}.".format(uniqueID, oidList) message = """\ From: %s To: %s Subject: %s %s """ % (FROM, ", ".join(TO), SUBJECT, TEXT) gmailPWD = 'password' if len(oidList) > 0: server = smtplib.SMTP_SSL('smtp.gmail.com') server.connect('smtp.gmail.com') server.ehlo() server.login(FROM, gmailPWD) server.sendmail(FROM, TO, message) print "Correo electrónico enviado correctamente" server.close() else: print "No se encontraron nuevos datos."
Id. de artículo: 000019310
Obtener ayuda de expertos en ArcGIS
Descargar la aplicación de soporte de Esri