|
@@ -10,7 +10,7 @@ class Parse
|
|
|
private $doc = array();
|
|
|
private $data = array();
|
|
|
|
|
|
- public function __construct($url, $project, $rule, $col)
|
|
|
+ public function __construct($url, $project, $rule, $col, $set, $push)
|
|
|
{
|
|
|
$doc = Doc::getInstance($url, $rule);
|
|
|
$doc->log(new Log($project));
|
|
@@ -30,10 +30,10 @@ class Parse
|
|
|
if (!strstr($v, 'http')) {
|
|
|
$v = $host . $v;
|
|
|
}
|
|
|
- $this->data[$k] = $this->load($doc, $v, $col, $project);
|
|
|
+ $this->data[$k] = $this->load($doc, $k, $v, $col, $set, $push, $project);
|
|
|
}
|
|
|
} else {
|
|
|
- $this->data = $this->load($doc, $data, $col, $project);
|
|
|
+ $this->data = $this->load($doc, 0, $data, $col, $set, $push, $project);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -45,7 +45,7 @@ class Parse
|
|
|
return $this->data;
|
|
|
}
|
|
|
|
|
|
- private function load($doc, $data, $col, $project)
|
|
|
+ private function load($doc, $index, $data, $col, $set, $push, $project)
|
|
|
{
|
|
|
$result = $table = array();
|
|
|
$data = $doc->init($data);
|
|
@@ -90,6 +90,21 @@ class Parse
|
|
|
$table[$v['name']] = $value;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ if ($set) {
|
|
|
+ foreach ($set as $v) {
|
|
|
+ $value = $this->set($index, $v, $project);
|
|
|
+ $result[$v['key']] = $value;
|
|
|
+ if (Dever::input('test') == 1) {
|
|
|
+ $table[$v['name']] = $value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($push) {
|
|
|
+ $this->push($push, $result);
|
|
|
+ }
|
|
|
+
|
|
|
if (Dever::input('test') == 1) {
|
|
|
$doc->outLog();
|
|
|
echo Dever::table($table);die;
|
|
@@ -98,6 +113,43 @@ class Parse
|
|
|
return $result;
|
|
|
}
|
|
|
|
|
|
+ private function push($push, $data)
|
|
|
+ {
|
|
|
+ $push = explode("\n", str_replace("\r", '', $push));
|
|
|
+ foreach ($push as $k => $v) {
|
|
|
+ Dever::curl($v, $data, 'post');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private function set($index, $data, $project)
|
|
|
+ {
|
|
|
+ if ($data['type'] == 1) {
|
|
|
+ return $data['value'];
|
|
|
+ } elseif ($data['type'] == 2) {
|
|
|
+ $old = 0;
|
|
|
+ $info = Dever::load('spider/data')->getOne(array('pid' => $project));
|
|
|
+ if($info) {
|
|
|
+ $value = json_decode($info['value'], true);
|
|
|
+ if (isset($value[$data['key']])) {
|
|
|
+ $old = $value[$data['key']];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $data['value'] + $index + $old;
|
|
|
+ } elseif ($data['type'] == 3) {
|
|
|
+ $eval = '$value = ' . $data['value'] . ';';
|
|
|
+ eval($eval);
|
|
|
+ return $value;
|
|
|
+ } elseif ($data['type'] == 4) {
|
|
|
+ $temp = explode("\n", str_replace("\r", '', $data['value']));
|
|
|
+ return mt_rand($temp[0], $temp[1]);
|
|
|
+ } elseif ($data['type'] == 5) {
|
|
|
+ $temp = explode("\n", str_replace("\r", '', $data['value']));
|
|
|
+ $temp[0] = Dever::maketime($temp[0]);
|
|
|
+ $temp[1] = Dever::maketime($temp[1]);
|
|
|
+ return mt_rand($temp[0], $temp[1]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private function filter($content)
|
|
|
{
|
|
|
$rule = '<(a).+href="(.*?)"(.*?)>(.*?)<\/a>';
|