I'm looking for a way to find all errors in a table with hyperlinks, such as wrong paths or missing photos, without having to click on each individual point to make sure the hyperlink functions.
Elizabeth,
I have a PowerShell script you can use:
#csv path; input must be in this schema: ID,URL,NOTES - format your input this way, or adjust script $path = "C:\Users\YOU\Desktop\YOUR_CSV.csv" #in csv (you create) $outPath = "C:\Users\YOU\Desktop\YOUR_OUT_CSV.csv" #out csv (don't create this... let script create for you) $csv = Import-Csv -path $path $OutArray = @() function processURL($inURL){ # Create request $HTTP_Request = [System.Net.WebRequest]::Create($inURL) # Get response $HTTP_Response = $HTTP_Request.GetResponse() # Get response integer code $HTTP_Status = [int]$HTTP_Response.StatusCode If ($HTTP_Status -eq 200) { $ret_val = "OK!" } Else { $ret_val = "CHECK ME!" } # Clean-up and return $HTTP_Response.Close() return $ret_val } function request($ID, $URL, $NOTES){ $localResponse = processURL $URL export $ID $URL $NOTES $localResponse } function export($eID, $eURL, $eNotes, $eResponse){ $myobj = "" | Select "ID","URL","NOTES", "RESPONSE" $myobj.ID = $eID $myobj.URL = $eURL $myobj.NOTES = $NOTES $myobj.RESPONSE = $eResponse $OutArray += $myobj $myobj = $null #PS4 version: $OutArray | export-csv $outPath -Append #PS2 version: #$OutArray | ConvertTo-Csv -NoTypeInformation | select -Skip 1 | Out-File -Append $outPath } foreach($line in $csv) { $properties = $line | Get-Member -MemberType Properties for($i=0; $i -lt $properties.Count;$i++) { $column = $properties[$i] $columnvalue = $line | Select -ExpandProperty $column.Name switch ($column.Name) { "ID" {$ID = $columnvalue} "URL" {$URL = $columnvalue} "NOTES" {$NOTES = $columnvalue} } } if (-Not [string]::IsNullOrEmpty($ID) -and -Not [string]::IsNullOrEmpty($URL)) { request $ID $URL $NOTES } }
So, in my test, I used a csv like this:
ID,URL,NOTES
1,http://www.google.com, this is google
2,http://www.esri.com, this is esri
3,http://www.microsoft.com, this is microsoft
...and I got an output like this:
#TYPE Selected.System.String
"ID","URL","NOTES","RESPONSE"
"1","http://www.google.com","this is google","OK!"
"2","http://www.esri.com","this is esri","OK!"
"3","http://www.microsoft.com","this is microsoft","OK!"
If these aren't limited to web hyperlinks, let me know and I'll update the script!
Thanks! They are just links to a folder containing photos. I'm looking for mistakes in the path, or paths that point to a photo that didn't get copied into the folder. Can I run the script without ArcGIS Pro?
Elizabeth Minnick
GIS Technician
Town of Abingdon
133 W. Main Street
Abingdon, VA 24210
(276) 492-2129
Elizabeth,
I wasn't exactly sure of your environment/set-up, so I just wrote a PowerShell script, which can be executed outside of ArcGIS. It should be installed by default on Windows 7+. The script I wrote uses PowerShell 4, but the only change for PowerShell 2 should be the commented out line exporting to CSV, I believe.
You would basically need to export your table as a CSV, open notepad, paste the script and make any needed enviro changes, save as a .ps1, then run the script (here's an example of how to do that - windows - How to run a PowerShell script? - Stack Overflow).
Wes has a Python script you can just run in ArcMap that does exactly what you want, that is, check if the path on disk doesn't exist. I would need to adjust the PowerShell script to check for paths since I thought you were looking for web hyperlinks.
The script below will produce an oid list of paths that don't exist.
import arcpy fc = r"your\feature\class" fld = "yourPathField" desc = arcpy.Describe(fc) oidName = desc.oidFieldName oidlist = [] flds = [oidName,fld] with arcpy.da.SearchCursor(fc,flds) as rows: for row in rows: if arcpy.Exists(row[1]): pass else: oidlist.append(row[0]) print oidlist