ReceiveSmsCc.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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 ReceiveSmsCc implements Sms
  9. {
  10. /**
  11. * @return string[]
  12. */
  13. public function getCountry(): array
  14. {
  15. $url = "https://receive-sms.cc/Countries/";
  16. $ql = (new QueryList)->get($url);
  17. $range = ".number-boxes-item";
  18. $rules = [
  19. 'country' => [".number-boxes-item-country", "text"],
  20. 'img' => [".number-boxes-item-ico", "src"],
  21. 'link' => [".number-boxes-item-button", "href"]
  22. ];
  23. $data = $ql->range($range)->rules($rules)->query()->getData()->all();
  24. $data = array_map(function ($a) {
  25. $a['link'] = "https://receive-sms.cc" . $a['link'];
  26. $a['img'] = "https://receive-sms.cc" . $a['img'];
  27. return $a;
  28. }, $data);
  29. return $data;
  30. }
  31. /**
  32. * @param $link
  33. * @return array
  34. */
  35. public function getPhoneNums($link): array
  36. {
  37. $ql = (new QueryList)->get($link);
  38. $data = $ql->find(".number-boxes-item-number")->texts()->all();
  39. if ($data) {
  40. $this->insert($link, $data);
  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. if ($all_page > 0) {
  45. for ($i = 2; $i <= $all_page; $i++) {
  46. $url = sprintf($link . "Page/%s", $i);
  47. $_ql = (new QueryList)->get($url);
  48. $_data = $_ql->find(".number-boxes-item-number")->texts()->all();
  49. if ($_data) {
  50. $this->insert($link, $_data);
  51. $data = array_merge($data, $_data);
  52. } else {
  53. echo "总页数:" . $all_page;
  54. echo "处理异常: " . $url . PHP_EOL;
  55. }
  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. $proxy=Proxy::getData("http_proxy");
  66. $response = Curl::get($info['url'], $proxy);
  67. if (!$response||strpos($response,"This SMS By")!==false){
  68. $proxy_default="myhome.97admin.com:34185";
  69. $response = Curl::get($info['url'], $proxy_default);
  70. }
  71. $ql = (new QueryList)->setHtml($response);
  72. $range = ".table-hover";
  73. $rules = [
  74. 'from' => [".col-xs-12 > .mobile_hide", "text"],
  75. 'time' => [".col-xs-0", "text"],
  76. 'message' => [".col-md-8", "text"]
  77. ];
  78. $ql->find(".mobile_hide:contains(Google)")->parent()->parent()->remove();
  79. $msgs = $ql->range($range)->rules($rules)->query()->getData()->all();
  80. return $msgs;
  81. }
  82. }
  83. private function insert($link, $data)
  84. {
  85. foreach ($data as $val) {
  86. echo sprintf("正在写入号码:\t\t %s", $val) . PHP_EOL;
  87. $num = explode(" ", $val);
  88. $_num = str_replace(['+', ' '], ['', ''], $val);
  89. $config = Code::getData($num[0]);
  90. $insert = [
  91. 'country' => $num[0],
  92. 'country_name_zh' => $config['cn'],
  93. 'country_name_en' => $config['en'],
  94. 'phone' => $num[1],
  95. 'site' => 'receive-sms.cc',
  96. 'url' => $link . $_num
  97. ];
  98. Num::insert($insert);
  99. }
  100. }
  101. }