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

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

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

Аватара пользователя
aven
Модератор
Сообщения: 1887
Зарегистрирован: 07 сен 2007, 16:55
Откуда: Ухта
Контактная информация:

Сообщение aven » 30 май 2012, 17:00

1) Исходящий звонок на номер A
2) Проверяется по своей базе, наш ли номер
3) Если номер наш, то маршрутизируем его по своим маршрутам

Как щас:
4) Если номер не наш - маршрутизируем по статически маршрутам

Будет
4) Если номер не наш - делается запрос в координационный центр, который упрощенно выглядит как БД с таблицей номер-провайдер и маршрутизируем по маршруту определенному для данного провайдера

И я чую, что доступ к этой базе будет за большие деньги.
Gentoo Linux || Asterisk 13.1-cert2
Решения телефонии на базе Asterisk || http://it-need.ru

Аватара пользователя
koqep
Сообщения: 221
Зарегистрирован: 26 янв 2010, 09:04
Откуда: Челябинская обл.
Контактная информация:

Сообщение koqep » 31 май 2012, 03:26

а может РосСвязь также выложит в html формате
Jabber конференция
сервер: conference.jabber.ru
комната: asterisk

Аватара пользователя
Leon77
Сообщения: 759
Зарегистрирован: 15 сен 2008, 16:52
Откуда: Щёлково, Моск.обл.

Сообщение Leon77 » 31 май 2012, 06:35

У них сейчас-то оно еле открывается.
Ищу работу

Аватара пользователя
koqep
Сообщения: 221
Зарегистрирован: 26 янв 2010, 09:04
Откуда: Челябинская обл.
Контактная информация:

Сообщение koqep » 31 май 2012, 08:00

нормально открывается, просто там html-ки по 4-е метра, вот и долго сам браузер их открывает.
Jabber конференция
сервер: conference.jabber.ru
комната: asterisk

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

Сообщение awsswa » 13 июл 2012, 04:35

Скрипт для заливки в базу mysql был опубликован на страницу раньше. Вот тут мой вариант для запроса номера сотового телефона из справочника.
Приветствуется критика моего запроса в mysql. Имя базы сменил только на "codes"

Предположим что входящий звонок приходит сюда:

[incoming-gorod]
exten => 2009XXX,1,NoOp( == входящий звонок с номера == ${CALLERID(number)} == )
exten => 2009XXX,n,GotoIF($[${LEN($CALLERID(number)})} != 10 ]?nesotovik) ; номер не равен 10 знакам ? нафиг его
exten => 2009XXX,n,GotoIF($[${CALLERID(number):0:1} != 9 ]?nesotovik) ; начало номера не на 9 ? это не сотовый
exten => 2009XXX,n,macro(seekmobnumber,${CALLERID(number)})
exten => 2009XXX,n(nesotovik),NoOp( == обработка далее == )

[macro-seekmobnumber]
exten => s,1,Set(sql=SELECT `operator`,`region` FROM `codes` WHERE ${ARG1:3:9} BETWEEN `code_from` AND `code_to` AND `code_abcdef`=${ARG1:0:3})
exten => s,n,NoOp( == номер телефона == ${ARG1:0:3} == ${ARG1:3:9} == )
exten => s,n,MYSQL(Connect connid localhost login password asterisk utf8)
exten => s,n,GotoIf($["${connid}" = ""]?error,1) ;если ошибка то выход
exten => s,n,MYSQL(Query resultid ${connid} ${sql})
exten => s,n,MYSQL(Fetch foundRow ${resultid} operator region)
exten => s,n,MYSQL(Clear ${resultid})
exten => s,n,MYSQL(Disconnect ${connid})
exten => s,n,NoOp( == название == ${operator} == ${region} == )
exten => s,n,Set(CDR(userfield)=${operator},${region}) ;результат запроса сюда
exten => error,1,NoOp( == error ! == )
exten => error,n,MYSQL(Disconnect ${connid})

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

Сообщение awsswa » 21 авг 2012, 08:43

Поиск операторов начинающихся на 3 (по аналогии на страницу раньше)

Структура таблицы

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

