как различать принадлежность номера к области?

Основной форум.
Для опытных

Модераторы: Admins, Модераторы

awsswa
Сообщения: 1718
Зарегистрирован: 28 апр 2012, 10:19
Откуда: Russia, Пермь

Re: как различать принадлежность номера к области?

Сообщение awsswa » 14 май 2018, 12:58

Тема еще не потеряла актуальность
создаем базу:

Код: Выделить всё

use asteriskcdrdb;
CREATE TABLE IF NOT EXISTS `abc_codes_9` (
  `code_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `code_abcdef` smallint(3) NOT NULL,
  `code_from` int(11) NOT NULL,
  `code_to` int(11) NOT NULL,
  `code_volume` int(11) NOT NULL,
  `operator` varchar(400) NOT NULL,
  `city` varchar(400) NOT NULL,
  `region` varchar(400) NOT NULL,
  UNIQUE KEY `code_id` (`code_id`),
  KEY `code_abcdef` (`code_abcdef`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=220851 ;
скрипт импорта:

Код: Выделить всё

#!/bin/bash
#Заливка https://rossvyaz.gov.ru/docs/articles/DEF-9x.html

DOWNFILE='https://rossvyaz.gov.ru/docs/articles/DEF-9x.html';
TMPDIR='/tmp';
DB_USER='freepbxuser';
DB_PASSWORD='пароль';
DATABASE_NAME='asteriskcdrdb';
DB_TABLE_NAME='abc_codes_9';

wget -c -q -O - $DOWNFILE > $TMPDIR/DEF-9x.html
cat $TMPDIR/DEF-9x.html | grep "^<tr>" | sed -e 's/<\/td>//g' -e 's/<tr>//g' -e 's/<\/tr>//g' -e 's/[\t]//g' -e 's/^<td>//g' -e '
s/<td>/;/g' -e 's/|/;/g' | iconv -c -f WINDOWS-1251 -t UTF8 > $TMPDIR/abc_codes_91
cat $TMPDIR/abc_codes_91 | sed 's/;/;;/5' >> $TMPDIR/abc_codes_92
cat $TMPDIR/abc_codes_92 | sed 's/;//8' | sed 's/;//7' >> $TMPDIR/abc_codes_93
cat $TMPDIR/abc_codes_93 | sed 's/\r//g' >> $TMPDIR/$DB_TABLE_NAME

#Имя файла = имя таблицы

mysqlimport --user=$DB_USER --password=$DB_PASSWORD --columns "code_abcdef,code_from,code_to,code_volume,operator,city,region" --
local --fields-terminated-by=";" --lines-terminated-by="\\n" $DATABASE_NAME $TMPDIR/$DB_TABLE_NAME

скрипт AGI для поиска

Код: Выделить всё

#!/usr/bin/php -q
<?php

require "phpagi.php";
$agi = new AGI();

$ca1 = $argv[1];
$ca2 = $argv[2];

//$ca1 = '906';
//$ca2 = '8775123';
//abc_codes_9 - имя таблицы из базы

$agi->verbose("Код города равен  : ".$ca1);
$agi->verbose("Номер равен       : ".$ca2);

$db = 'asteriskcdrdb';
$dbuser = 'freepbxuser';
$dbpass = пароль';
$dbhost = 'localhost';

$connection = mysql_connect($dbhost,$dbuser,$dbpass) or die("Could not connect $db :".mysql_error());
mysql_select_db($db, $connection ) or die("Could not select:".mysql_error());
$sql = "SELECT region FROM abc_codes_9 WHERE '$ca2' BETWEEN code_from AND code_to AND code_abcdef='$ca1' ";
$agi->verbose("Запрос: ".$sql);
mysql_query ("SET NAMES utf8");
$queryResult = mysql_query ($sql) or die("Invalid query: " . mysql_error());
$data = mysql_fetch_array( $queryResult );
$agi->verbose($data['region']);

//обрезаем пробелы в начале и в конце
$cityfull = trim($data['region']);

//берем только первое слово из названия
if (strstr($cityfull,' ',true)) {
    $city = stristr($cityfull,' ',true);
    } else {
    $city = $cityfull;
}

function GetInTranslit($string) {
        $replace=array(
                "'"=>"",
                "`"=>"",
                "а"=>"a","А"=>"a",
                "б"=>"b","Б"=>"b",
                "в"=>"v","В"=>"v",
                "г"=>"g","Г"=>"g",
                "д"=>"d","Д"=>"d",
                "е"=>"e","Е"=>"e",
                "ж"=>"zh","Ж"=>"zh",
                "з"=>"z","З"=>"z",
                "и"=>"i","И"=>"i",
                "й"=>"y","Й"=>"y",
                "к"=>"k","К"=>"k",
                "л"=>"l","Л"=>"l",
                "м"=>"m","М"=>"m",
                "н"=>"n","Н"=>"n",
                "о"=>"o","О"=>"o",
                "п"=>"p","П"=>"p",
                "р"=>"r","Р"=>"r",
                "с"=>"s","С"=>"s",
                "т"=>"t","Т"=>"t",
                "у"=>"u","У"=>"u",
                "ф"=>"f","Ф"=>"f",
                "х"=>"h","Х"=>"h",
                "ц"=>"c","Ц"=>"c",
                "ч"=>"ch","Ч"=>"ch",
                "ш"=>"sh","Ш"=>"sh",
                "щ"=>"sch","Щ"=>"sch",
                "ъ"=>"","Ъ"=>"",
                "ы"=>"y","Ы"=>"y",
                "ь"=>"","Ь"=>"",
                "э"=>"e","Э"=>"e",
                "ю"=>"yu","Ю"=>"yu",
                "я"=>"ya","Я"=>"ya",
                "і"=>"i","І"=>"i",
                "ї"=>"yi","Ї"=>"yi",
                "є"=>"e","Є"=>"e"
        );
        return $str=iconv("UTF-8","UTF-8//IGNORE",strtr($string,$replace));
}

