(toiminnot)

hwechtla-tl: Nettipäiväkirja 19.08.2013

Kierre.png

Mikä on WikiWiki?
nettipäiväkirja
koko wiki (etsi)
viime muutokset


Päätin kokeilla libextractor:n käyttöä Pythonista. En ole ikinä nähnyt yhtä säälittävää Python-bindingia - sitkeän selvittelyn jälkeen olen saanut selville, miten ilmeisesti kirjastoa pitää kutsua, että saa jonkin tiedoston metadatat luetuksi avain-arvo-pareina (johon vielä lisään pluginin nimen, koska joidenkin pluginien tuottama tieto on luotettavampaa kuin toisten).

Koodi kertoo kaiken; Python-koodin ei tosiaankaan pitäisi mielestäni näyttää tältä:

good_types = [extractor.EXTRACTOR_METAFORMAT_UTF8,
                extractor.EXTRACTOR_METAFORMAT_C_STRING]

def strip_prefix(string, prefix):
        if string.startswith(prefix): return string[len(prefix):]
        return string

def extract(filename):
        x = extractor.Extractor()
        keywords = x.keywordTypes()
        result = []
        def callback(_, plugin, kwtype, mdformat, mdmime, data, datalen):
                if mdformat not in good_types: return 0
                assert mdmime == 'text/plain'
                metadata_val = ctypes.cast(data, ctypes.c_char_p).value
                assert len(metadata_val) == datalen - 1
                if mdformat == extractor.EXTRACTOR_METAFORMAT_UTF8:
                        metadata_val = metadata_val.decode('utf-8')
                metadata_key = keywords[kwtype]
                plugin_name, fnext = os.path.splitext(os.path.basename(plugin))
                plugin_name = strip_prefix(plugin_name, 'libextractor_')
                result.append((plugin_name, metadata_key, metadata_val))
                return 0
        x.extract(callback, None, filename)
        return result


kommentoi (viimeksi muutettu 19.08.2013 16:50)