На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

База номеров по регионам на PHP


Возникла тут задача: написать API для партнерской программы. При этом в партнёрской программе принимается и обрабатывается номер телефона – как мобильный, так и стационарный. Необходимо было на PHP написать скрипт, который будет по номеру (коду) определять регион. Что ж надо – значит сделаем.

Сначала я решил задачу до смешного просто. Нашел сайт, который делает тоже самое (определяет оператора и регион по номеру) и стал слать ему запросы курлом – затем парсить ответы. Получился такой код:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://phonenum.info/phone/'.$phone);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameters));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);

$html = str_get_html($result);
foreach($html->find('.itemprop_answer') as $element)  {
$region = $element->innertext;
$region = mb_substr($region, mb_strpos($region, "Регион: "));
$region = mb_substr($region, 8);
$region = mb_substr ($region, 0, mb_strrpos($region, "Местное время"));
$region = strip_tags ($region);

if ($region=="") $region = "Неизвестен";
} 
Ну реально код простейший. Шлем пост запрос, затем с помощью simple html dom парсим, немного обрезаем и получаем ответ в формате: Вологодская обл



Однако, заказчик совсем не обрадовался такому решению. В общем, его можно понять – зависеть от постороннего сайта не очень правильно, даже если сайт не собирается закрываться и не имеет защиты. Ладно, ищем другое решение. Собственно, оно только одно: нужна своя база и поиск по ней.

База нашлась. В формате страницы html, но это совсем не проблема. Распарсиваем и заносим её в таблицу:



Ну а остальное уже дело техники. Просто сравниваем коды, а оставшаяся часть чтобы входила в емкость (находилась между от и до):

$kod = mb_substr($phone,0,3);
$otdo = mb_substr($phone,3,9);

$result_tel = $conn->query("SELECT * FROM `region` WHERE `kod` = '".$kod."' AND  `ot` < '".$otdo."' AND  `do` > '".$otdo."'  ");
$row_tel = $result_tel->fetch_assoc();

$region = $row_tel["region"];

if ($region=="") $region = "Неизвестен";
Казалось бы, теперь задача решена. Однако, не совсем. В поле номер телефона человек же может указать и не мобильный, верно? То есть нужна аналогичная база для стационарных телефонов по определению региона.

Создаем почти аналогичную базу данных



А вот код будет немного другим.

$region = "Неизвестен";
$result_tel = $conn->query("SELECT * FROM `regiondom` ");
while ($row_tel = $result_tel->fetch_assoc()) {
$pos2 = false;
$pos2 = stripos($phone, $row_tel["kod"]);
if ($pos2 !== false) {
	if ($pos2==0) $region = $row_tel["region"];
		}
}
Здесь мы уже напротив, сравниваем код в базе, входит ли он в часть номера телефона. И обязательно чтобы он был в начале.

Все, задача решена. Если вам требуется запустить сервис на сайте (необязательно использующий номера телефонов), то вы можете обратиться ко мне. За небольшую сумму я вам с удовольствием помогу.




тегизаметки, php, базы данных, телефоны

Читайте также:




Как изменить позицию курсора на C#
Теория игр


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.