携帯電話のオペレーターと地域を調べる

画像

どういうわけか、インターネットを歩いていると、興味深いリンク- モバイルオペレータのコードに出会いました。 そして、私は本当にそのような拠点を地元に持ちたいと思っていました。

mysqlベースのcatダンプ、その使用のためのphpコード、および更新のためのスクリプトパーサー。



最初に、データベースダウンロードする必要があります

その後、次のようにデータベースからデータを取得できます。



<?php

$config[ 'mysql_host' ] = 'localhost' ;

$config[ 'mysql_user' ] = 'root' ;

$config[ 'mysql_password' ] = '' ;

$config[ 'mysql_base' ] = 'smsprice' ;



define( "PREFIX" , "mtt_" );



$mysql = new mysqli($config[ 'mysql_host' ],$config[ 'mysql_user' ],$config[ 'mysql_password' ],$config[ 'mysql_base' ]);

$mysql->query( "SET NAMES 'cp1251'" );



$number = '+7(910)89-480-23' ;



$number = preg_replace( '/[^0-9]+/' , '' ,$number);



if (strlen($number) == 11) {

$number = substr($number,1);

}



if (strlen($number) == 10) {

$def = substr($number,0,3);

$code = substr($number,3);

$stmt = $mysql->stmt_init();

$stmt->prepare(

'SELECT regions.name AS region, operators.name AS operator ' .

'FROM `' .PREFIX. 'codes` AS codes ' .

'INNER JOIN `' .PREFIX. 'regions` AS regions ON regions.id = codes.region ' .

'INNER JOIN `' .PREFIX. 'operators` AS operators ON operators.id = codes.operator ' .

'WHERE `def` = ? ' .

'AND ? < `to` ' .

'AND ? > `from`'

);

$stmt->bind_param( "iii" , $def, $code, $code);

$stmt->execute();

$stmt->bind_result($region, $ operator );

while ($stmt->fetch()) {

echo " — " .htmlspecialchars($region). "<br/>\r\n" ;

echo " — " .htmlspecialchars($ operator ). "<br/>\r\n" ;

}

$stmt->close();

} else {

echo ': ' ;

}

?>




* This source code was highlighted with Source Code Highlighter .






クエリの速度とデータベースの構造についてはよく分からないので、誰かが正しく行う方法をアドバイスしてくれたら、とても感謝しています。

ベースとphpの塗りつぶしに苦痛を感じない場合は、 こちらで動作を確認できます



UPD:

ワーカーの要求に応じて、mttでデータベースを更新するためのパーサーコード:



<?php

set_time_limit(0);



$config[ 'mysql_host' ] = 'localhost' ;

$config[ 'mysql_user' ] = 'root' ;

$config[ 'mysql_password' ] = '' ;

$config[ 'mysql_base' ] = 'smsprice' ;



define( "PREFIX" , "mtt_" );



$mysql = new mysqli($config[ 'mysql_host' ],$config[ 'mysql_user' ],$config[ 'mysql_password' ],$config[ 'mysql_base' ]);

$mysql->query( "SET NAMES 'cp1251'" );



$regxp = '#' .

'<tr>\s*' .

'<td abbr=".*">(.*)</td>\s*' .

'<td abbr=".*">(.*)</td>\s*' .

'<td abbr="">(.*)</td>\s*' .

'<td abbr="(.*)" align="right">\s*' .

'.*' .

'<td abbr="(.*)"><nobr>.*</nobr></td>\s*' .

'</tr>' .

'#isU' ;



$page = file_get_contents( 'http://mtt.ru/info/def/index.wbp?def=&number=®ion=&standard=&date=&operator=' );

preg_match_all($regxp,$page,$result);



$mysql->query( 'TRUNCATE TABLE `' .PREFIX. 'codes`' );



for ($i=0,$l=count($result[0]);$i<$l;$i++) {

$ operator = $result[1][$i];

$region = $result[2][$i];

$def = $result[3][$i];

list($range_from,$range_to) = explode( "-" ,$result[4][$i]);

$range_from = substr($range_from,3);

$range_to = substr($range_to,3);

$date = str_replace( "." , "-" ,$result[5][$i]);



$stmt = $mysql->stmt_init();

$stmt->prepare( "SELECT id FROM " .PREFIX. "operators WHERE name=?" );

$stmt->bind_param( "s" , $ operator );

$stmt->execute();

$stmt->store_result();



if ($stmt->num_rows > 0) {

$stmt->bind_result($ operator );

$stmt->fetch();

$stmt->close();

} else {

$stmt->close();

$stmt = $mysql->stmt_init();

$stmt->prepare( "INSERT INTO " .PREFIX. "operators VALUES ('', ?)" );

$stmt->bind_param( "s" , $ operator );

$stmt->execute();

$ operator = $stmt->insert_id;

$stmt->close();

}



$stmt = $mysql->stmt_init();

$stmt->prepare( "SELECT id FROM " .PREFIX. "regions WHERE name=?" );

$stmt->bind_param( "s" , $region);

$stmt->execute();

$stmt->store_result();



if ($stmt->num_rows > 0) {

$stmt->bind_result($region);

$stmt->fetch();

$stmt->close();

} else {

$stmt->close();

$stmt = $mysql->stmt_init();

$stmt->prepare( "INSERT INTO " .PREFIX. "regions VALUES ('', ?)" );

$stmt->bind_param( "s" , $region);

$stmt->execute();

$region = $stmt->insert_id;

$stmt->close();

}



$stmt = $mysql->stmt_init();

$stmt->prepare( "INSERT INTO " .PREFIX. "codes VALUES ('', ?, ?, ?, ?, ?, ?)" );

$stmt->bind_param( "iiiiis" , $ operator , $region, $def, $range_from, $range_to, $date);

$stmt->execute();

$stmt->close();

}

?>




* This source code was highlighted with Source Code Highlighter .







All Articles