Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- class FetchDomainsCommand extends CConsoleCommand
- {
- private $_connection;
- public function run($args) {
- $this->_connection = Yii::app()->db;
- $domainUrls = array('ru' => 'https://partner.r01.ru/zones/ru_domains.gz', 'su' => 'https://partner.r01.ru/zones/su_domains.gz',
- 'rf' => 'https://partner.r01.ru/zones/rf_domains.gz');
- $registarData = $this->getRegistars();
- // rows:
- // domain, registar, created, paid till, free date, delegated
- foreach ($domainUrls as $zone => $url) {
- $tempArchiveFile = tempnam(sys_get_temp_dir(), 'Archive');
- $fp = fopen($tempArchiveFile, 'w+');
- $curlOptions = array(CURLOPT_TIMEOUT => 300, CURLOPT_FOLLOWLOCATION => true, CURLOPT_FILE => $fp);
- print "\nGetting $url";
- $curlResult = Yii::app()->curl->setOptions($curlOptions)->get($url);
- $tempDomainFile = tempnam(sys_get_temp_dir(), 'Domains');
- print "\nextracting archive";
- exec('gunzip -c ' . $tempArchiveFile . ' > ' . $tempDomainFile);
- $handle = fopen($tempDomainFile, 'r');
- if ($handle) {
- $numRows = 0;
- $totalNumRows = 0;
- while (($buffer = fgets($handle, 4096)) !== false) {
- $numRows++;
- $totalNumRows++;
- $row = trim($buffer);
- $rowData = explode("\t", $row);
- $domain = strtolower(trim($rowData[0]));
- $registar = trim($rowData[1]);
- $createdArr = explode('.', $rowData[2]);
- $created = "{$createdArr[2]}-{$createdArr[1]}-{$createdArr[0]}";
- $paidTillArr = explode('.', $rowData[3]);
- $paidTill = "{$paidTillArr[2]}-{$paidTillArr[1]}-{$paidTillArr[0]}";
- $freeDateArr = explode('.', $rowData[4]);
- $freeDate = "{$freeDateArr[2]}-{$freeDateArr[1]}-{$freeDateArr[0]}";
- $delegated = $rowData[5];
- if (!in_array($registar, array_keys($registarData))) {
- $cmd = $this->_connection->createCommand("INSERT INTO domain_registar (name) VALUES ('$registar')");
- $cmd->execute();
- $registarData = $this->getRegistars();
- }
- $registarId = $registarData[$registar];
- $added = time();
- $sql = "INSERT INTO domain (added, created, delegated, free_date, name, paid_till, " .
- "registar_id, zone, updated) VALUES ('$added', '$created', '$delegated', '$freeDate'," .
- "'$domain', '$paidTill', '$registarId', '$zone', '$added') ON DUPLICATE KEY UPDATE " .
- "updated = '$added', created = '$created', delegated = '$delegated', free_date = '$freeDate', " .
- "paid_till = '$paidTill', registar_id = '$registarId'";
- $command = $this->_connection->createCommand($sql);
- $command->execute();
- if ($numRows > 49999) {
- print "\n" . date("Y-m-d H:i:s") . "\t$totalNumRows inserted";
- $numRows = 0;
- }
- }
- print "\n$totalNumRows inserted";
- }
- unlink($tempDomainFile);
- fclose($fp);
- fclose($handle);
- }
- $sql = 'INSERT INTO stat_num_domain (dateline, num) VALUES (' . time() . ', (SELECT COUNT(*) FROM domain))';
- $command = $this->_connection->createCommand($sql);
- $command->execute();
- $sql = 'INSERT IGNORE INTO website (domain_id, name) SELECT id, name FROM domain';
- $command = $this->_connection->createCommand($sql);
- $command->execute();
- unlink($tempArchiveFile);
- unlink($tempDomainFile);
- }
- public function getRegistars() {
- $command = $this->_connection->createCommand('SELECT id, name FROM domain_registar');
- $dataReader = $command->query();
- $registarData = array();
- while (($row = $dataReader->read()) !== false) {
- $registarData[$row['name']] = $row['id'];
- }
- return $registarData;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement