skip to navigation
skip to content

django-rossvyaz 1.0.0

РосСвязь: Выписка из реестра Российской системы и плана нумерации - подготовленная таблица с очищенными регионами

Приложение содержит:

  • Таблица данных привязки номера телефона к региону (только Россия - РФ), взятая из Россвязи (Федеральное агенство связи);
  • Система импорта из разных источников (Сейчас есть только для диапозона DEF);
  • Небольшой QuerySet Manager;

Установка

Проделываем в командной строке

$ git clone git://github.com/satels/django-rossvyaz.git
$ cd django-rossvyaz
$ python setup.py install

Потом следует добавить ‘django_rossvyaz’ в INSTALLED_APPS и выполнить

$ python manage.py syncdb  # Django < 1.7
$ python manage.py migrate django_rossvyaz  # Django >= 1.7

Настройка

Добавить app в settings.py

INSTALLED_APPS = [
    ..
    'django_rossvyaz',
    ..
]

Необязательные параметры (в settings.py):

  • ROSSVYAZ_CODING - дефолтная кодировка файла с таблицей от РосСвязи (по-умолчанию windows-1251).
  • ROSSVYAZ_SOURCE_URLS - ссылки на файлы на сайте-источнике (сейчас по-умолчанию только DEF диапозон)
  • ROSSVYAZ_SEND_MESSAGE_FOR_ERRORS - отправлять ли сообщения об ошибках на почту при обновлении (по-умолчание, True)

Использование

Для получения объекта (для определения региона)

from __future__ import print_function, unicode_literals
from django_rossvyaz.logic import clean_phone, CleanPhoneError
from django_rossvyaz.models import PhoneCode

try:
    phone = clean_phone('89687298907', PhoneCode.PHONE_TYPE_DEF)
except CleanPhoneError as e:
    raise e

phonecodes = PhoneCode.objects.by_phone(phone)
if phonecodes.exists():
    phonecode = phonecodes[0]
    print(phonecode.first_code)  # 968
    print(phonecode.from_code, phonecode.to_code)  # Диапозон кодов (В этом примере: '3500000'-'7999999')
    print(phonecode.block_size)  # Кол-во номеров в диапозоне (4500000)
    print(phonecode.operator)  # Оператор связи ('ВымпелКом')
    print(phonecode.region)  # Код региона (или название региона) (77)
    print(phonecode.phone_type)  # 'def'

Пример использования через Postgres SQL

SELECT
    regioncode.region_name AS region_name
FROM
    phones_phone AS phone,
    django_rossvyaz_phonecode AS phonecode,
    regions_regioncode AS regioncode
WHERE
    regioncode.region_id = phonecode.region AND
    substring(phone.phone from 3 for 3) = phonecode.first_code AND
    substring(phone.phone from 6 for 8) >= phonecode.from_code AND
    substring(phone.phone from 6 for 8) <= phonecode.to_code AND
    phone.id = 5

Обновления базы

Чтобы обновить базу

$ python manage.py rossvyaz_update --phone-type=def --clean-region

Рекомендуется обновлять базу с кодами отсюда: https://zniis.ru/bdpn/operators/router-table - скачивается файл XLSX, форматируете в CSV формат (можно использовать этот сервис для форматирования: https://www.kontrolnaya-rabota.ru/convert/xlsx2csv/): zniis.csv

$ python manage.py rossvyaz_update --phone-type=def --encoding='utf-8' --filename=/path/to/zniis.csv
 
File Type Py Version Uploaded on Size
django-rossvyaz-1.0.0.tar.gz (md5) Source 2017-06-18 7KB