ソフトウェアを書くにはC#を使います Googleのインターフェースが分からないのでC#で書くのは面倒に感じます
そこで、csdn からコードをダウンロードして、ソフトウェア クエリ用のインターフェイスに変更しました。
http://www.xssxss.com/pr.php?url=www.google.com
コード
$url= $_GET['url'];
// URL取得メソッドマクロ
define('G_PR_GET_TYPE_FILE', 1); // fopen() 関数を使用します
define('G_PR_GET_TYPE_SOCKET', 2); // 標準の fsocketopen 関数を使用します
// 呼び出されるメイン関数
関数 getPR($_url,$gettype=G_PR_GET_TYPE_SOCKET){
$url = '情報:'.$_url;
$ch = GCH(strord($url));
$ch = NewGCH($ch);
$url=str_replace("_","%5F",'info:'.urlencode($_url));
$googlePRRUrl =
"http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=6"
.$ch."&ie=UTF-8&oe=UTF-8&features=Rank&q=".$url;
$pr_str =retrieveURLContent($googlePRRUrl,$gettype);
return substr($pr_str,strrpos($pr_str, ":")+1);
}
//符号なし右シフト
関数 zeroFill($a, $b){
$z = hexdec('8'.implode('',array_fill(0,PHP_INT_SIZE*2-1,'0')));
if ($z & $a){
$a = ($a>>1);
$a &= (~$z);
$a |= hexdec('4'.implode('',array_fill(0,PHP_INT_SIZE*2-1,'0')));
$a = ($a>>($b-1));
}
他{
$a = ($a>>$b);
}
$a を返します;
}
// 32 ビットを超えるビットを破棄します。
関数trunkbitForce32bit($n){
if(PHP_INT_SIZE
settype($n,'float');
if ( $n
$n を返します;
}
他{
$clearbit = '';
for($i=0;$i
$clearbit .= '00';
}
for($i=0;$i
$clearbit .= 'ff';
}
return ($n & hexdec($clearbit));
}
}
関数 bigxor($m,$n){
//if(function_exists('gmp_init')){
// 戻り値 floatval(gmp_strval(gmp_xor($m,$n)));
//}
//その他{
$m ^ $n;
//}
}
関数 mix($a,$b,$c){
$a = トランクビットフォース32ビット($a);
$b = トランクビットフォース32ビット($b);
$c = トランクビットフォース32ビット($c);
$a -= $b; $a = トランクビットフォース32ビット($a);
$a -= $c; $a = トランクビットフォース32ビット($a);
$a = bigxor($a,(zeroFill($c,13))); $a = trainbitForce32bit($a);
$b -= $c; $b = トランクビットフォース32ビット($b);
$b -= $a; $b = トランクビットフォース32ビット($b);
$b = bigxor($b,trunkbitForce32bit($a
$c -= $a; $c = トランクビットフォース32ビット($c);
$c -= $b; $c = トランクビットフォース32ビット($c);
$c = bigxor($c,(zeroFill($b,13))); $c = trainbitForce32bit($c);
$a -= $b;$a = トランクビットフォース32ビット($a);
$a -= $c;$a = トランクビットフォース32ビット($a);
$a = bigxor($a,(zeroFill($c,12)));$a = trainbitForce32bit($a);
$b -= $c;$b = トランクビットフォース32ビット($b);
$b -= $a;$b = トランクビットフォース32ビット($b);
$b = bigxor($b,trunkbitForce32bit($a
$c -= $a; $c = トランクビットフォース32ビット($c);
$c -= $b; $c = トランクビットフォース32ビット($c);
$c = bigxor($c,(zeroFill($b,5))); $c = trainbitForce32bit($c);
$a -= $b;$a = トランクビットフォース32ビット($a);
$a -= $c;$a = トランクビットフォース32ビット($a);
$a = bigxor($a,(zeroFill($c,3)));$a = trainbitForce32bit($a);
$b -= $c;$b = トランクビットフォース32ビット($b);
$b -= $a;$b = トランクビットフォース32ビット($b);
$b = bigxor($b,trunkbitForce32bit($a
$c -= $a; $c = トランクビットフォース32ビット($c);
$c -= $b; $c = トランクビットフォース32ビット($c);
$c = bigxor($c,(zeroFill($b,15))); $c = trainbitForce32bit($c);
配列を返す($a,$b,$c);
}
関数 NewGCH($ch){
$ch = (trunkbitForce32bit( ( $ch / 7 ) <
( ( myfmod( $ch,13 ) ) & 7 ) );
$prbuf = array();
$prbuf[0] = $ch;
for( $i = 1; $i
{
$prbuf[$i] = $prbuf[$i-1] - 9;
}
$ch = GCH( c32to8bit( $prbuf ) );
$ch を返します;
}
関数 myfmod($x,$y){
$i = フロア( $x / $y );
return ( $x - $i * $y );
}
関数 c32to8bit($arr32){
$arr8 = 配列();
for( $i = 0; $i
for( $bitOrder = $i * 4;
$bitOrder
$arr8[$bitOrder] = $arr32[$i] & 255;
$arr32[$i] = zeroFill( $arr32[$i], 8 );
}
}
$arr8 を返します;
}
関数 GCH($url, $length=null){
if(is_null($length)) {
$length = sizeof($url);
}
$init = 0xE6359A60;
$a = 0x9E3779B9;
$b = 0x9E3779B9;
$c = 0xE6359A60;
$k = 0;
$len = $length;
$mixo = array();
while( $len >= 12 ){
$a += ($url[$k+0] +trunkbitForce32bit($url[$k+1]<<8)
+trunkbitForce32bit($url[$k+2]<<16)
+trunkbitForce32bit($url[$k+3]<<24));
$b += ($url[$k+4] +trunkbitForce32bit($url[$k+5]<<8)
+trunkbitForce32bit($url[$k+6]<<16)
+trunkbitForce32bit($url[$k+7]<<24));
$c += ($url[$k+8] +trunkbitForce32bit($url[$k+9]<<8)
+trunkbitForce32bit($url[$k+10]<<16)
+trunkbitForce32bit($url[$k+11]<<24));
$mixo = mix($a,$b,$c);
$a = $mixo[0]; $b = $mixo[1]; $c = $mixo[2];
$k += 12;
$len -= 12;
}
$c += $length;
switch( $len ) {
ケース 11:
$c += trainbitForce32bit($url[$k+10]<<24);
ケース 10:
$c+=trunkbitForce32bit($url[$k+9]<<16);
ケース9:
$c+=trunkbitForce32bit($url[$k+8]<<8);
ケース8:
$b+=trunkbitForce32bit($url[$k+7]<<24);
ケース7:
$b+=trunkbitForce32bit($url[$k+6]<<16);
ケース6:
$b+=trunkbitForce32bit($url[$k+5]<<8);
ケース5:
$b+=trunkbitForce32bit($url[$k+4]);
ケース4:
$a+=trunkbitForce32bit($url[$k+3]<<24);
ケース3:
$a+=trunkbitForce32bit($url[$k+2]<<16);
ケース2:
$a+=trunkbitForce32bit($url[$k+1]<<8);
ケース1:
$a+=trunkbitForce32bit($url[$k+0]);
}
$mixo = mix( $a, $b, $c );
$mixo[2] = トランクビットフォース32ビット($mixo[2]);
if( $mixo[2]
戻ります(
hexdec('1'.
爆破('',
array_fill(0,PHP_INT_SIZE*2,'0')))
+ $mixo[2] );
}
他{
$mixo[2] を返します;
}
}
// 文字列を整数の配列に変換します
// char の数値が含まれます
関数 strord($string){
for($i=0;$i
$result[$i] = ord($string{$i});
}
$result を返します;
}
// URL ページのコンテンツを返すか、失敗した場合は false を返します。
関数retrieveURLContent($url,$gettype){
スイッチ($gettype){
ケース G_PR_GET_TYPE_FILE:
returnretrieveURLContentByFile($url);
休憩;
デフォルト:
returnretrieveURLContentBySocket($url);
休憩;
}
}
関数retrieveURLContentByFile($url){
$fd = @fopen($url,"r");
if(!$fd){
false を返します;
www.2cto.com
$result = "";
while($buffer = fgets($fd, 4096)) {
$result .= $buffer;
}
fclose($fd);
$result を返します;
}
関数retrieveURLContentBySocket($url,
$host="",
$ポート=80,
$タイムアウト=30){
if($host == ""){
if(!($pos = strpos($url,'://'))){
false を返します;
}
$host = substr( $url,
$pos+3,
strpos($url,'/',$pos+3) - $pos - 3);
$uri = substr($url,strpos($url,'/',$pos+3));
}
他{
$uri = $url;
}
$request = "GET ".$uri." HTTP/1.0rn"
."ホスト: ".$host."rn"
.「受け入れる: */*rn」
.「ユーザーエージェント: ZealGetrn」
."rn";
$sHnd = @fsockopen ($host、$port、$errno、$errstr、$timeout);
if(!$sHnd){
false を返します;
}
@fputs ($sHnd, $request);
// ソースを取得します
$result = "";
その間 (!feof($sHnd)){
$result .= fgets($sHnd,4096);
}
fclose($sHnd);
$headerend = strpos($result,"rnrn");
if (is_bool($headerend))
{
$result を返します;
}
他{
return substr($result,$headerend+4);
}
}
エコー getPR($url);
?>
摘自Shine的圣天堂-〃敏〃