Parse.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. if ($data) {
  17. foreach ($data as $k => $v) {
  18. $this->data[$k] = $this->load($doc, $v, $col, $project);
  19. }
  20. }
  21. $doc->saveLog();
  22. }
  23. public function get()
  24. {
  25. return $this->data;
  26. }
  27. private function load($doc, $data, $col, $project)
  28. {
  29. $result = array();
  30. foreach ($col as $v) {
  31. $callback = false;
  32. if (strpos($v['key'], '.') !== false) {
  33. $temp = explode('.', $v['key']);
  34. $v['key'] = $temp[1];
  35. $callback = $temp[0];
  36. }
  37. $value = $doc->rule($data, $col, $v);
  38. if ($value == 'error') {
  39. break;
  40. }
  41. if ($callback) {
  42. $value = Dever::{$callback}($value);
  43. }
  44. $result[$v['key']] = $value;
  45. }
  46. if (Dever::input('test') == 1) {
  47. $doc->outLog();
  48. print_r(Dever::table($result));die;
  49. }
  50. $this->update($result, $project);
  51. return $result;
  52. }
  53. private function update($data, $project)
  54. {
  55. $param['option_project_id'] = $project;
  56. $param['option_value'] = json_encode($data);
  57. $info = Dever::db('spider/data')->one($param);
  58. if ($info) {
  59. $update = array();
  60. foreach ($param as $i => $j) {
  61. $i = str_replace('option_', 'set_', $i);
  62. $update[$i] = $j;
  63. }
  64. $id = $update['where_id'] = $info['id'];
  65. Dever::db('spider/data')->update($update);
  66. } else {
  67. $update = array();
  68. foreach ($param as $i => $j) {
  69. $i = str_replace('option_', 'add_', $i);
  70. $update[$i] = $j;
  71. }
  72. $id = Dever::db('spider/data')->insert($update);
  73. }
  74. }
  75. }