PHP脚本显示google排名结果

2023-12-15

有谁知道是否可以使用 php 脚本显示特定网站的 google 页面排名?

如果可能的话,我该怎么做?


好的,我重写了我的答案,并只提取了 SEO Helper 的相关部分(我之前的版本还有其他内容,如 Alexa Rank、Google Index、Yahoo Links 等)。如果您正在寻找这些内容,请查看旧版修改这个答案!)

请注意,有些页面没有分页排名,我并不是说为零。就是没有。这可能是因为该页面非常不重要(甚至不如 PR 0 重要),或者只是很新,但很可能很重要。 这在我的班级里被视为与 PR 0 相同!

这有一些优点和一些缺点。如果可能,您应该在逻辑中单独处理它,但这并不总是可行,因此 0 是下一个最佳方法。

此外:

该代码是逆向工程的,不使用某种具有任何形式的 SLA 或其他形式的 API。 所以它可能随时停止工作!

请不要淹没谷歌!

我做了测试。如果你的睡眠时间很短,谷歌会在 1000 个请求后阻止你(相当长一段时间!)。随机睡眠 1.5 到 2 秒,看起来不错。

我曾经抓取过 70k 个页面的 pagerank。只有一次,因为我只需要它。我每天只从几个 IP 上访问 5k,现在我有了数据,而且它不会过时,因为这些页面已经存在了几十年。

IMO 偶尔检查一次页面排名甚至一次检查页面排名是完全可以的,但不要错过使用此代码,否则谷歌可能会将我们全部锁定!

<?php
/*
 * @author Joe Hopfgartner <[email protected]>
 */
class Helper_Seo
{

