#!/usr/bin/env python # A. Ptak, July 2001 from httplib import HTTP import string, re, sys _have_radec = 0 try: import radec _have_radec = 1 except: pass def URLName(name): "Encode special characters in a url string" urlname = ''; codes1 = {'+':'%2B', ' ':'+', ',':'%2C'} codes2 = string.letters + string.digits + '.-' for i in name: if codes1.has_key(i): urlname = urlname + codes1[i] elif i in codes2: urlname = urlname + i else: urlname = urlname + "%21" return urlname def get_ned_posn(name, include_ref=0, verb=0): "Resolve name by parsing ned web output, include_ref=1 will return reference" # First see if name is really a position in the first place try: import radec name = string.replace(name, ",", " ") ad = radec.radec(name) return(ad.__repr__()) except: pass domain="nedwww.ipac.caltech.edu" url = "/cgi-bin/nph-objsearch?objname=" + URLName(name) + \ "&extend=no&out_csys=Equatorial&out_equinox=J2000.0&obj_sort=RA" + \ "+or+Longitude&zv_breaker=30000.0&list_limit=5&img_stamp=NO" h = HTTP(domain) h.putrequest('GET', url) h.putheader('Accept', 'text/html') h.putheader('Accept', 'text/plain'); h.endheaders() if verb: sys.stderr.write("Submitting request to NED...\n") errcode, errmsg, headers = h.getreply() if errcode != 200: sys.stderr.write("Error in receiving response from NED\n") return None results = h.getfile().readlines() # Grab first target, this should work if len(results) < 16: sys.stderr.write("Name not resolved\n") return None line = results[15] if line[19:25] != "ObjNo1": sys.stderr.write("Name not resolved\n") return None #return(string.strip(regsub.gsub("[dhms:]", " ", line[67:89]))) posn = string.strip(re.sub("[dhms:]", " ", line[67:89])) if not include_ref: return(posn) ref = "" for line in results[16:]: if string.find(line, "Position Reference") > 0: p = string.find(line, "refcode=") + 8 if p < 8: sys.stderr.write("Error getting reference, \"refcode\" not found\n") break p2 = string.find(line, ' ', p) if p2 < p: sys.stderr.write("Error getting reference\n") break ref = line[p:p2] return(posn, ref) if __name__ == "__main__": argv = sys.argv argc = len(argv) if argc < 2: sys.stderr.write("Usage: " + argv[0] + " (-d -r) sourcename\n") sys.stderr.write("If -d is specified and radec.py is available, will convert output to \ndecimal format\n") sys.stderr.write("If -r is specified, this script will attempt to also get the position \nreference\n") sys.exit() dflag = 0 rflag = 0 nargs = 0 #print argv[1] if "-d" in argv[1:argc-1]: nargs = 1 dflag = 1 if "-r" in argv[1:argc-1]: nargs = nargs + 1 rflag = 1 name = string.join(argv[(nargs+1):]) sys.stderr.write("Resolving " + name + '\n') ref = "" if rflag: pos, ref = get_ned_posn(name, include_ref=1) else: pos = get_ned_posn(name) if pos: if dflag and _have_radec: pos = radec.radec(pos) print "%f %f" % (pos.ra, pos.dec) else: print pos if rflag: print ref