예제 #1
0
def getImage(searchTerm):
    searchTerm = "%s+logo" % (searchTerm)
    log.debug("Searching for %s" % searchTerm)

    try:
        imageUrls = bing.imageSearch(searchTerm, {"minWidth":400, "minHeight":400})
    except Exception, e:
        log.error("Bing exception error: %s" % (e))
        return None
예제 #2
0
def image_search(icao24: str, operator: str, type: str,
                 registration: str) -> str:
    """Search Bing for plane images. If found, update planedb with URL

    Arguments:
        icao24 {str} -- ICAO24 designation
        operator {str} -- Operator of aircraft
        type {str} -- Aircraft type
        registration {str} -- Aircraft registration

    Returns:
        str -- URL of image, hopefully

    @todo: don't search for
        Bluebird Nordic Boeing 737 4Q8SF TF-BBM
    but rather
        "Bluebird Nordic" "Boeing 737" "TF-BBM"
    or
        "Bluebird Nordic" "TF-BBM"
    or
        "Bluebird Nordic" Boeing "TF-BBM"
    """
    img_url = None
    # Bing sometimes refuses to search for "Scandinavian Airlines System" :-/
    op = operator.replace("Scandinavian Airlines System", "SAS")
    searchTerm = "%s %s %s" % (op, type, registration)
    logging.debug("Searching for %s", searchTerm)
    imageUrls = bing.imageSearch(searchTerm)
    if not imageUrls:
        imageUrls = bing.imageSearch(registration)
    if imageUrls:
        img_url = imageUrls[0]
        logging.info("Added image %s for %s", img_url, icao24)
        #        for k in plane:
        #            logging.info("%20s : %s" % (k, plane[k]))
        if not planedb.update_aircraft(icao24, {'image': img_url}):
            logging.error("Failed to update PlaneDB image for %s" % (icao24))
    else:
        logging.error(
            "Image search came up short for '%s', blacklisted (%s)?" %
            (searchTerm, icao24))
    return img_url
예제 #3
0
def getImage(searchTerm):
    searchTerm = "%s+logo" % (searchTerm)
    log.debug("Searching for %s" % searchTerm)

    try:
        imageUrls = bing.imageSearch(searchTerm, {
            "minWidth": 400,
            "minHeight": 400
        })
    except Exception, e:
        log.error("Bing exception error: %s" % (e))
        return None
예제 #4
0
def image_search(plane):
    img_url = None
    # Bing sometimes refuses to search for "Scandinavian Airlines System" :-/
    op = plane["operator"].replace("Scandinavian Airlines System", "SAS")
    searchTerm = "%s %s %s" % (op, plane["type"], plane["registration"])
    log.info("Searching for %s", searchTerm)
    imageUrls = bing.imageSearch(searchTerm)
    if imageUrls:
        img_url = imageUrls[0]
        log.info("Added url %s for %s", img_url, plane['icao24'])
        for k in plane:
            log.info("%20s : %s" % (k, plane[k]))
        plane['image'] = img_url
        if not planedb.update_aircraft(plane['icao24'], {'image': img_url}):
            sys.error("Failed to update image")

    else:
        log.error("Image search came up short for %s, blacklisted?" %
                  (plane['icao24']))
    return img_url
예제 #5
0
def getImage(searchTerm):
    searchTerm = "%s+logo" % (searchTerm)
    log.debug("Searching for %s" % searchTerm)

    try:
        imageUrls = bing.imageSearch(searchTerm, {"minWidth":400, "minHeight":400})
    except Exception as e:
        log.error("Bing exception error: %s" % (e))
        return None

    for url in imageUrls:
        log.debug(" Checking %s" % url)
        fileName, fileExtension = os.path.splitext(url)
        if fileExtension != ".svg" and fileExtension != ".gif":

            log.debug("Fetching %s" % url)
            opener = urllib2.build_opener()
            opener.addheaders = [('User-agent', 'Mozilla/5.0')]
            try:
                file = cStringIO.StringIO(opener.open(url, timeout = 10).read())
                im = Image.open(file)
                return (im, url)
            except urllib2.HTTPError as e:
                log.error("HTTP error: %s for %s" % (e, url))
                log.error("searchTerm : '%s'" % (searchTerm))
                pass
            except UnicodeEncodeError as e:
                log.error("UnicodeEncodeError error: %s" % (e))
                log.error("searchTerm : '%s'" % (searchTerm))
                pass
            except urllib2.URLError as e:
                log.error("URLError error: %s for %s" % (e, url))
                log.error("searchTerm : '%s'" % (searchTerm))
                pass

    return (None, None)
