ReceiveSmsFree.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. namespace Heanup\Library\Sms;
  3. use Heanup\App\Api\Config\Code;
  4. use Heanup\App\Api\Package\Database\Num;
  5. use Heanup\Config\Proxy;
  6. use Heanup\Library\Curl;
  7. use QL\QueryList;
  8. class ReceiveSmsFree implements Sms
  9. {
  10. /**
  11. * @return string[]
  12. */
  13. public function getCountry(): array
  14. {
  15. $data = [];
  16. for ($i = 1; $i <= 3; $i++) {
  17. $url = "https://receive-sms-free.net/regions/" . $i . ".html";
  18. $ql = (new QueryList)->get($url);
  19. $range = "#ul> .wow";
  20. $rules = [
  21. 'country' => ["h2", "text"],
  22. 'link' => ["a", "href"]
  23. ];
  24. $_data = $ql->range($range)->rules($rules)->query()->getData()->all();
  25. if ($_data) {
  26. $data = array_merge($data, $_data);
  27. }
  28. }
  29. $data = array_map(function ($item) {
  30. $item['country'] = trim($item['country']);
  31. return $item;
  32. }, $data);
  33. return $data;
  34. }
  35. /**
  36. * @param $link
  37. * @return array
  38. */
  39. public function getPhoneNums($link): array
  40. {
  41. $ql = (new QueryList)->get($link);
  42. $end_page_link = $ql->find(".pagination a:contains(End)")->attr("href");
  43. preg_match("#\d+#", $end_page_link, $all_page);
  44. $all_page = $all_page[0];
  45. $data = $ql->find(".h2 span")->texts()->all();
  46. $this->insert($link, $data);
  47. if ($all_page > 0) {
  48. for ($i = 2; $i <= $all_page; $i++) {
  49. $url = sprintf($link . "%s.html", $i);
  50. $_ql = (new QueryList)->get($url);
  51. $_data = $_ql->find(".h2 span")->texts()->all();
  52. if ($_data) {
  53. $this->insert($link, $_data);
  54. $data = array_merge($data, $_data);
  55. } else {
  56. echo "总页数:" . $all_page;
  57. echo "处理异常: " . $url . PHP_EOL;
  58. }
  59. }
  60. }
  61. return $data;
  62. }
  63. public function getMessage($country, $phone_num): array
  64. {
  65. $info = Num::getOne(['country' => $country, 'phone' => $phone_num]);
  66. if ($info) {
  67. $response = Curl::get($info['url'],Proxy::getData());
  68. $off_line=substr_count($response, "Offline")>0;
  69. if ($off_line){
  70. Num::update(['status' => 0], ['id'=>$info['id']]);
  71. }
  72. $ql = (new QueryList)->setHtml($response);
  73. $range = ".row:gt(0)";
  74. $rules = [
  75. 'from' => [".col-xs-12 > .mobile_hide", "text"],
  76. 'time' => [".col-xs-0", "text"],
  77. 'message' => [".col-md-8", "text"]
  78. ];
  79. $ql->find(".mobile_hide:contains(ADS)")->parent()->parent()->remove();
  80. $msgs = $ql->range($range)->rules($rules)->query()->getData()->all();
  81. return $msgs;
  82. }
  83. }
  84. private function insert($link, $data)
  85. {
  86. foreach ($data as $val) {
  87. echo sprintf("正在写入号码:\t\t %s", $val) . PHP_EOL;
  88. $num = explode(" ", $val);
  89. $_num = str_replace(['+', ' '], ['', ''], $val);
  90. $config=Code::getData($num[0]);
  91. $insert = [
  92. 'country' => $num[0],
  93. 'country_name_zh' => $config['cn'],
  94. 'country_name_en' => $config['en'],
  95. 'phone' => $num[1],
  96. 'site' => 'receive-sms-free.net',
  97. 'url' => $link . $_num . "/"
  98. ];
  99. Num::insert($insert);
  100. }
  101. }
  102. }