12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- <?php
- namespace Spider\Lib;
- use Dever;
- class Parse
- {
- private $url = '';
- private $host = '';
- private $log;
- private $doc = array();
- private $data = array();
- public function __construct($url, $project, $rule, $col)
- {
- $doc = Doc::getInstance($url, $rule);
- $doc->log(new Log($project));
- $data = $doc->get();
- if ($data) {
- if (!is_array($data) && !is_object($data)) {
- $data = Dever::json_decode($data);
- }
- foreach ($data as $k => $v) {
- $this->data[$k] = $this->load($doc, $v, $col, $project);
- }
- }
- $doc->saveLog();
- }
- public function get()
- {
- return $this->data;
- }
- private function load($doc, $data, $col, $project)
- {
- $result = $table = array();
- 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);
- }
- }
- $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 update($data, $project)
- {
- $param['option_project_id'] = $project;
- $param['option_value'] = json_encode($data);
- $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);
- }
- }
- }
|