Numcap — npm для определения оператора и региона по номеру телефона

    Тем, кто работает с телефонией, приложениями связанных со звонками и т.п. время от времени приходится сталкиваться с вопросами: «а можно определять с какого региона этот звонок?» и «а этот номер какого мобильного оператора?»

    В общем-то, ответы найти легко. На сайте Федерального агентства связи есть данные о ресурсе нумерации всех операторов связи. Заходишь на сайт, скачиваешь нужный CSV файл и находишь нужную информацию.

    Но ведь можно автоматизировать этот поиск? Конечно. И многие аккуратно парсят этот CSV и складывают к себе в базу данных. А затем используют. Я тоже так делаю.

    Но недавно с моим коллегой мы решили немного это упаковать и сделать npm для быстрого подключения ресурса нумерации к проекту на node.js.

    Ссылка на гитхаб, ссылка на npm.

    Далее немного деталей.


    В npm уже лежат 4 файла в JSON для быстрого поиска данных по номеру. Это преобразованные в JSON из CSV данные с сайта Федерального агентства связи РФ. Имеют ту же структуру, что и CSV: код, диапазон номеров, количество номеров в диапазоне, название оператора и регион.

    Поиск по номеру заключается в поиске нужного диапазона в файле и предоставлении данных по этому диапазону.

    Пример использования numcap
    var numcap = require('numcap');
    
    var finder = new numcap();
    
    finder.getData("8 (391) 274-50-00", function (err, data) {
        console.log(data);
    });
    
    /*
    Output data object:
     { code: '391',
      begin: '2745000',
      end: '2745399',
      capacity: '400',
      operator: 'Мобилон Телекоммуникации',
      region: 'Красноярск |Красноярский край' }
    */
    


    Утилита ncli.js
    В комплекте идет консольная утилита ncli.js, которая может пригодиться в следующих случаях.

    1. Обновление данных. Данные на сайте обновляются примерно раз в месяц, поэтому периодически нужно актуализировать данные.

    2. Перенос данных в Mongo DB. Использование файлов медленнее, чем использование базы данных mongo, поэтому данные JSON файлов можно перенести в mongo.

    Описание опций утилиты есть в readme проекта.

    Надеюсь, пригодится вам в ваших разработках. Принимаются конструктивные предложения по улучшению и дополнительному функционалу.

    P.S. Во время подготовки утилиты по скачиванию CSV файлов мой коллега Александр заметил, что в паспорте открытых данных неверно указаны ссылки на эти данные. Федеральное агентство связи достаточно оперативно внесло корректировки в паспорт открытых данных по ресурсу нумерации.
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 11

      +3
      регион ладно (пока), но с введением MNP оператора стало определять чуть сложнее
        0
        Надо будет оберточку на этот сервис написать np.zniis.ru/
        +1
        Так, вроде, автоматизировали уже и не раз. Вот, например: www.mtt.ru/ru/defcodes/
          0
          а) теперь вы к себе скачиваете данные (они в npm лежат), а затем используете без запросов к внешним ресурсам.
          б) по приведенной выше ссылке только коды мобильных операторов, в numcap — и мобильные, и стационарные.
            +1
            Тогда уже http://xinit.ru/def/, уж не сочтите за рекламу. Там сразу и страны, и городские номера, и мобильные и MNP.

            Но «фишка» решения автора заключается в том, что файл скачивается на компьютер, и для работы программы уже не нужен Интернет. Кроме того, раз уж это консольная программа, то можно автоматизировать некоторые операции, используя тот же bash.
              +1
              Ради любопытства, а откуда вы берете информацию о MNP (какой оператор обслуживает конкретный номер)? есть какая-то публичная БД (был бы признателен за ссылку, можно в ЛС)?
                0
                меня то же самое интересует, где вы берете MNP базу, по чем? можно в личку :)
              0
              Чего-то мой йотовский номер (начинается на +7 999) ничего не хочет определять…
                0
                Номера Скартела и Мегафона с кодом DEF=999 есть в файлах данных. Скиньте в личку номер и код, который написали для использования numcap — попробую разобраться что не так.
                  +1
                  Для читателей: всё, разобрались, всё работает.
                0
                В dadata.ru/api/clean/#request-phone достаточно давно можно вынимать и провайдера, и регион, и даже таймзону. Только отмены мобильного рабства пока вроде не предусмотрено.

                Only users with full accounts can post comments. Log in, please.