    protected function _pageRankStrToNum($Str,$Check,$Magic) {
        $Int32Unit=4294967296;
        // 2^32
        $length=strlen($Str);
        for($i=0;$i<$length;$i++) {
            $Check*=$Magic;
            //If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31),
            // the result of converting to integer is undefined
            if($Check>=$Int32Unit) {
                $Check=($Check-$Int32Unit*(int)($Check/$Int32Unit));
                //if the check less than -2^31
                $Check=($Check<-2147483648)?($Check+$Int32Unit):$Check;
            }
            $Check+=ord($Str {
                $i
            });
        }
        return $Check;
    }
    /* 
    * Genearate a hash for a url
    */
    protected function _pageRankHashURL($String) {
        $Check1=self::_pageRankStrToNum($String,0x1505,0x21);
        $Check2=self::_pageRankStrToNum($String,0,0x1003F);
        $Check1>>=2;
        $Check1=(($Check1>>4)&0x3FFFFC0)|($Check1&0x3F);
        $Check1=(($Check1>>4)&0x3FFC00)|($Check1&0x3FF);
        $Check1=(($Check1>>4)&0x3C000)|($Check1&0x3FFF);
        $T1=(((($Check1&0x3C0)<<4)|($Check1&0x3C))<<2)|($Check2&0xF0F);
        $T2=(((($Check1&0xFFFFC000)<<4)|($Check1&0x3C00))<<0xA)|($Check2&0xF0F0000);
        return($T1|$T2);
    }
    /* 
    * genearate a checksum for the hash string
    */
    protected function CheckHash($Hashnum) {
        $CheckByte=0;
        $Flag=0;
        $HashStr=sprintf('%u',$Hashnum);
        $length=strlen($HashStr);
        for($i=$length-1;$i>=0;$i--) {
            $Re=$HashStr {
                $i
            };
            if(1===($Flag%2)) {
                $Re+=$Re;
                $Re=(int)($Re/10)+($Re%10);
            }
            $CheckByte+=$Re;
            $Flag++;
        }
        $CheckByte%=10;
        if(0!==$CheckByte) {
            $CheckByte=10-$CheckByte;
            if(1===($Flag%2)) {
                if(1===($CheckByte%2)) {
                    $CheckByte+=9;
                }
                $CheckByte>>=1;
            }
        }
        return '7'.$CheckByte.$HashStr;
    }
    public static function getPageRank($url) {
        $fp=fsockopen("toolbarqueries.google.com",80,$errno,$errstr,30);
        if(!$fp) {
            trigger_error("$errstr ($errno)<br />\n");
            return false;
        }
        else {
            $out="GET /search?client=navclient-auto&ch=".self::CheckHash(self::_pageRankHashURL($url))."&features=Rank&q=info:".$url."&num=100&filter=0 HTTP/1.1\r\n";
            $out.="Host: toolbarqueries.google.com\r\n";
            $out.="User-Agent: Mozilla/4.0 (compatible; GoogleToolbar 2.0.114-big; Windows XP 5.1)\r\n";
            $out.="Connection: Close\r\n\r\n";
            fwrite($fp,$out);
            #echo " U: http://toolbarqueries.google.com/search?client=navclient-auto&ch=".$this->CheckHash($this->_pageRankHashURL($url))."&features=Rank&q=info:".$url."&num=100&filter=0";
            #echo "\n";
            //$pagerank = substr(fgets($fp, 128), 4);
            //echo $pagerank;
            #echo "DATA:\n\n";
            $responseOK = false;
            $response = "";
            $inhead = true;
            $body = "";
            while(!feof($fp)) {

                $data=fgets($fp,128);

                if($data == "\r\n" && $inhead) {
                    $inhead = false;
                } else {
                    if(!$inhead) {
                        $body.= $data;
                    }
                }

                //if($data == '\r\n\r\n')
                $response .= $data;
                if(trim($data) == 'HTTP/1.1 200 OK') {
                    $responseOK = true;
                } 

                #echo "D ".$data;
                $pos=strpos($data,"Rank_");
                if($pos===false) {
                }
                else {
                    $pagerank=trim(substr($data,$pos+9));
                    if($pagerank === '0') {
                            fclose($fp);
                            return 0;
                    } else if(intval($pagerank) === 0) {
                        throw new Exception('couldnt get pagerank from string: '.$pagerank);
                        //trigger_error('couldnt get pagerank from string: '.$pagerank);
                        fclose($fp);
                        return false;
                    } else {
                        fclose($fp);
                        return intval( $pagerank );
                    }
                }
            }
            fclose($fp);


            //var_dump($body);
            if($responseOK && $body=='') {
                return 0;
            }
            //return 0;
            throw new Exception('couldnt get pagerank, unknown error. probably google flood block. my tests showed that 1req/sec is okay! i recommend a random sleep between 1.5 and 2 secs. no sleep breaks at ~1000 reqs.');
            //trigger_error('couldnt get pagerank, unknown error. probably google flood block.');
            return false;
        }
    }

}
$url = "http://www.2xfun.de/";
$pagerank = Helper_Seo::getPagerank($url);
var_dump($pagerank); 
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP脚本显示google排名结果 的相关文章

  • PHP 文件服务脚本:下载不可靠?

    这篇文章最初是关于 ServerFault 的一个问题 https serverfault com questions 131156 user receiving partial downloads https serverfault co
  • 如何使用 PHP 获取列中的所有值?

    我一直在到处寻找这个问题 但仍然找不到解决方案 如何从 mySQL 列中获取所有值并将它们存储在数组中 例如 表名称 客户 列名称 ID 名称 行数 5 我想获取此表中所有 5 个名称的数组 我该如何去做呢 我正在使用 PHP 我试图 SE
  • 无法与站点通信以检查致命错误

    无法与站点通信以检查致命错误 因此 PHP 更改已恢复 您需要通过其他方式上传 PHP 文件更改 例如使用 SFTP 有什么解决办法 我正在 WordPress 中编辑头文件 遇到这个问题 尝试这个 我有同样的问题并决定调查一下 更改 wp
  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 如何获取 URL 中未知的 $_GET 值的数组?

    我正在使用一个在线购物车 它接受订购的商品并通过 URL 将其唯一 ID 传递到 process php 页面 所以 URL 看起来像这样 process php code 1 231 code 2 532 code 3 342 Anoth
  • PHP DBlib PDO 问题

    我正在尝试通过 php 连接到 MSSQL 服务器 但我的 pdo 连接给我带来了困难和我不太理解的错误 我在下面粘贴的代码一周前运行得很好 突然间它就停止了 没有任何人进行任何更改 我仍然可以连接到服务器并直接从命令行运行查询 但我在 p
  • 这是过滤数据并防止 SQL 注入和其他攻击的安全方法吗?

    我创建了两个简单的函数来在插入数据进入 mysql 查询之前对其进行过滤 对于表单字段 我还使用正则表达式来单独检查每个字段 Form filter function filter var HTML is not allowed var s
  • 使用 CodeIgniter 加载视图文件夹外的视图

    我需要从以下范围之外加载视图 this gt load gt view 这似乎是从base application views目录 如何从外部访问视图 application 目录 我想我将不得不延长CI Loader class这是最好的
  • 提交简单 PHP 表单时出现禁止错误

    我有一个不复杂的问题 这似乎比应有的更复杂 我有一个简单的表单 用于向网站添加内容 有些字段需要输入html 然而 当您在表单的不同部分输入某些 html 元素时 它会认为它讨厌您并抛出禁止的 403 错误 这是下面的表格
  • 使用 PHP 创建、编辑和删除 crontab 作业?

    是否可以使用 PHP 创建 编辑和删除 crontab 作业 我知道如何列出 Apache 用户当前的 crontab 作业 output shell exec crontab l echo output 但是如何使用 PHP 添加 cro
  • 在 PHP 中使用可变变量是不好的做法吗?

    例如 一个简单的MVC类型系统 api class method使用重写为 PHP 变量 htaccess nginx conf 然后做类似的事情
  • PHP 多个 Ajax 请求:第一个请求阻止第二个请求

    我在一页上有 2 个 ajax 请求 我运行了第一个请求并单独启动了第二个请求 但第二个在第一个运行后停止工作 第一次结束后继续 第一个请求需要很长时间 大约 30 60 秒 此时我需要第二个请求来显示日志第一个请求发生的情况 我尝试使用
  • json_decode 到自定义类

    是否可以将 json 字符串解码为 stdClass 以外的对象 不是自动的 但你可以按照老式的路线来做 data json decode json true class new Whatever foreach data as key g
  • PHP、PDO 和 SQLSRV 对一个 INSERT 语句执行多次

    我已经在 MySQL 和 Apache 服务器上使用 PDO 和 PHP 一段时间了 我最近的任务是将企业的旧 Web 应用程序转换为新设置 旧设置是标准 Linux Web 堆栈 Apache PHP MySQL Filezilla 新设
  • zend框架验证模型中的数据而不是表单中的数据

    使用 Zend Framework 2 在我的应用程序中 要编辑数据库中的数据 可以编译 html 表单或发送 http post 请求 我的服务器作为 Web 服务实现 在第二种情况下 不会呈现表单 问题 如果当服务器收到不是从表单发送而
  • Sublime Text 编辑器中的 PHP 语法检查

    在Gedit中 我可以在当前文档上添加 php l 外部工具 如果我安装了PHP命令行 它将对文档进行语法检查 有没有办法用 Sublime Text 编辑器来做到这一点 注意 我有一台 Mac 并且安装了 PHP CLI 我想我必须将代码
  • Google Drive V3、Google API 客户端 2.0 - 批量上传失败

    使用 Google Drive V3 和 API v2 0 主分支进行批量上传失败 我已经修改了https github com google google api php client blob master examples batch
  • 如何让php页面从html页面接收ajax post

    我有一个非常简单的表单 其中有一个名字输入字段 我捕获了表单数据 并使用标准 jQuery 发布方法通过 ajax 将其传输到 PHP 页面 但是 我根本无法从 PHP 页面获得任何在服务器端捕获数据的响应 我不确定我做错了什么或缺少什么
  • 如何在没有 SSH 和 CLI 访问生产的情况下部署 symfony 项目 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 大多数托管提供商仅具有 FTP 访问权限 是否可以 常见地进行 symfony 项目 3 x 或 4 x 的本地安装 然后通过 FTP 上
  • 在 Elasticsearch php API 中使用多种类型或索引

    我想使用查询多种类型和索引Elasticsearch PHP API 但我不知道怎么办 我应该将类型和索引的数组传递给 params params index index array of indices params type types

