log(new Log($project)); $data = $doc->get(); if ($data) { if (!is_array($data) && !is_object($data)) { $state = Dever::json_decode($data); if ($state) { $data = $state; } } if ($data) { if (is_array($data)) { $domain = parse_url($url); $host = $domain['scheme'] . '://' . $domain['host']; foreach ($data as $k => $v) { if (!strstr($v, 'http')) { $v = $host . $v; } $this->data[$k] = $this->load($doc, $v, $col, $project); } } else { $this->data = $this->load($doc, $data, $col, $project); } } } $doc->saveLog(); } public function get() { return $this->data; } private function load($doc, $data, $col, $project) { $result = $table = array(); $data = $doc->init($data); if (!$col) { if (Dever::input('test') == 1) { $doc->outLog(); echo 'error';die; } return false; } foreach ($col as $v) { $callback = false; if (strpos($v['key'], '.') !== false) { $temp = explode('.', $v['key']); $v['key'] = $temp[1]; $callback = $temp[0]; } $value = $doc->rule($data, $col, $v); if ($value == 'error') { break; } if ($callback) { if (function_exists($callback)) { $value = $callback($value); } else { $value = Dever::{$callback}($value); } } if ($v['local'] == 1) { $this->res = $v['res_key']; $value = $this->local($value, $v['type']); } $result[$v['key']] = $value; if (Dever::input('test') == 1) { $table[$v['name']] = $value; } } if (Dever::input('test') == 1) { $doc->outLog(); print_r(Dever::table($table));die; } $this->update($result, $project); return $result; } private function local($content, $type = 1) { if ($type == 1) { $rule = '<(img|video|audio).+src=\"?(.+\.(jpg|gif|bmp|bnp|png))\"?.+>'; $content = preg_replace_callback('/' . $rule . '/i', array($this, 'local_replace'), $content); } else { $content = $this->copy($content); } return $content; } private function local_replace($result) { if (isset($result[2]) && $result[2]) { $file = $this->copy($result[2]); if ($file) { $result[0] = str_replace($result[2], $file, $result[0]); return $result[0]; } } } private function copy($file) { $data = Dever::load('upload/save.copy?file=' . $file . '&key=' . $this->res . '&state=1'); if (isset($data['url'])) { return $data['url']; } else { return ''; } } private function update($data, $project) { $param['option_pid'] = $project; $param['option_value'] = json_encode($data, JSON_UNESCAPED_UNICODE); $info = Dever::db('spider/data')->one($param); if ($info) { $update = array(); foreach ($param as $i => $j) { $i = str_replace('option_', 'set_', $i); $update[$i] = $j; } $id = $update['where_id'] = $info['id']; Dever::db('spider/data')->update($update); } else { $update = array(); foreach ($param as $i => $j) { $i = str_replace('option_', 'add_', $i); $update[$i] = $j; } $id = Dever::db('spider/data')->insert($update); } } }