def get_url_of_image(query_string): '''gets an image from a yahoo image search of "query string", returns a url''' srch = ImageSearch(app_id="YahooDemo", query='%s'%query_string) srch.results = 1 for each in srch.parse_results(): url = str(each.Url) return url
def __init__(self,query="Rocket",results=50, with_cache=None,rescale=None): done=False self.rescale=rescale if (with_cache): try: os.stat(with_cache+"/"+query.lower()) f=file(with_cache+"/"+query+"/reader.pcl","rb") self.query=pickle.load(f) self.urls=pickle.load(f) self.destdir=pickle.load(f) self.lq=pickle.load(f) done=True except: pass if not done: from pycvf.core import settings from yahoo.search.image import ImageSearch yahoo_image_search=ImageSearch(settings.YAHOOAPPID) yahoo_image_search.query = query yahoo_image_search.results = results r=yahoo_image_search.get_results() self.query=query self.urls=[ ] for i in range(40): try: self.urls.append(r.childNodes[0].getElementsByTagName('Result')[i].getElementsByTagName('Url')[0].childNodes[0].nodeValue) except: pass if not (with_cache): self.destdir="/tmp/"+yahoo_image_search.query.lower() else: self.destdir=with_cache+yahoo_image_search.query.lower() try: os.mkdir(self.destdir) except: pass self.lq=len(self.urls) dl=map(lambda i:(self.urls[i],(self.destdir+"/f-"+str(i)+"."+self.urls[i].split(".")[-1]).lower()) ,range(len(self.urls))) if (self.lq): md=MultiDownloader(dl) md.run() if (with_cache): try: os.mkdir(with_cache+"/"+query.lower()) except: pass f=file(with_cache+"/"+query+"/reader.pcl","wb") pickle.dump(self.query,f,protocol=2) pickle.dump(self.urls,f,protocol=2) pickle.dump(self.destdir,f,protocol=2) pickle.dump(self.lq,f,protocol=2) f.close()
def _run_query_fired(self): """ Queries Yahoo! image search for with the query string """ # This is where we run the actual query once the user tells the GUI to # do so. We're using the pYsearch module to do a Yahoo image search, # which basically exposes a list of image urls. srch = ImageSearch(app_id="YahooDemo", query=self.query_string) # Run the search and return the top 10 results srch.results = 10 # We make a list of the top 10 image urls. imagrul_list = [] for res in srch.parse_results(): imagrul_list.append(res.Url) # We will try each image url in succession to download the image. We # need to do this in a complicated control loop because not all image # urls returned from the search still work. We need to try/except # the urllib2 connection errors and check that the image url linked to # a valid image we can download. If not, move on to the next url. If # no image urls were returned in the search (for example, if the search # was too specific and returned no results), print an explanation # in the GUI by writing it into the image_url string. final_imgurl = False for imgurl in imagrul_list: print "Connecting to", imgurl error_encountered = False try: response = urllib2.urlopen(imgurl) except: error_encountered = True print "Oh no, HTTP error encountered on " + imgurl if not error_encountered: final_imgurl = imgurl break if final_imgurl: print "Successfully accessed", final_imgurl self.image_url = final_imgurl image_string = response.read() response.close() image_file = file("image.jpg", "w") image_file.write(image_string) image_file.close() image_file = file("image_original.jpg", "w") image_file.write(image_string) image_file.close() self.display_image() print "Retrieved image and saved it as image.jpg" else: print ("Failed to retrieve any image, no " + "results found.") self.image_url = ("Failed to retrieve any image, " + "no results found.")
def getImage(q) : srch = ImageSearch(app_id="YahooDemo",query=q) # get one result in png format srch.results = 1 srch.format = "png" for res in srch.parse_results(): # the file-like object returned by # urllib doesn't implement some of the methods needed by imread. i # tried to read() the urllib object and convert that to a string # stream, but imread didn't like that, either. i knew creating # a file and reading it would work, so i did it. commands.getoutput("wget '"+res.Url+"' -O tmpfile") x = plt.imread("tmpfile") commands.getoutput("rm tmpfile") # images get reversed for some reason, reverse it back x = x[::-1] return (x, res.Url)