ReceiveSmsFree.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. <?php
  2. namespace Heanup\Library\Sms;
  3. use Heanup\App\Api\Package\Database\Num;
  4. use Heanup\Library\Sms;
  5. use QL\QueryList;
  6. class ReceiveSmsFree implements Sms
  7. {
  8. /**
  9. * @return string[]
  10. */
  11. public function getCountry(): array
  12. {
  13. $data = [];
  14. for ($i = 1; $i <= 3; $i++) {
  15. $url = "https://receive-sms-free.net/regions/" . $i . ".html";
  16. $ql = (new QueryList)->get($url);
  17. $range = "#ul> .wow";
  18. $rules = [
  19. 'country' => ["h2", "text"],
  20. 'link' => ["a", "href"]
  21. ];
  22. $_data = $ql->range($range)->rules($rules)->query()->getData()->all();
  23. if ($_data) {
  24. $data = array_merge($data, $_data);
  25. }
  26. }
  27. $data = array_map(function ($item) {
  28. $item['country'] = trim($item['country']);
  29. return $item;
  30. }, $data);
  31. return $data;
  32. }
  33. /**
  34. * @param $link
  35. * @return array
  36. */
  37. public function getPhoneNums($link): array
  38. {
  39. $ql = (new QueryList)->get($link);
  40. $end_page_link = $ql->find(".pagination a:contains(End)")->attr("href");
  41. preg_match("#\d+#", $end_page_link, $all_page);
  42. $all_page = $all_page[0];
  43. $data = $ql->find(".h2 span")->texts()->all();
  44. $this->insert($link, $data);
  45. if ($all_page > 0) {
  46. for ($i = 2; $i <= $all_page; $i++) {
  47. $url = sprintf($link . "%s.html", $i);
  48. $_ql = (new QueryList)->get($url);
  49. $_data = $_ql->find(".h2 span")->texts()->all();
  50. if ($_data) {
  51. $this->insert($link, $_data);
  52. $data = array_merge($data, $_data);
  53. } else {
  54. echo "总页数:" . $all_page;
  55. echo "处理异常: " . $url . PHP_EOL;
  56. }
  57. }
  58. }
  59. return $data;
  60. }
  61. public function getMessage($country, $phone_num): array
  62. {
  63. $info = Num::getOne(['country' => $country, 'phone' => $phone_num]);
  64. if ($info) {
  65. // print_r($info);
  66. $curl = curl_init();
  67. curl_setopt_array($curl, array(
  68. CURLOPT_URL => $info['url'],
  69. CURLOPT_RETURNTRANSFER => true,
  70. CURLOPT_ENCODING => '',
  71. CURLOPT_MAXREDIRS => 10,
  72. CURLOPT_TIMEOUT => 0,
  73. CURLOPT_FOLLOWLOCATION => true,
  74. CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  75. CURLOPT_CUSTOMREQUEST => 'GET',
  76. CURLOPT_HTTPHEADER => array(
  77. 'authority: receive-sms-free.net',
  78. 'cache-control: max-age=0',
  79. 'dnt: 1',
  80. 'upgrade-insecure-requests: 1',
  81. 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36',
  82. 'accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
  83. 'sec-fetch-site: none',
  84. 'sec-fetch-mode: navigate',
  85. 'sec-fetch-user: ?1',
  86. 'sec-fetch-dest: document',
  87. 'accept-language: en,zh-CN;q=0.9,zh;q=0.8',
  88. 'cookie: SMSSId=aBayAmYhhg9HLHqmViT0jvh%2FGHUbo0QlFET1obfgGD310kML2XzZanFOYbXk950v6yVzgWdaroChz8GyNQbEjCdLj4WBBUmVykTi; __cfduid=d2530c6c2475fe8a930ceda1dcda65b831610621278; _ga=GA1.2.752717170.1610621281; _gid=GA1.2.1285055920.1610621281; UM_distinctid=177008536e6120-07f84d7cecf1fe-326f7007-13c680-177008536e78dc; CNZZDATA1277724716=410208085-1610621466-https%253A%252F%252Freceive-sms-free.net%252F%7C1610621466; __gads=ID=8d8fcd8e633e42c4-22e6a115bfc50000:T=1610872559:RT=1610872559:S=ALNI_MbjZCyvGfLoOil8tWJnEYhSbJB_7Q; SMSSId=aRDmU2Ukhl9HLHqmViT0jvh%2FGHUbo0QlFET1obfgGD310kML2XzZanFOYbXk950v6yVzgWdaroChz861PQXHiCdLj4WBBUmfwEjn; __atuvc=52%7C2%2C9%7C3; __atuvs=60040c9d95de614a001'
  89. ),
  90. ));
  91. $response = curl_exec($curl);
  92. curl_close($curl);
  93. $ql = (new QueryList)->setHtml($response);
  94. $range = ".row:gt(0)";
  95. $rules = [
  96. 'from' => [".col-xs-12 > .mobile_hide", "text"],
  97. 'time' => [".col-xs-0", "text"],
  98. 'message' => [".col-md-8", "text"]
  99. ];
  100. $ql->find(".mobile_hide:contains(ADS)")->parent()->parent()->remove();
  101. $msgs = $ql->range($range)->rules($rules)->query()->getData()->all();
  102. return $msgs;
  103. }
  104. }
  105. private function insert($link, $data)
  106. {
  107. foreach ($data as $val) {
  108. echo sprintf("正在写入号码:\t\t %s", $val) . PHP_EOL;
  109. $num = explode(" ", $val);
  110. $_num = str_replace(['+', ' '], ['', ''], $val);
  111. $insert = [
  112. 'country' => $num[0],
  113. 'phone' => $num[1],
  114. 'site' => 'receive-sms-free.net',
  115. 'url' => $link . $_num . "/"
  116. ];
  117. Num::insert($insert);
  118. }
  119. }
  120. }