Advertisement
mmazon

portabilidade.agi

May 15th, 2015
384
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 5.07 KB | None | 0 0
  1. #!/usr/bin/php -q
  2. <?php
  3. // ESCOPO: script chamado com número a ser consultado no formato 55XXYYYYYYYYY como parâmetro, sendo XX=DDD e YYYYYYYYY=NÚMERO
  4. // Retorna operadora no formato 55XXX, onde XXX=codigo operadora, ou 55999 se desconhecida.
  5. // Checa se número já existe localmente. Se existir, verifica se o threshold de refresh foi atingido.
  6. //   --> Caso positivo, atualiza operadora consultando no servidor remoto.
  7. //   --> Caso negativo, retorna a operadora do cache local e incrementa o threshold.
  8. // Se número não existe localmente, consulta no servidor remoto e armazena no cache local.
  9. //   --> Se server remoto offline, script não trava (timeout de 1 segundo), e retorna o valor do cache local. Se não existir, retorna 55999
  10. // Script adaptado do exemplo para consulta via AGI em portabilidadecelular.com (serviço que eu recomendo).
  11. //
  12. // SQL: crie um database chamado "portabilidade" e use o script anexo para criar a tabela "portabilidade".
  13. // Lembre-se de configurar o arquivo de logins ou comentar as linhas dele e deixar users e senhas direto aqui nesse arquivo (não recomendado).
  14. // Dúvidas: mmazon @ gmail . com
  15.  
  16. if (function_exists('pcntl_signal'))
  17. {
  18.  pcntl_signal(SIGHUP, SIG_IGN);
  19. }
  20. require_once ('phpagi.php');
  21. $agi = new AGI();
  22.  
  23. // Usaremos autenticação por conf file ao invés de user e senha no agi
  24. // formato do arquivo de config
  25. //#begin of mzdbphp.conf
  26. //[total_trunk.php]
  27. //AMPDBUSER = freepbxuser
  28. //AMPDBPASS = freepbxpwd
  29. //
  30. //[portabilidadecelular]
  31. //PCUSER = user
  32. //PCPASS = password
  33. //#end of mzdbphp.conf
  34. // Caso prefira, comente as duas linhas abaixo e cofigure seus users e senhas nesse proprio script
  35.  
  36. $configFile = '/etc/mzdbphp.conf';
  37. $array = parse_ini_file($configFile);
  38.  
  39. $usuario_mysql = $array['AMPDBUSER'];
  40. $senha_mysql = $array['AMPDBPASS'];
  41.  
  42. //$usuario_mysql = '---';
  43. //$senha_mysql = '---';
  44. $banco_mysql = 'portabilidade';
  45.  
  46. //$usuario = "---";
  47. //$senha = "---";
  48. $usuario = $array['PCUSER'];
  49. $senha = $array['PCPASS'];
  50.  
  51. // razão de consultas: a cada 10 consultas, atualiza 1 vez no servidor remoto.
  52. $threshold = 10;
  53. $id = mysql_connect('localhost',$usuario_mysql, $senha_mysql);
  54. $con=mysql_select_db($banco_mysql ,$id);
  55. $destination = $argv[1];
  56.  
  57. $ctx=stream_context_create(array('http'=>
  58.       array(
  59.           'timeout' => 1 // 1 sec
  60.       )
  61. ));
  62.  
  63. //numero enviado no formato 55+DDD+NÚMERO
  64. $sql = "SELECT company, counter FROM portabilidade  WHERE number = '$destination' LIMIT 1";
  65. $result = mysql_query($sql);
  66. $row = mysql_fetch_array($result);
  67. if(is_array($row)){
  68.     if($row['counter'] < $threshold){
  69.        $operadora = $row['company'];
  70.        $sql = "UPDATE portabilidade SET counter = counter + 1, lifetime_counter = lifetime_counter + 1, last_access = NOW() WHERE number = '$destination'";
  71.        $result = mysql_query($sql);
  72.        $cost = "(from local cache)";
  73.     } else
  74.     {
  75.       //numero enviado para o webservidor no formato 55 ddd nº
  76.       $url = "https://www.portabilidadecelular.com/painel/consulta_numero.php?user=".$usuario."&pass=".$senha."&seache_number=".$destination;
  77.       if( ($operadora = file_get_contents($url,false,$ctx)) === false )
  78.       {
  79.         // FAIL
  80.         $operadora = $row['company'];
  81.         $company = substr($operadora, 0, 5);
  82.         // $company = 55999;
  83.         $sql = "UPDATE portabilidade SET last_access = NOW(), company = $company WHERE number = '$destination'";
  84.         $result = mysql_query($sql);
  85.         $cost = "(offline - not updated !)";
  86.       }
  87.       else
  88.       {
  89.         // SUCCESS
  90.         // $operadora = file_get_contents($url);
  91.         $company = substr($operadora, 0, 5);
  92.         $sql = "UPDATE portabilidade SET counter = 1, lifetime_counter = lifetime_counter + 1, last_refresh = NOW(), last_access = NOW(), company = $company WHERE number = '$destination'";
  93.         $result = mysql_query($sql);
  94.         $cost = "(from server - updated local cache)";
  95.       }
  96.     }
  97. }else{
  98.       //numero enviado para o webservidor no formato 55 ddd nº
  99.       $url = "https://www.portabilidadecelular.com/painel/consulta_numero.php?user=".$usuario."&pass=".$senha."&seache_number=".$destination;
  100.       if( ($operadora = file_get_contents($url,false,$ctx)) === false )
  101.       {
  102.         // FAIL
  103.         $operadora = 55999;
  104.         $company = 55999;
  105.         $sql = "INSERT INTO portabilidade (number, company, counter, insert_date, last_access, lifetime_counter, last_refresh) VALUES ('$destination','$company',10, NOW(), NOW(), 0, NOW())";
  106.         $result = mysql_query($sql);
  107.         $cost = "(offline ! - new record in local cache as unknow 55999)";
  108.       }
  109.       else
  110.       {
  111.         // SUCCESS
  112.         $company = substr($operadora, 0, 5);
  113.         $sql = "INSERT INTO portabilidade (number, company, counter, insert_date, last_access, lifetime_counter, last_refresh) VALUES ('$destination','$company',0, NOW(), NOW(), 0, NOW())";
  114.         $result = mysql_query($sql);
  115.         $cost = "(from server - new record in local cache)";
  116.       }        
  117. }
  118. mysql_close();
  119.  
  120. $agi->verbose("Operadora " . $operadora . $cost);
  121. $agi->set_variable("OPERADORA", $operadora);
  122. exit();
  123. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement