I have a basic python script that takes a hosted feature service from ArcGIS Online and converts it to an excel (.xls) file. The only problem is, I need to sign-in to ArcGIS Online within ArcMap to get the script to run, since the feature service is only shared with my organization. Is there any way to store my credentials within the script so that it will run on a daily basis without me having to sign-in on ArcMap every time? Any help is greatly appreciated. Thank you!
Solved! Go to Solution.
I don't believe you will be able to export a feature service to an excel table using the Table to Excel tool. What you could do is export the feature service to a local File Geodatabase and then export the feature class to excel. Here is a tool you can use to export the feature service.
We are not running in ArcGIS Desktop, but we execute a python script from Windows Task Scheduler that updates a hosted Feature Service on our AGOL org account. I suppose you'd just need to grab the token by making calls against the REST API.
It'd help to see what your script is doing.
We used the majority of this https://blogs.esri.com/esri/arcgis/2014/01/24/updating-your-hosted-feature-service-for-10-2/ article to implement. Again, it's just authenticating directly with the ArcGIS.com REST API.
Thank you for the help James. My script is a real basic model I exported from Model Builder as a python script.
# Import arcpy module
import arcpy
# Local variables:
SpecialEvents = "SpecialEvents\\SpecialEvents"
SE_Test_xls = "I:\\Documents\\SE_Test.xls"
# Process: Table To Excel
arcpy.TableToExcel_conversion(SpecialEvents, SE_Test_xls, "NAME", "CODE")
I have replied to Jake's response with what I am trying based on his comment, but don't believe I am doing it right.
Hi Nicholas,
You can generate a token using the following script:
import urllib, urllib2, json username = "abcd" password = "1234" 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']
You can then append the token onto the feature service URL. Ex:
damageAssessmentURL = 'http://services.arcgis.com/Fz6BBJUji5USDM/arcgis/rest/services/Damage_Assessment/FeatureServer/0/que...' where = "PropertyType = 'Single Dwelling Houses'" params = {'f': 'pjson', 'where': where, 'returnCountOnly': 'true', 'token': token} req = urllib2.Request(damageAssessmentURL, urllib.urlencode(params)) response = urllib2.urlopen(req) data = json.load(response)
Here is the simple code below that I am trying to generate and add the token too.
import arcpy,
SE_Test_xls = "I:\\Documents\\SE_Test.xls"
# Process: Table To Excel
arcpy.TableToExcel_conversion(SpecialEvents, SE_Test_xls, "NAME", "CODE")
I don't believe you will be able to export a feature service to an excel table using the Table to Excel tool. What you could do is export the feature service to a local File Geodatabase and then export the feature class to excel. Here is a tool you can use to export the feature service.
Thank you Jake. Is an ArcGIS Standard License needed for this script to run?
Actually, only if you are downloading attachments. I'll need to update this tool to reflect this. You can do this by opening up the .py file and deleting lines 4-9. It should then work as long as you are not extracting attachments.
Awesome. It still said it was successful but was aborting because it wasn't a Standard License. When I took those lines out it works perfectly. Thank you so much for the help. This tool is great!!!
I have one more question for you Jake. I got the script to work without downloading attachments. But when I run it to download attachments, I get the following error. I checked the feature class and the "GlobalID_Str" gets created, but it sounds like it's having trouble finding it.
Traceback (most recent call last):
File "C:\Users\Downloads\TEST Attachments.py", line 194, in <module>
for row in cursor:
RuntimeError: A column was specified that does not exist.