DROP TABLE IF EXISTS `abc_codes_3`; 
CREATE TABLE IF NOT EXISTS `abc_codes_3` ( 
  `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, 
  `region` varchar(400) NOT NULL, 
  UNIQUE KEY `code_id` (`code_id`), 
  KEY `code_abcdef` (`code_abcdef`) 
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=116182 ;
Заливка таблицы
Внимательно смотрим код (россвязь имеет таблицу за знаком | его необходимо заменить, я заменил на минус)
#!/bin/bash

DOWNFILE='http://www.rossvyaz.ru/docs/articles/ABC-3x.html';
TMPDIR='/tmp';
DB_USER='root';
DB_PASSWORD='ПАРОЛЬ';
DATABASE_NAME='asterisk';
DB_TABLE_NAME='abc_codes_3';

wget -c -q -O - $DOWNFILE | 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/$DB_TABLE_NAME
#Имя файла = имя таблицы
mysqlimport --user=$DB_USER --password=$DB_PASSWORD --columns "code_abcdef,code_from,code_to,code_volume,operator,region" --local --fields-terminated-by=";" --lines-terminated-by="\\n" $DATABASE_NAME $TMPDIR/$DB_TABLE_NAME
тоже самое делаем для
http://www.rossvyaz.ru/docs/articles/ABC-4x.html
http://www.rossvyaz.ru/docs/articles/ABC-8x.html

h1Nt
Сообщения: 4
Зарегистрирован: 24 мар 2008, 16:08

Сообщение h1Nt » 24 фев 2013, 09:55

[url=http://asteriskforum.ru/viewtopic.php?p=64600#64600][img]http://asteriskforum.ru/images/quotebackarrow.gif[/img][/url] awsswa @ Fri Jul 13, 2012 4:35 am писал(а):... Вот тут мой вариант для запроса номера сотового телефона из справочника.
Приветствуется критика моего запроса в mysql...
Я сделал через коннектор OBDC + реалтайм, используя ваши наработки (спасибо вам за это).
Строка запроса func_odbc получилась такой:

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

&#91;SEEKAREA&#93;
dsn=asterisk
readsql=SELECT region FROM codes WHERE $&#123;ARG1&#58;3&#58;9&#125; BETWEEN code_from AND code_to AND code_abcdef=$&#123;ARG1&#58;0&#58;3&#125;
Запрос из диалплана тоже в одну строку:

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

...
exten => _X.,n,Set&#40;CDR&#40;userfield&#41;=$&#123;ODBC_SEEKAREA&#40;$&#123;CALLERID&#40;num&#41;&#58;2&#125;&#41;&#125;&#41;
...
Я вообще показываю город/регион операторам в телефончики CALLERID(name), но тут уже дело хозяйское =)
Запрос выполняется гораздо быстрее, да и кода меньше.

Аватара пользователя
aven
Модератор
Сообщения: 1887
Зарегистрирован: 07 сен 2007, 16:55
Откуда: Ухта
Контактная информация:

Сообщение aven » 24 фев 2013, 11:31

А есть база для международных номеров?
Gentoo Linux || Asterisk 13.1-cert2
Решения телефонии на базе Asterisk || http://it-need.ru

h1Nt
Сообщения: 4
Зарегистрирован: 24 мар 2008, 16:08

Сообщение h1Nt » 25 фев 2013, 06:09

В таком виде, пожалуй, не будет.
Вот такая есть http://lynks.ru/file_download/9/destinations.sql
В принципе ничего не мешает в обработке исходящих/входящих международных звонков прописать отдельную функцию.

h1Nt
Сообщения: 4
Зарегистрирован: 24 мар 2008, 16:08

Сообщение h1Nt » 10 апр 2013, 18:46

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

&#91;CHECK_WORLD_NUM&#93;
dsn=asterisk
readsql=SELECT name FROM destinations WHERE prefix IN &#40;'$&#123;ARG1&#58;0&#58;1&#125;', '$&#123;ARG1&#58;0&#58;2&#125;', '$&#123;ARG1&#58;0&#58;3&#125;', '$&#123;ARG1&#58;0&#58;4&#125;', '$&#123;ARG1&#58;0&#58;5&#125;', '$&#123;ARG1&#58;0&#58;6&#125;', '$&#123;ARG1&#58;0&#58;7&#125;'&#41; ORDER BY LENGTH &#40;prefix&#41; DESC

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

exten => _X.,1,Set&#40;CDR&#40;userfield&#41;=$&#123;ODBC_CHECK_WORLD_NUM&#40;$&#123;EXTEN&#125;&#41;&#125;&#41;

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

Сообщение awsswa » 21 сен 2013, 06:25

Ну что продолжаем ?
Теперь варианты для продвинутых - те же запросы но через AGI

Прежде всего меняем структуры таблиц - запрос с сайта делаем с разделением на города и области
да, бывает кривой запрос, когда город выглядит не верно, когда таблица выглядит как
Правильно выглядящая таблица: city Пермь region Пермский край
Не правильно выглядящая таблица: city Пермский край region пусто
Ну уж так набит справочник - тут или город или регион - и я выбрал поле город город - потому как регион Ханты Мансийский Автономный Округ пришедший на телефон вообще никуда не влезет


AGI возвращает два значения по русски и в транслите по английски city=Пермь и cityeng=perm
можете использовать который вам подходит

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

root@voip&#58;/var/lib/asterisk/agi-bin# cat callerid3.agi
#!/usr/bin/php -q
<?php

require "phpagi.php";
$agi = new AGI&#40;&#41;;

$ca1 = $argv&#91;1&#93;;
$ca2 = $argv&#91;2&#93;;

//$ca1 = '343';
//$ca2 = '3794910';
//abc_codes_3 - имя таблицы из базы

$agi->verbose&#40;"Код города равен  &#58; ".$ca1&#41;;
$agi->verbose&#40;"Номер равен       &#58; ".$ca2&#41;;

$db = 'asterisk';
$dbuser = 'asterisk';
$dbpass = 'password';
$dbhost = 'localhost';

$connection = mysql_connect&#40;$dbhost,$dbuser,$dbpass&#41; or die&#40;"Could not connect $db &#58;".mysql_error&#40;&#41;&#41;;
mysql_select_db&#40;$db, $connection &#41; or die&#40;"Could not select&#58;".mysql_error&#40;&#41;&#41;;
$sql = "SELECT city FROM abc_codes_3 WHERE '$ca2' BETWEEN code_from AND code_to AND code_abcdef='$ca1' ";
$agi->verbose&#40;"Запрос&#58; ".$sql&#41;;
mysql_query &#40;"SET NAMES utf8"&#41;;
$queryResult = mysql_query &#40;$sql&#41; or die&#40;"Invalid query&#58; " . mysql_error&#40;&#41;&#41;;
$data = mysql_fetch_array&#40; $queryResult &#41;;
$agi->verbose&#40;$data&#91;'city'&#93;&#41;;
//обрезаем пробелы в начале и в конце
$cityfull = trim&#40;$data&#91;'city'&#93;&#41;;
//берем только первое слово из названия
$city = strstr&#40;$cityfull,' ',true&#41;;


function GetInTranslit&#40;$string&#41; &#123;
        $replace=array&#40;
                "'"=>"",
                "`"=>"",
                "а"=>"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"
        &#41;;
        return $str=iconv&#40;"UTF-8","UTF-8//IGNORE",strtr&#40;$string,$replace&#41;&#41;;
&#125;

$cityeng = GetInTranslit &#40;"$city"&#41; ;

$agi->verbose&#40;"Город&#58; ".$city&#41;;
$agi->verbose&#40;"City&#58; ".$cityeng&#41;;

$agi->set_variable&#40;'city', $city&#41;;
$agi->set_variable&#40;'cityeng', $cityeng&#41;;

?>

Заливка таблицы с сайта

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

root@voip&#58;/etc/asterisk/script# cat abc-code-3x.sh
#!/bin/bash

DOWNFILE='http&#58;//www.rossvyaz.ru/docs/articles/ABC-3x.html';
TMPDIR='/tmp';
DB_USER='root';
DB_PASSWORD='password';
DATABASE_NAME='asterisk';
DB_TABLE_NAME='abc_codes_3';

wget -c -q -O - $DOWNFILE | grep "^<tr>" | sed -e 's/<\/td>//g' -e 's/<tr>//g' -e 's/<\/tr>//g' -e 's/&#91;\t&#93;//g' -e 's/^<td>//g' -e 's/<td>/;/g' -e 's/|/;/g' | iconv -c -f WINDOWS-1251 -t UTF8 > $TMPDIR/$DB_TABLE_NAME

#Сохраню для истории другой вариант
#wget -c -q -O - $DOWNFILE > $TMPDIR/ABC-3x.html
#cat $TMPDIR/ABC-3x.html | grep "^<tr>" | sed -e 's/<\/td>//g' -e 's/<tr>//g' -e 's/<\/tr>//g' -e 's/&#91;\t&#93;//g' -e 's/^<td>//g' -e 's/<td>/;/g' -e 's/|/;/g' | iconv -c -f WINDOWS-1251 -t U
#TF8 > $TMPDIR/abc_codes_31
#cat $TMPDIR/abc_codes_31 | sed 's/;/;;/5' >> $TMPDIR/abc_codes_32
#cat $TMPDIR/abc_codes_32 | sed 's/;//8' | sed 's/;//7' >> $TMPDIR/abc_codes_33
#cat $TMPDIR/abc_codes_33 | 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
Структура таблицы, добавлено еще одно поле - city

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

DROP TABLE IF EXISTS `abc_codes_3`; 
CREATE TABLE IF NOT EXISTS `abc_codes_3` &#40; 
  `code_id` bigint&#40;20&#41; unsigned NOT NULL AUTO_INCREMENT, 
  `code_abcdef` smallint&#40;3&#41; NOT NULL, 
  `code_from` int&#40;11&#41; NOT NULL, 
  `code_to` int&#40;11&#41; NOT NULL, 
  `code_volume` int&#40;11&#41; NOT NULL, 
  `operator` varchar&#40;400&#41; NOT NULL,
  `city` varchar&#40;400&#41; NOT NULL, 
  `region` varchar&#40;400&#41; NOT NULL, 
  UNIQUE KEY `code_id` &#40;`code_id`&#41;, 
  KEY `code_abcdef` &#40;`code_abcdef`&#41; 
&#41; ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=116182 ;

Теперь как все это вызывать:

exten => s,n,GotoIf($[${CALLERID(number):0:1} != 3 ]?nobasetel3) ; номер начинается не на 3 ?
exten => s,n,AGI(callerid3.agi,${CALLERID(number):0:3},${CALLERID(number):3:9})
exten => s,n,NoOp( == ${cityeng} == )
exten => s,n,NoOp( == ${city} == )
exten => s,n,Set(CALLERID(name)=${cityeng})
exten => s,n(nobasetel3),NoOp( === Номер телефона начинается не на 3 === )

Как проверит что agi отрабатывает ?
Убираете комментарии и ставите их в другом месте, во так

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

$ca1 = '343';
$ca2 = '3794910';

потом
php callerid3.agi
И стучите по клавише Enter несколько раз, чтоб увидеть выход с отладчика

Если все успешно
получите город по русски и английски в формате UTF8

Все успешно функционирует уже несколько месяцев
не забываем, что для полного справочника страны надо заливать 4 таблицы, на 3, 4, 8, и 9

Передаем пламенный привет лучшему региону нашей страны в формате транлит
hanty - mansiyskiy-yugra avtonomnyy okrug

Спонсорская помощь в виде инвайта на habr приветствуется

В связи с тем что уже поступают вопросы как прикрутить это к FreePBX отвечаем:
Прежде всего редактируем extensions_custom.conf добавляя

[from-trunk-custom]
exten => _X!,1,Noop(== Определение номера ==)
exten => _X!,n,GotoIf($[${CALLERID(number):0:1} != 3 ]?nobasetel3)
exten => _X!,n,AGI(callerid3.agi,${CALLERID(num):0:3},${CALLERID(num):3:9})
exten => _X!,n,NoOp( == ${cityeng} == )
exten => _X!,n,NoOp( == ${city} == )
exten => _X!,n,Set(CDR(userfield)=${cityeng})
exten => _X!,n(nobasetel3),NoOp( === Номер телефона начинается не на 3 === )
exten => _X!,n,Goto(from-trunk,${EXTEN},1)

Потом идем во FreePBX Trunks выбираем наш рабочий транк и в PEER Details
меняем
context=from-trunk на context=from-trunk-custom

Перезагружаем диалплан в asterisk и звонок уже приходит на наш контекст и идет дальше
Теперь в Отчетах CDR Report уже появились поля с Именем города от куда пришел звонок
Последний раз редактировалось awsswa 30 июн 2014, 04:18, всего редактировалось 1 раз.

alexsun
Сообщения: 46
Зарегистрирован: 29 ноя 2011, 06:11

Сообщение alexsun » 20 дек 2013, 03:17

Tele2 запустил онлайн-сервис для определения принадлежности номера мобильного телефона к сотовому оператору и региону России.
http://mnp.tele2.ru/whois.html . Запрос идет типа http://mnp.tele2.ru/gateway.php?9136502088

Alextransit
Сообщения: 188
Зарегистрирован: 27 окт 2008, 11:09
Откуда: Perm

Сообщение Alextransit » 20 дек 2013, 06:22

скормил ему 3 номера. (http://mnp.tele2.ru/gateway.php?)
два определил, а на одном обламался.
а вот когда вбил на http://mnp.tele2.ru/whois.html
то отработал.

интересно.
а в паблике, будет доступна эта информация?
просто лучше это у себя хранить, и обновлять по мере необходимости.
Алексей Милько

xmaster83
Сообщения: 134
Зарегистрирован: 02 фев 2012, 09:19

Сообщение xmaster83 » 01 мар 2014, 05:28

А у меня ответ такой Connection timed out:110
на
http://mnp.tele2.ru/gateway.php?921280****

кстати и через http://mnp.tele2.ru/whois.html тоже не работает видать нагнули сервис ))
FreeBSD X.XX - Asterisk X.XX

alexsun
Сообщения: 46
Зарегистрирован: 29 ноя 2011, 06:11

Сообщение alexsun » 02 сен 2014, 08:49

Тут в очередной раз обновил с россвязи данные, и посмотрел статистику звонков один номер не определился +797881662** куда идет звонок. А мнп теле2 отработал мтс краснодарский край. Вот такие пироги у россвязи не все так четко - как-то странно.

Аватара пользователя
Leon77
Сообщения: 759
Зарегистрирован: 15 сен 2008, 16:52
Откуда: Щёлково, Моск.обл.

Сообщение Leon77 » 06 сен 2014, 05:33

Госорган, чего ыв хотите-то от них... Всё становится ясно тогда, когда разок исполнителям их позвонить... Им можно только посочувствовать.

whoim
Сообщения: 55
Зарегистрирован: 29 май 2014, 10:33
Контактная информация:

Сообщение whoim » 24 мар 2015, 09:22

Поднял свою mysql-базу для создания апи, обновляется с сайта россвязи, раз в сутки. Перенесенные не учитывает.
Если кому надо - дам доступ, апи простое, ответ в json.
Прикручивал клиентам для "расбрасывания" звонков по менеджерам в зависимости от региона.

Партнеры дают похожий доступ, 2$ месяц, но учитываются перенесенные номера.
Так что вопрос на самом деле прост..

Аватара пользователя
andrey1969
Сообщения: 123
Зарегистрирован: 18 янв 2010, 12:01
Откуда: 3/9 царство

Сообщение andrey1969 » 28 июн 2015, 17:05

Не совсем там по крыму есть ???

whoim
Сообщения: 55
Зарегистрирован: 29 май 2014, 10:33
Контактная информация:

Сообщение whoim » 24 авг 2015, 14:48

где именно?

Zoleg
Сообщения: 107
Зарегистрирован: 21 мар 2010, 06:59

Сообщение Zoleg » 20 ноя 2015, 09:53

Для учета перемещения блоков, создал еще mtt_exceptions куда вкидываются блоки исключенные из правил MTT. То есть номера или блоки номеров, которые не актуальны в основной БД MTT.

При запуске определялки региона запрос для начала ныряет в исключения, и только если там получает отлуп, ныряем в основную базу MTT.

Код Си впихнут в исходник Астера. На выходе получаем кличку оператора и подсовываем любой свободный канал на него с его же симки или верёвки - в общем гоним по каналам этого ОПСОСа.

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

    sprintf&#40;query, "SELECT operators.`name` AS operator FROM `mtt_exceptions` AS ex INNER JOIN `mtt_operators` AS operators ON operators.id = ex.operator WHERE `def` =%s AND %s <= `to` AND %s >= `from`",digphone,opcode,opcode&#41;;
    debug&#40;"QUERY = %s",query&#41;;
    ret = msql_get&#40;query&#41;;
    debug&#40;"Выводим ret=%i в reusable_opsos_separator  ",ret&#41;;
    if &#40;ret < 0&#41;
    &#123;
         debug&#40;"Ошибка запроса SELECT operators.`name` AS operator FROM `mtt_exceptions в reusable_opsos_separator QUERY = %s",query&#41;;
         return -1;
    &#125;    
    
    if &#40;ret == 0&#41;
    &#123;
        sprintf&#40;query, "SELECT operators.`name` AS operator  FROM `mtt_codes` AS ex INNER JOIN `mtt_operators` AS operators ON operators.`id` = ex.operator WHERE `def` =%s AND %s <= `to` AND %s >= `from`",digphone,opcode,opcode&#41;;
        debug&#40;"QUERY = %s",query&#41;;
        ret = msql_get&#40;query&#41;;
        
        if &#40;ret < 0&#41;
        &#123;
            debug&#40;"Ошибка запроса SELECT operators.`name` AS operator FROM `mtt_codes в reusable_opsos_separator QUERY = %s",query&#41;;
            return -1;
        &#125;
Отслеживание изменений такое. Старая БД сравнивается с новой БД. Все отличия кидаются в mtt_exceptions + наши ручные правки. Когда mtt_exceptions станет больше половины можно просто поменять названия mtt_exceptions на mtt и наоборот И цикл замкнется. При такой схеме ежедневные обновления MTT не нужны - они сами не каждый день обновляются.
АВТОМАТИЗАЦИЯ ДИСПЕТЧЕСКИХ ТАКСИ

УНИКАЛЬНАЯ ТЕХНОЛОГИЯ "ТАКСИ БЕЗ ДИСПЕТЧЕРОВ" - без Java и/или Интренет (только телефоны) http://tet-a-tet.mobi

Dep3kuu
Сообщения: 2
Зарегистрирован: 03 янв 2016, 19:16

Сообщение Dep3kuu » 03 янв 2016, 19:20

Может я проглядел, в каких-то из скриптов это поправили.
В общем, до открытия этой ветки, сам пилил экспорт из csv файла россвязи в Mysql. Потом увидел здесь готовые скрипты, запустил, сверил - "не бьет".
Проверил коды ответа сервера - данные по http://www.rossvyaz.ru/docs/num/DEF-9x.html обновлялись последний раз в 2012 году.

Свежие данные здесь: http://rossvyaz.ru/docs/articles/DEF-9x.html

Себе буду пилить проверку даты изменения файла перед загрузкой данных и уведомлялку об отсутствии обновлений более 3х месяцев.

ЗЫ: За скрипты спасибо, еще не все осилил, но явно будет проще, чем пилить все с нуля)

UPD: И чет я не понял - либо раньше файлы у них были в 1251, либо непонятно мне зачем вы конвертите кодировки.

Аватара пользователя
Wapo
Сообщения: 1387
Зарегистрирован: 08 май 2009, 09:47
Откуда: СПб.
Контактная информация:

Сообщение Wapo » 03 янв 2016, 21:18

Уважаемый. Вы, совсем случайно, не заметили что ГОДЫ-ВЕКА меняются? У них (россвязь) все меняется исключительно по плану: с первого..... и т.д.
А скоро .... у них от виндоУз останется что-то национальное..... :)
P4 3.0 + 1Gb CentOS 5.8 Aster 11.25.1
Не люблю gui-сборки: натуральный продукт вкуснее.
И еще: я ПРОФИ так как НЕ ЛЕНЮСЬ читать литературу.

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