예제 #6
0
def proxyCheck(mosq, data):
    global min_receiver_distance
    global max_receiver_distance
    global minTrackingDistance
    global trackingICAO24
    global args
    global gImageDB
    global gCurImage

    lat = data["lat"]
    lon = data["lon"]
    altitude = data["altitude"]
    icao24 = data["icao24"]
    lost = data["lost"]

    if lat and lon:
        distance = receiverDistance(lat, lon, altitude)
        bearing = receiverBearing(lat, lon)
        data["distance"] = distance
        data["bearing"] = bearing

        if distance < minTrackingDistance:
            minTrackingDistance = distance
            if icao24 != trackingICAO24:
                if trackingICAO24:
                    log.debug("Giving up %s, tracking %s", trackingICAO24,
                              icao24)
                else:
                    log.debug("Tracking %s", icao24)
                trackingICAO24 = icao24
                # TODO: Lookup images here?
                planeimage = gImageDB.find(trackingICAO24)
                if planeimage:
                    gCurImage = planeimage.image
                elif data and data["operator"] and data["type"] and data[
                        "registration"]:
                    searchTerm = "%s %s %s" % (data["operator"], data["type"],
                                               data["registration"])

                    if args.no_images:
                        imageUrls = None
                    else:
                        imageUrls = bing.imageSearch(searchTerm, {
                            "minWidth": 1024,
                            "minHeight": 768
                        })

                    if imageUrls and data:
                        gCurImage = imageUrls[0]
                        log.debug("Added url %s for %s", gCurImage, icao24)
                        gImageDB.add(trackingICAO24, gCurImage)

        data["image"] = gCurImage
        if trackingICAO24 == icao24:
            if lost:
                log.debug("Lost %s", icao24)
                trackingICAO24 = None
                minTrackingDistance = 999999
                sendLost(mosq, data)
            else:
                minTrackingDistance = distance
                log.debug(" pos:%2f, %2f @ %dft distance:%d bearing:%d" %
                          (lat, lon, altitude, distance, bearing))
                sendProx(mosq, data)

        if distance < min_receiver_distance:
            log.info("New min range for %s at %d", icao24, distance)
            min_receiver_distance = distance
        if distance > max_receiver_distance:
            log.info("New max range for %s at %d", icao24, distance)
            max_receiver_distance = distance
예제 #7
0
def proxyCheck(mosq, data):
  global min_receiver_distance
  global max_receiver_distance
  global minTrackingDistance
  global trackingICAO24
  global args
  global gImageDB
  global gCurImage

  lat = data["lat"]
  lon = data["lon"]
  altitude = data["altitude"]
  icao24 = data["icao24"]
  lost = data["lost"]

  if lat and lon:
    distance = receiverDistance(lat, lon, altitude)
    bearing = receiverBearing(lat, lon)
    data["distance"] = distance
    data["bearing"] = bearing

    if distance < minTrackingDistance:
      minTrackingDistance = distance
      if icao24 != trackingICAO24:
        if trackingICAO24:
          log.debug("Giving up %s, tracking %s", trackingICAO24, icao24)
        else:
          log.debug("Tracking %s", icao24)
        trackingICAO24 = icao24
  # TODO: Lookup images here?
        planeimage = gImageDB.find(trackingICAO24)
        if planeimage:
          gCurImage = planeimage.image
        elif data and data["operator"] and data["type"] and data["registration"]:
          searchTerm = "%s %s %s" % (data["operator"], data["type"], data["registration"])

          if args.no_images:
            imageUrls = None
          else:
            imageUrls = bing.imageSearch(searchTerm, {"minWidth":1024, "minHeight":768})

          if imageUrls and data:
            gCurImage = imageUrls[0]
            log.debug("Added url %s for %s", gCurImage, icao24)
            gImageDB.add(trackingICAO24, gCurImage)

    data["image"] = gCurImage
    if trackingICAO24 == icao24:
      if lost:
        log.debug("Lost %s", icao24)
        trackingICAO24 = None
        minTrackingDistance = 999999
        sendLost(mosq, data)
      else:
        minTrackingDistance = distance
        log.debug(" pos:%2f, %2f @ %dft distance:%d bearing:%d" % (lat, lon, altitude, distance, bearing))
        sendProx(mosq, data)

    if distance < min_receiver_distance:
      log.info("New min range for %s at %d", icao24, distance)
      min_receiver_distance = distance
    if distance > max_receiver_distance:
      log.info("New max range for %s at %d", icao24, distance)
      max_receiver_distance = distance