Parse.php 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace Spider\Lib;
  3. use Dever;
  4. class Parse
  5. {
  6. private $url = '';
  7. private $host = '';
  8. private $log;
  9. private $doc = array();
  10. private $data = array();
  11. public function __construct($url, $project, $rule, $col)
  12. {
  13. $doc = Doc::getInstance($url, $rule);
  14. $doc->log(new Log($project));
  15. $data = $doc->get();
  16. foreach ($data as $k => $v) {
  17. print_r($data);die;
  18. $this->data[$k] = $this->load($doc, $v, $col);
  19. }
  20. $doc->saveLog();
  21. }
  22. public function get()
  23. {
  24. return $this->data;
  25. }
  26. private function load($doc, $data, $col)
  27. {
  28. foreach ($data as $v) {
  29. $callback = false;
  30. if (strpos($v['key'], '.') !== false) {
  31. $temp = explode('.', $v['key']);
  32. $v['key'] = $temp[1];
  33. $callback = $temp[0];
  34. }
  35. $value = $doc->rule($data, $col, $v);
  36. if ($value == 'error') {
  37. break;
  38. }
  39. if ($callback) {
  40. $value = Dever::{$callback}($value);
  41. }
  42. $data[$v['key']] = $value;
  43. }
  44. if (Dever::input('test') == 1) {
  45. $doc->outLog();
  46. print_r($data);die;
  47. }
  48. $this->update($data, $project);
  49. return $data;
  50. }
  51. private function update($data, $project)
  52. {
  53. $param['option_project_id'] = $project;
  54. $param['option_value'] = json_encode($data);
  55. $info = Dever::db('spider/data')->one($param);
  56. if ($info) {
  57. $update = array();
  58. foreach ($param as $i => $j) {
  59. $i = str_replace('option_', 'set_', $i);
  60. $update[$i] = $j;
  61. }
  62. $id = $update['where_id'] = $info['id'];
  63. Dever::db('spider/data')->update($update);
  64. } else {
  65. $update = array();
  66. foreach ($param as $i => $j) {
  67. $i = str_replace('option_', 'add_', $i);
  68. $update[$i] = $j;
  69. }
  70. $id = Dever::db('spider/data')->insert($update);
  71. }
  72. }
  73. }