Advertisement
Guest User

Untitled

a guest
Sep 29th, 2015
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.40 KB | None | 0 0
  1. <?php
  2.  
  3. class FetchDomainsCommand extends CConsoleCommand
  4. {
  5.     private $_connection;
  6.    
  7.     public function run($args) {
  8.         $this->_connection = Yii::app()->db;
  9.         $domainUrls = array('ru' => 'https://partner.r01.ru/zones/ru_domains.gz', 'su' => 'https://partner.r01.ru/zones/su_domains.gz',
  10.                             'rf' => 'https://partner.r01.ru/zones/rf_domains.gz');
  11.        
  12.         $registarData = $this->getRegistars();
  13.         // rows:
  14.         // domain, registar, created, paid till, free date, delegated
  15.         foreach ($domainUrls as $zone => $url) {
  16.             $tempArchiveFile = tempnam(sys_get_temp_dir(), 'Archive');
  17.             $fp = fopen($tempArchiveFile, 'w+');
  18.             $curlOptions = array(CURLOPT_TIMEOUT => 300, CURLOPT_FOLLOWLOCATION => true, CURLOPT_FILE => $fp);
  19.             print "\nGetting $url";
  20.             $curlResult = Yii::app()->curl->setOptions($curlOptions)->get($url);
  21.             $tempDomainFile = tempnam(sys_get_temp_dir(), 'Domains');
  22.             print "\nextracting archive";
  23.             exec('gunzip -c ' . $tempArchiveFile . ' > ' . $tempDomainFile);
  24.             $handle = fopen($tempDomainFile, 'r');
  25.             if ($handle) {
  26.                 $numRows = 0;
  27.                 $totalNumRows = 0;
  28.                 while (($buffer = fgets($handle, 4096)) !== false) {
  29.                     $numRows++;
  30.                     $totalNumRows++;
  31.                     $row = trim($buffer);
  32.                     $rowData = explode("\t", $row);
  33.                     $domain = strtolower(trim($rowData[0]));
  34.                     $registar = trim($rowData[1]);
  35.                     $createdArr = explode('.', $rowData[2]);
  36.                     $created = "{$createdArr[2]}-{$createdArr[1]}-{$createdArr[0]}";
  37.                     $paidTillArr = explode('.', $rowData[3]);
  38.                     $paidTill = "{$paidTillArr[2]}-{$paidTillArr[1]}-{$paidTillArr[0]}";
  39.                     $freeDateArr = explode('.', $rowData[4]);
  40.                     $freeDate = "{$freeDateArr[2]}-{$freeDateArr[1]}-{$freeDateArr[0]}";
  41.                     $delegated = $rowData[5];
  42.                     if (!in_array($registar, array_keys($registarData))) {
  43.                         $cmd = $this->_connection->createCommand("INSERT INTO domain_registar (name) VALUES ('$registar')");
  44.                         $cmd->execute();
  45.                         $registarData = $this->getRegistars();
  46.                     }
  47.                     $registarId = $registarData[$registar];
  48.                     $added = time();
  49.                     $sql = "INSERT INTO domain (added, created, delegated, free_date, name, paid_till, " .
  50.                            "registar_id, zone, updated) VALUES ('$added', '$created', '$delegated', '$freeDate'," .
  51.                            "'$domain', '$paidTill', '$registarId', '$zone', '$added') ON DUPLICATE KEY UPDATE " .
  52.                            "updated = '$added', created = '$created', delegated = '$delegated', free_date = '$freeDate', " .
  53.                            "paid_till = '$paidTill', registar_id = '$registarId'";
  54.  
  55.                     $command = $this->_connection->createCommand($sql);
  56.                     $command->execute();
  57.                     if ($numRows > 49999) {
  58.                         print "\n" . date("Y-m-d H:i:s") . "\t$totalNumRows inserted";
  59.                         $numRows = 0;                        
  60.                     }
  61.                 }
  62.                 print "\n$totalNumRows inserted";
  63.             }
  64.             unlink($tempDomainFile);
  65.             fclose($fp);
  66.             fclose($handle);
  67.         }
  68.        
  69.         $sql = 'INSERT INTO stat_num_domain (dateline, num) VALUES (' . time() . ', (SELECT COUNT(*) FROM domain))';
  70.         $command = $this->_connection->createCommand($sql);
  71.         $command->execute();
  72.         $sql = 'INSERT IGNORE INTO website (domain_id, name) SELECT id, name FROM domain';
  73.         $command = $this->_connection->createCommand($sql);
  74.         $command->execute();
  75.         unlink($tempArchiveFile);
  76.         unlink($tempDomainFile);
  77.     }
  78.    
  79.     public function getRegistars() {
  80.         $command = $this->_connection->createCommand('SELECT id, name FROM domain_registar');
  81.         $dataReader = $command->query();
  82.         $registarData = array();
  83.         while (($row = $dataReader->read()) !== false) {
  84.             $registarData[$row['name']] = $row['id'];
  85.         }
  86.         return $registarData;
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement