Example #1
0
def write_tags_to_image_via_et(image, tags):

    options = [
        '-codedcharacterset=UTF8', '-charset', 'iptc=cp1251', '-charset',
        'filename=cp1251', '{0}'.format(image)
    ]

    for tag in tags:
        if tag.lower() == "keywords":
            for i in tags[tag]:
                options.append('-iptc:{0}={1}'.format(tag, i))
        else:
            options.append('-iptc:{0}={1}'.format(tag, tags[tag]))

    cmd = [exiftool]
    cmd.extend(options)

    trace.debug('Cmd: {0}'.format(cmd))

    proc = Popen(cmd, stdout=PIPE, stderr=PIPE)
    out, err = proc.communicate()

    trace.debug('stdout: {0}; stderr: {1}'.format(out, err))

    if proc.returncode:
        trace.error('Unexpected return code: {0}; cmd: {1}'.format(
            proc.returncode, cmd))

    return proc.returncode
Example #2
0
def write_tags_to_image_via_et(image, tags):

    options = ['-codedcharacterset=UTF8',
               '-charset', 'iptc=cp1251',
               '-charset', 'filename=cp1251',
               '{0}'.format(image)]

    for tag in tags:
        if tag.lower() == "keywords":
            for i in tags[tag]:
                options.append('-iptc:{0}={1}'.format(tag, i))
        else:
            options.append('-iptc:{0}={1}'.format(tag, tags[tag]))

    cmd = [exiftool]
    cmd.extend(options)

    trace.debug('Cmd: {0}'.format(cmd))

    proc = Popen(cmd, stdout=PIPE, stderr=PIPE)
    out, err = proc.communicate()

    trace.debug('stdout: {0}; stderr: {1}'.format(out, err))

    if proc.returncode:
        trace.error('Unexpected return code: {0}; cmd: {1}'.format(proc.returncode, cmd))

    return proc.returncode
Example #3
0
def get_info_osm(latitude, longitude):
    keywords = []
    query = "{0}?format=json&q={1},{2}".format(osm_geocoder, latitude,
                                               longitude)

    try:
        result = request_get(query)
    except ConnectionError as errno:
        trace.error(" ".join(("Connection error:", str(errno))))
        return keywords
    except Timeout as errno:
        trace.error(" ".join(("Connection timeoute exceed:", str(errno))))
        return keywords
    except HTTPError as errno:
        trace.error(" ".join(("Invalid HTTP response:", str(errno))))
        return keywords
    except RequestException as errno:
        trace.error('Exception: {0}'.format(errno))
        return keywords

    core_dic = json_loads(result.text)

    object_class = core_dic[0]["class"]
    object_type = core_dic[0]["type"]

    keywords.append(core_dic[0]["display_name"].split(",")[0])
    keywords.extend(get_osm_keywords(object_class, object_type))
    return keywords
Example #4
0
def get_info_yandex(latitude, longitude):
    items = {}
    query = "{0}?format=json&geocode={1},{2}".format(yandex_geocoder,
                                                     longitude, latitude)

    try:
        result = request_get(query)
    except ConnectionError as errno:
        trace.error(" ".join(("Connection error:", str(errno))))
        return items
    except Timeout as errno:
        trace.error(" ".join(("Connection timeoute exceed:", str(errno))))
        return items
    except HTTPError as errno:
        trace.error(" ".join(("Invalid HTTP response:", str(errno))))
        return items
    except RequestException as errno:
        trace.error('Exception: {0}'.format(errno))
        return items

    core_dic = json_loads(result.text)
    try:
        for feature_member in core_dic['response']['GeoObjectCollection'][
                'featureMember']:
            try:
                kind = feature_member['GeoObject']['metaDataProperty'][
                    'GeocoderMetaData']['kind']
                items[kind] = feature_member['GeoObject']['name']
            except KeyError as errno:
                trace.warning("Invalid key: {0}".format(errno))
    except KeyError as errno:
        trace.warning("Invalid key: {0}".format(errno))
        return items

    return items
Example #5
0
def get_info_osm(latitude, longitude):
    keywords = []
    query = "{0}?format=json&q={1},{2}".format(osm_geocoder, latitude, longitude)

    try:
        result = request_get(query)
    except ConnectionError as errno:
        trace.error(" ".join(("Connection error:", str(errno))))
        return keywords
    except Timeout as errno:
        trace.error(" ".join(("Connection timeoute exceed:", str(errno))))
        return keywords
    except HTTPError as errno:
        trace.error(" ".join(("Invalid HTTP response:", str(errno))))
        return keywords
    except RequestException as errno:
        trace.error('Exception: {0}'.format(errno))
        return keywords

    core_dic = json_loads(result.text)

    object_class = core_dic[0]["class"]
    object_type = core_dic[0]["type"]

    keywords.append(core_dic[0]["display_name"].split(",")[0])
    keywords.extend(get_osm_keywords(object_class, object_type))
    return keywords
Example #6
0
def get_info_yandex(latitude, longitude):
    items = {}
    query = "{0}?format=json&geocode={1},{2}".format(yandex_geocoder, longitude, latitude)

    try:
        result = request_get(query)
    except ConnectionError as errno:
        trace.error(" ".join(("Connection error:", str(errno))))
        return items
    except Timeout as errno:
        trace.error(" ".join(("Connection timeoute exceed:", str(errno))))
        return items
    except HTTPError as errno:
        trace.error(" ".join(("Invalid HTTP response:", str(errno))))
        return items
    except RequestException as errno:
        trace.error('Exception: {0}'.format(errno))
        return items

    core_dic = json_loads(result.text)
    try:
        for feature_member in core_dic['response']['GeoObjectCollection']['featureMember']:
            try:
                kind = feature_member['GeoObject']['metaDataProperty']['GeocoderMetaData']['kind']
                items[kind] = feature_member['GeoObject']['name']
            except KeyError as errno:
                trace.warning("Invalid key: {0}".format(errno))
    except KeyError as errno:
        trace.warning("Invalid key: {0}".format(errno))
        return items

    return items