随机推荐

  • OpenJDK 和 Adoptium/AdoptOpenJDK 之间的区别

    由于最近Oracle Java SE 支持路线图由于政策更新 特别是 2019 年 3 月之后 Oracle 的 free 版本更新结束 我一直在寻找 Oracle Java 的替代方案 我发现 OpenJDK 是一个开源替代品 我发现采用
  • 从 System.Drawing.Image 在文件系统上创建新图像?

    好吧 我很抱歉 这可能是一个菜鸟问题 但我有点卡住了 所以我正在做的 在我的 asp net 应用程序上 是从文件系统加载图像 System Drawing Image tempImage tempImage System Drawing
  • 如何在显示属性、名称字段中添加新行

    我正在开发 MVC3 应用程序 并使用数据属性作为屏幕上的显示名称字段 以下是一个代表性样本 Required Display Name Staff Id format 9999 StringLength 10 UIHint StaffId
  • Xcode 5“错误:无法执行‘codesign’(没有这样的文件或目录)”

    最近有人在以下位置发布了类似的问题无法执行 codesign 没有这样的文件或目录 然而 无论出于何种原因 它都收到了反对票 而不是有用的东西 因此 我将尝试自己发布此内容 并附上一些附加数据 希望某些 SO er 已经经历过此问题或只是知
  • React 嵌套映射/forEach 不起作用

    我正在开发一个 CMS 系统 其嵌套子菜单根据用户 自定义等而有所不同 为了解决这个问题 我在反应组件中放置了一个地图函数 根据文档 这种方法仅适用于一个嵌套地图功能 但显然不适用于第二个 这是我渲染子菜单所需的 有什么想法吗 render
  • 为什么我的声音使我的游戏在 Swift Spritekit 中出现滞后?

    当我的英雄节点收集硬币并且我的游戏中出现这个小问题时 我会听到这种声音效果 它不像其他游戏那样流畅 收集硬币时会发出声音 我究竟做错了什么 这是我的声音代码 class GameScene SKScene SKPhysicsContactD
  • iOS:管理 REST 端点的简单方法

    我们基于 REST 的应用程序可用于在多个内部环境上进行测试 每个内部环境都有不同的 REST 端点 有没有一种简单的方法可以在 iOS Swift 3 应用程序中设置环境级别配置 我见过一些方法 但它们似乎都非常复杂 这是当我们有多个端点
  • Java 交集类型与接口类和类型变量的限制

    今天 我尝试编写一个具有使用交集类型的泛型方法的类 但根据交集类型的不同错误消息而感到困惑 假设我们有一个interface and a class并在通用接口中定义通用方法 class ClassType interface Interf
  • 如何将带有逗号分隔项的字符串转换为Python中的列表?

    如何将字符串转换为列表 说字符串就像text a b c 转换后 text a b c 并希望text 0 a text 1 b 像这样 gt gt gt text a b c gt gt gt text text split gt gt
  • 如何在仅具有受保护或私有构造函数的类上调用 ::std::make_shared?

    我的代码不起作用 但我认为意图很明确 testmakeshared cpp include
  • 在 MatLab 中绘制 3d 点

    我试图在任何坐标系中仅绘制一个点 笛卡尔坐标系 圆柱坐标系或球坐标系 I tried plot3 1 1 1 有很多值 但只是在所有值的同一位置显示一个小点 我试过surf X Y Z 但 matlab 说 Z 必须是矩阵 而不是标量或向量
  • Matplotlib 错误栏未以标记为中心

    使用时使错误栏居中于标记的技巧是什么errorbar import matplotlib pyplot as plt plt errorbar 1 1 0 1 fmt k capsize 5 capthick 2 ms 9 markerfa
  • 如何为流创建 TCP 消息帧

    这是我的客户端连接到服务器的方式 using System Collections using System Collections Generic using UnityEngine using UnityEngine UI using
  • 如何将intellij中的普通java项目转换为JavaFx项目

    我目前正在使用普通的 java 项目 gradle 项目 并且希望将其转换为 JavaFx 项目 而无需将现有源重新导入到新的 Javafx 项目中 有什么办法可以实现这一点吗 没有什么可以转换的 我认为 普通 Java 项目和 JavaF
  • 如何调整图像大小并保存在文件夹中?

    我试过这个 string str System IO Path GetFileName txtImage Text string pth System IO Directory GetCurrentDirectory Subject str
  • 使用嵌套 DIV 嵌套多个 VM

    我遇到嵌套 div 不会与虚拟机绑定的情况 有什么想法吗 我正在尝试以下操作 但它打破了任何想法 div div div div 如果我尝试这样做 效果很好 div div div div JavaScript ko applyBindin
  • Rails 为单个模型插入多条记录

    我该如何设置表单字段以便能够在数据库中为单个模型插入多行 我正在使用另一个链接更新 div 但无法使用表单助手 所以我需要手动设置字段名称 我有一个帖子模型 它有一个标题字段 我想像 post 0 title 一样将 i posts 插入到
  • 将 ArrayAdapter 发送到另一个活动的代码?

    因为我们可以像这样将 String 类型发送到另一个活动 public static final String EXTRA MESSAGE com example android twoactivities extra MESSAGE 这个
  • Crystal 报表中的四舍五入数字

    我有一个数据库表 我想为其生成一个 Crystal 报告 只是为了显示数字 例如我有 11 7 我希望它在四舍五入到 12 时保持像 11 7 一样 我不希望这样四舍五入 请帮忙 非常简单 只需选择要显示两位小数的字段即可 右键单击该字段
  • PHP脚本显示google排名结果

    有谁知道是否可以使用 php 脚本显示特定网站的 google 页面排名 如果可能的话 我该怎么做 好的 我重写了我的答案 并只提取了 SEO Helper 的相关部分 我之前的版本还有其他内容 如 Alexa Rank Google In