Parse.php 1.9 KB

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