Сообщение awsswa » 12 янв 2016, 07:13

Убрал перекодировку - разбил скрипт на части

DOWNFILE='http://rossvyaz.ru/docs/articles/DEF-9x.html';
TMPDIR='/tmp';
DB_USER='логин';
DB_PASSWORD='пароль';
DATABASE_NAME='имя-базы';
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' > $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
платный суппорт по мере возможностей

Dep3kuu
Сообщения: 2
Зарегистрирован: 03 янв 2016, 19:16

Сообщение Dep3kuu » 01 фев 2016, 11:33

[url=http://asteriskforum.ru/viewtopic.php?p=82204#82204][img]http://asteriskforum.ru/images/quotebackarrow.gif[/img][/url] Wapo @ Пн Янв 04, 2016 03:18 писал(а):Уважаемый. Вы, совсем случайно, не заметили что ГОДЫ-ВЕКА меняются? У них (россвязь) все меняется исключительно по плану: с первого..... и т.д.
А скоро .... у них от виндоУз останется что-то национальное..... :)
Заметил, потому и обратил внимание на даты. А написал просто чтобы другие (как я), кто зайдут сюда из гугла, сразу видели в чем может вылезти ошибко)

whoim
Сообщения: 55
Зарегистрирован: 29 май 2014, 10:33
Контактная информация:

Сообщение whoim » 28 сен 2016, 01:36

кто может мнп делится, в обмен на что нибудь?
облачные сервера asterisk/freepbx/a2billing/espocrm с полной техподдержкой, от 1490-мес. skype: whoim2, whoim@asterisk.ru

Ответить