rank.php 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: chendeben
  5. * Date: 2019-01-21
  6. * Time: 09:34
  7. */
  8. //use QL\QueryList;
  9. include 'vendor/autoload.php';
  10. $key_word = $_GET['wd'];
  11. $domain=$_GET['host']?:"www.cnanzhi.com";
  12. $_url = "http://www.baidu.com/s?rn=10&ie=UTF-8&wd=%s";
  13. $range = '.c-container';
  14. $rules = [
  15. 'result' => ['h3', 'text'],
  16. // 采集链接
  17. 'link' => ['h3>a', 'href'],
  18. ];
  19. $domains = [
  20. ''
  21. ];
  22. $flag=false;
  23. for ($i=0;$i<6;$i++){
  24. $url = sprintf($_url,$key_word);
  25. if ($i>0){
  26. $url.="&pn=".($i*10);
  27. }
  28. $ql = (new QL\QueryList)->get($url);
  29. $data = $ql->rules($rules)->range($range)->query()->getData();
  30. $data = $data->all();
  31. // $data=array_map(function ($a){return get_headers($a['link']);}, $data);
  32. //var_dump($data);
  33. //die();
  34. foreach ($data as $key=>$item) {
  35. $header=getRealUrl($item['link']);
  36. // var_dump(parse_url($header)['host']);
  37. // die();
  38. if (parse_url($header)['host']==$domain){
  39. $rank=$key+$i*10;
  40. $real_url=$header;
  41. break;
  42. }
  43. }
  44. if (isset($rank)){
  45. break;
  46. }
  47. }
  48. if (isset($rank)){
  49. echo sprintf( "排名第%s位,真实URL为<br>%s",$rank+1,$real_url);
  50. }else{
  51. echo "不在前5页里";
  52. }
  53. function getRealUrl($url)
  54. {
  55. //得到百度跳转的真正地址
  56. $header = @get_headers($url, 1);
  57. // var_dump($header);die();
  58. if (strpos($header[0], '301') || strpos($header[0], '302')) {
  59. if (is_array($header['Location'])) {
  60. //return $header['Location'][count($header['Location'])-1];
  61. $_url = $header['Location'][0];
  62. } else {
  63. $_url = $header['Location'];
  64. }
  65. } else {
  66. $_url = $url;
  67. }
  68. return $_url;
  69. // $url = parse_url($_url);
  70. // return $url['host'];
  71. }