пятница, 24 января 2020 г.

cl-maxminddb

В общем, нужно было делать запрос к базам MaxMind. Не нашёл ничего вменяемого под CL. Хотел было быстренько сделать биндинги к си библиотеке, но там были передачи значений на стеке, что-то я запутался и подумал, что можно и нативно налабать. В общем, накидал. Читает, правда без всякой обработки ошибок в том плане, что версия БД и т.д. прочие вещи, которые можно было бы сделать. Но он работает. :) Вот код. Собственно, небольшой пример:

> (with-mmdb (mmdb "/var/lib/GeoIP/GeoLite2-City.mmdb")
    (mmdb-query mmdb "8.8.8.8"))

(("continent" ("code" . "NA") ("geoname_id" . 6255149)
  ("names" ("de" . "Nordamerika") ("en" . "North America")
   ("es" . "Norteamérica") ("fr" . "Amérique du Nord") ("ja" . "北アメリカ")
   ("pt-BR" . "América do Norte") ("ru" . "Северная Америка")
   ("zh-CN" . "北美洲")))
 ("country" ("geoname_id" . 6252001) ("iso_code" . "US")
  ("names" ("de" . "USA") ("en" . "United States") ("es" . "Estados Unidos")
   ("fr" . "États-Unis") ("ja" . "アメリカ合衆国") ("pt-BR" . "Estados Unidos")
   ("ru" . "США") ("zh-CN" . "美国")))
 ("location" ("accuracy_radius" . 1000) ("latitude" . 37.751d0)
  ("longitude" . -97.822d0) ("time_zone" . "America/Chicago"))
 ("registered_country" ("geoname_id" . 6252001) ("iso_code" . "US")
  ("names" ("de" . "USA") ("en" . "United States") ("es" . "Estados Unidos")
   ("fr" . "États-Unis") ("ja" . "アメリカ合衆国") ("pt-BR" . "Estados Unidos")
   ("ru" . "США") ("zh-CN" . "美国"))))

Комментариев нет:

Отправка комментария