$cityeng = GetInTranslit ("$city") ;

$agi->verbose("Город: ".$city);
$agi->verbose("City: ".$cityeng);

$agi->set_variable('city', $city);
$agi->set_variable('cityeng', $cityeng);

?>

А дальше сложности из за кривой базы
часть городов отдается с "г." в начале что меняет ровный строй
так что поиском ищем кривые города

Код: Выделить всё

SELECT region FROM abc_codes_9 WHERE region LIKE 'г. %';
а потом правим базу

Код: Выделить всё

UPDATE abc_codes_9 SET region = 'Москва' WHERE region = 'г. Москва';
UPDATE abc_codes_9 SET region = 'Москва' WHERE region = 'г. Москва и Московская область';
UPDATE abc_codes_9 SET region = 'Москва' WHERE region = 'Московская область МоскваМосковская область';
UPDATE abc_codes_9 SET region = 'Якутск' WHERE region = 'г. ЯкутскРеспублика Саха /Якутия/';
UPDATE abc_codes_9 SET region = 'Псков' WHERE region = 'г. ПсковПсковская обл.';
UPDATE abc_codes_9 SET region = 'Кострома' WHERE region = 'г. Костромар-н КостромскойКостромская обл.';
UPDATE abc_codes_9 SET region = 'Назрань' WHERE region = 'г. НазраньРеспублика Ингушетия';
UPDATE abc_codes_9 SET region = 'Казань' WHERE region = 'г. КазаньРеспублика Татарстан';
UPDATE abc_codes_9 SET region = 'Саранск' WHERE region = 'г. СаранскРеспублика Мордовия';
UPDATE abc_codes_9 SET region = 'Мурманск' WHERE region = 'г. МурманскМурманская обл.';
UPDATE abc_codes_9 SET region = 'Севастополь' WHERE region = 'г. Севастополь и Республика Крым';
UPDATE abc_codes_9 SET region = 'Норильск' WHERE region = 'г. НорильскКрасноярский край';
UPDATE abc_codes_9 SET region = 'Севастополь' WHERE region = 'г. Севастополь';
UPDATE abc_codes_9 SET region = 'Тюмень' WHERE region = 'г. ТюменьТюменская обл.';
UPDATE abc_codes_9 SET region = 'Санкт-Петербург' WHERE region = 'г. Санкт - Петербург и Ленинградская область';
UPDATE abc_codes_9 SET region = 'Владимир' WHERE region = 'г. ВладимирВладимирская обл.';
UPDATE abc_codes_9 SET region = 'Санкт-Петербург' WHERE region = 'г. Санкт-Петербург и Ленинградская область';
UPDATE abc_codes_9 SET region = 'Сочи' WHERE region = 'г. СочиКраснодарский край';
UPDATE abc_codes_9 SET region = 'Красноярск' WHERE region = 'г. КрасноярскКрасноярский край';
UPDATE abc_codes_9 SET region = 'Оренбург' WHERE region = 'г. ОренбургОренбургская обл.';
UPDATE abc_codes_9 SET region = 'Курган' WHERE region = 'г. КурганКурганская обл.';
платный суппорт по мере возможностей

virus_net
Сообщения: 427
Зарегистрирован: 05 окт 2014, 06:10
Откуда: Москва
Контактная информация:

Re: как различать принадлежность номера к области?

Сообщение virus_net » 15 май 2018, 05:19

А дальше сложности из за кривой базы
Одна из причин рождения проекта http://rosreestr.subnets.ru/
bitname.ru - Домены .bit (namecoin) .emc .coin .lib .bazar (emercoin)
- whois сервис: whois.bitname.ru или whois.bitname.bit
- dns сервис: dns1.bitname.ru dns2.bitname.ru
- статистика по доменам
ENUMER - звони бесплатно и напрямую.

Ответить