ReceiveSmsFree.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace Heanup\Library\Sms;
  3. use Heanup\App\Api\Package\Database\Num;
  4. use Heanup\Library\Curl;
  5. use Heanup\Library\Sms;
  6. use QL\QueryList;
  7. class ReceiveSmsFree implements Sms
  8. {
  9. /**
  10. * @return string[]
  11. */
  12. public function getCountry(): array
  13. {
  14. $data = [];
  15. for ($i = 1; $i <= 3; $i++) {
  16. $url = "https://receive-sms-free.net/regions/" . $i . ".html";
  17. $ql = (new QueryList)->get($url);
  18. $range = "#ul> .wow";
  19. $rules = [
  20. 'country' => ["h2", "text"],
  21. 'link' => ["a", "href"]
  22. ];
  23. $_data = $ql->range($range)->rules($rules)->query()->getData()->all();
  24. if ($_data) {
  25. $data = array_merge($data, $_data);
  26. }
  27. }
  28. $data = array_map(function ($item) {
  29. $item['country'] = trim($item['country']);
  30. return $item;
  31. }, $data);
  32. return $data;
  33. }
  34. /**
  35. * @param $link
  36. * @return array
  37. */
  38. public function getPhoneNums($link): array
  39. {
  40. $ql = (new QueryList)->get($link);
  41. $end_page_link = $ql->find(".pagination a:contains(End)")->attr("href");
  42. preg_match("#\d+#", $end_page_link, $all_page);
  43. $all_page = $all_page[0];
  44. $data = $ql->find(".h2 span")->texts()->all();
  45. $this->insert($link, $data);
  46. if ($all_page > 0) {
  47. for ($i = 2; $i <= $all_page; $i++) {
  48. $url = sprintf($link . "%s.html", $i);
  49. $_ql = (new QueryList)->get($url);
  50. $_data = $_ql->find(".h2 span")->texts()->all();
  51. if ($_data) {
  52. $this->insert($link, $_data);
  53. $data = array_merge($data, $_data);
  54. } else {
  55. echo "总页数:" . $all_page;
  56. echo "处理异常: " . $url . PHP_EOL;
  57. }
  58. }
  59. }
  60. return $data;
  61. }
  62. public function getMessage($country, $phone_num): array
  63. {
  64. $info = Num::getOne(['country' => $country, 'phone' => $phone_num]);
  65. if ($info) {
  66. // print_r($info);
  67. // $curl = curl_init();
  68. // $cookie_jar = '/tmp/sms_cookie';//tempnam('./tmp','cookie'); //tempnam--建立一个具有唯一文件名的文件
  69. //
  70. // curl_setopt_array($curl, array(
  71. // CURLOPT_URL => $info['url'],
  72. // ));
  73. //// curl_setopt($curl, CURLOPT_PROXYAUTH, CURLAUTH_BASIC); //代理认证模式
  74. //// curl_setopt($curl, CURLOPT_PROXY, "myhome.97admin.com"); //代理服务器地址
  75. //// curl_setopt($curl, CURLOPT_PROXYPORT, 34185); //代理服务器端口
  76. //// curl_setopt($curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); //使用http代理模式
  77. // curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);
  78. //
  79. // $response = curl_exec($curl);
  80. //
  81. // curl_close($curl);
  82. $response=Curl::get($info['url'],"myhome.97admin.com:34185");
  83. $ql = (new QueryList)->setHtml($response);
  84. $range = ".row:gt(0)";
  85. $rules = [
  86. 'from' => [".col-xs-12 > .mobile_hide", "text"],
  87. 'time' => [".col-xs-0", "text"],
  88. 'message' => [".col-md-8", "text"]
  89. ];
  90. $ql->find(".mobile_hide:contains(ADS)")->parent()->parent()->remove();
  91. $msgs = $ql->range($range)->rules($rules)->query()->getData()->all();
  92. return $msgs;
  93. }
  94. }
  95. private function insert($link, $data)
  96. {
  97. foreach ($data as $val) {
  98. echo sprintf("正在写入号码:\t\t %s", $val) . PHP_EOL;
  99. $num = explode(" ", $val);
  100. $_num = str_replace(['+', ' '], ['', ''], $val);
  101. $insert = [
  102. 'country' => $num[0],
  103. 'phone' => $num[1],
  104. 'site' => 'receive-sms-free.net',
  105. 'url' => $link . $_num . "/"
  106. ];
  107. Num::insert($insert);
  108. }
  109. }
  110. }