function uploadBiocaseFile($db, $xml, $reindex = FALSE, $diagnostics = FALSE, $resourceid = FALSE) { $doc = new DOMDocument(); $doc->loadXML($xml); //get config $config = array(); $config['core'] = array(); $handle = fopen('config/config_avh_db_core.csv', 'r'); while (!feof($handle)) { $config['core'][] = fgetcsv($handle); } fclose($handle); $config['extension'] = array(); $handle = fopen('config/config_avh_db_extension.csv', 'r'); while (!feof($handle)) { $config['extension'][] = fgetcsv($handle); } fclose($handle); if ($diagnostics && $resourceid) { $diag = new BiocaseDiagnostic($db, $doc, $resourceid); $diag->diagnose(); } $data = array(); $dehispidator = new Hispid5ToCsv(); $data['core'] = $dehispidator->parseHISPID5($doc); $data['extension'] = $dehispidator->DeterminationHistory($doc); $upload = new AvhDb($db, $data, $config); $upload->uploadCoreData($reindex); }
public function harvest() { $biocase = new BioCase($this->resourceurl, $this->resourcedsa, $this->resourceschema); $result = $biocase->biocaseCount(); $doc = new DOMDocument('1.0', 'UTF-8'); $doc->loadXML($result); $list = $doc->getElementsByTagName('count'); $recordCount = $list->item(0)->nodeValue; if ($recordCount) { fwrite($this->log, date('Y-m-d H:i:s') . "\t" . str_pad($this->resource . ':', 6, ' ', STR_PAD_RIGHT) . "\t" . $recordCount . "\n"); $offset = $this->offset; $date = date('Y-m-d'); //get config $config = array(); $config['core'] = array(); $handle = fopen('config/config_avh_db_core.csv', 'r'); while (!feof($handle)) { $config['core'][] = fgetcsv($handle); } fclose($handle); $config['extension'] = array(); $handle = fopen('config/config_avh_db_extension.csv', 'r'); while (!feof($handle)) { $config['extension'][] = fgetcsv($handle); } fclose($handle); while ($offset <= $recordCount) { $biocase = new BioCase($this->resourceurl, $this->resourcedsa, $this->resourceschema, $this->resourcelastupdated, $offset, $this->limit); $xml = $biocase->bulkHarvest(); $filename = 'xml/' . $this->resource . '_' . $date . '_' . str_pad($offset, 7, '0', STR_PAD_LEFT) . '.xml'; file_put_contents($filename, $xml); $doc = new DOMDocument('1.0', 'UTF-8'); $doc->loadXML($xml); $diag = new BiocaseDiagnostic($this->db, $doc, $this->resourceid); $diag->diagnose(); if ($this->resource == 'AD') { $doc = new DOMDocument('1.0', 'UTF-8'); $xml = substr($xml, strpos($xml, '<DataSet>')); $xml = substr($xml, 0, strpos($xml, '</DataSet>') + strlen('</DataSets>')); $doc->loadXML($xml); } $data = array(); $dehispidator = new Hispid5ToCsv(); $data['core'] = $dehispidator->parseHISPID5($doc); $data['extension'] = $dehispidator->DeterminationHistory($doc); $upload = new AvhDb($this->db, $data, $config); $upload->uploadCoreData(TRUE); $upload->uploadExtensionData(); $offset += $this->limit; } $select = "SELECT MAX(modified) FROM core WHERE \"institutionCode\"=?"; $selStmt = $this->db->prepare($select); $selStmt->execute(array($this->resource)); $r = $selStmt->fetch(PDO::FETCH_NUM); $lastModified = $r[0]; $update = "UPDATE resource\n SET date_last_queried=?\n WHERE resource_id=?"; $updStmt = $this->db->prepare($update); $updStmt->execute(array($lastModified, $this->resourceid)); } else { fwrite($this->log, date('Y-m-d H:i:s') . "\t" . str_pad($this->resource . ':', 6, ' ', STR_PAD_RIGHT) . "\t0\n"); } }