![]() |
Pagerank bei Google
Hallo liebe Leute!
Ich habe da ein Problem bzw eine Frage. Habe einen php Code der den Pagerank von Google ausliest und anzeigt. Ich würde nun gerne eine Funktion schreiben die das aus Delphi macht. Ich bin leider noch ein Delphi Newbee. Könnt ihr mir einen Link sagen der diese Funktion schon erfüllt oder mir Anregungen oder Tipps geben wie ich das selber ausführen kann (in eine Delphi Funktion umschreiben)? Ich habe bereits einen "Freeware" Code gefunden (Source Code muss gekauft werden!!) würde aber lieber auf einen freien offenen Code zurück greifen. Hier der Link dazu ![]() Anbei der php Code
Code:
<?php
getPR("http://www.google.com"); define('GMAG', 0xE6359A60); //unsigned shift right function zeroFill($a, $b) { $z = hexdec(80000000); if ($z & $a) { $a = ($a>>1); $a &= (~$z); $a |= 0x40000000; $a = ($a>>($b-1)); } else { $a = ($a>>$b); } return $a; } function mix($a,$b,$c) { $a -= $b; $a -= $c; $a ^= (zeroFill($c,13)); $b -= $c; $b -= $a; $b ^= ($a<<8); $c -= $a; $c -= $b; $c ^= (zeroFill($b,13)); $a -= $b; $a -= $c; $a ^= (zeroFill($c,12)); $b -= $c; $b -= $a; $b ^= ($a<<16); $c -= $a; $c -= $b; $c ^= (zeroFill($b,5)); $a -= $b; $a -= $c; $a ^= (zeroFill($c,3)); $b -= $c; $b -= $a; $b ^= ($a<<10); $c -= $a; $c -= $b; $c ^= (zeroFill($b,15)); return array($a,$b,$c); } function GCH($url, $length=null, $init=GMAG) { if(is_null($length)) { $length = sizeof($url); } $a = $b = 0x9E3779B9; $c = $init; $k = 0; $len = $length; while($len >= 12) { $a += ($url[$k+0] +($url[$k+1]<<8) +($url[$k+2]<<16) +($url[$k+3]<<24)); $b += ($url[$k+4] +($url[$k+5]<<8) +($url[$k+6]<<16) +($url[$k+7]<<24)); $c += ($url[$k+8] +($url[$k+9]<<8) +($url[$k+10]<<16)+($url[$k+11]<<24)); $mix = mix($a,$b,$c); $a = $mix[0]; $b = $mix[1]; $c = $mix[2]; $k += 12; $len -= 12; } $c += $length; switch($len) /* all the case statements fall through */ { case 11: $c+=($url[$k+10]<<24); case 10: $c+=($url[$k+9]<<16); case 9 : $c+=($url[$k+8]<<8); /* the first byte of c is reserved for the length */ case 8 : $b+=($url[$k+7]<<24); case 7 : $b+=($url[$k+6]<<16); case 6 : $b+=($url[$k+5]<<8); case 5 : $b+=($url[$k+4]); case 4 : $a+=($url[$k+3]<<24); case 3 : $a+=($url[$k+2]<<16); case 2 : $a+=($url[$k+1]<<8); case 1 : $a+=($url[$k+0]); /* case 0: nothing left to add */ } $mix = mix($a,$b,$c); /*-------------------------------------------- report the result */ return $mix[2]; } //converts a string into an array of integers containing the numeric value of the char function strord($string) { for($i=0;$i<strlen($string);$i++) { $result[$i] = ord($string{$i}); } return $result; } function getPR($_url) { $url = 'info:'.$_url; $ch = GCH(strord($url)); $url='info:'.urlencode($_url); $pr = file("http://www.google.com/search?client=navclient-auto&ch=6$ch&ie=UTF-8&oe=UTF-8&features=Rank&q=$url"); $pr_str = implode("", $pr); return substr($pr_str,strrpos($pr_str, ":")+1); } ?> |
Re: Pagerank bei Google
In einer Newsgroup habe ich gerade gelesen, dass es nicht erlaubt ist den Page-Rank so per URL abzufragen. Nur die Google-API-Funktionen dürfen genutzt werden.
|
Re: Pagerank bei Google
So habe ein wenig rumgecoded aber es gibt noch ein paar Fragen.
Delphi-Quellcode:
Wird die Ausagbe ein Array sein oder hab ich da irgendwie was falsch gemacht?
function mix(a, b, c : integer): integer;
begin a := (a - b); a := (a - c); a := (a xor (zeroFill(c,13))); b := (b - c); b := (b - a); b := (b xor (a shl 8)); c := (c - a); c := (c - b); c := (c xor (zeroFill(b,13))); a := (a - b); a := (a - c); a := (a xor (zeroFill(c,12))); b := (b - c); b := (b - a); b := (b xor (a shl 16)); c := (c - a); c := (c - b); c := (c xor (zeroFill(b,5))); a := (a - b); a := (a - c); a := (a xor (zeroFill(c,3))); b := (b - c); b := (b - a); b := (b xor (a shl 10)); c := (c - a); c := (c - b); c := (c xor (zeroFill(b,15))); result := mix(a, b, c); end; Habe noch so meine Array Verständnisschwierigkeiten bei Delphi |
Re: Pagerank bei Google
Hallo bronco,
Delphi-Quellcode:
leider gibt es eine Problemstelle, die in PHP etwas anderes liefert als in Delphi.
type
TMyResult = array of byte; TMyResult2 = record a, b, c:int64; end; : const GMAG = 3862272608; : function zeroFill(a, b:int64):int64; const z = 2147483648; begin if (z and a) > 0 then begin a:= (a shr 1); a:= a and (not z); a:= a or 1073741824; a:= (a shr (b-1)); end else a:= (a shr b); // <-- Problemstelle Result:=a; end; function mix(a, b, c:int64):TMyResult2; begin a:= a - b; a:= a - c; a:= a xor (zeroFill(c, 13)); b:= b - c; b:= b - a; b:= b xor (a shl 8); c:= c - a; c:= c - b; c:= c xor (zeroFill(b, 13)); a:= a - b; a:= a - c; a:= a xor (zeroFill(c, 12)); b:= b - c; b:= b - a; b:= b xor (a shl 16); c:= c - a; c:= c - b; c:= c xor (zeroFill(b, 5)); a:= a - b; a:= a - c; a:= a xor (zeroFill(c, 3)); b:= b - c; b:= b - a; b:= b xor (a shl 10); c:= c - a; c:= c - b; c:= c xor (zeroFill(b, 15)); Result.a:=a; Result.b:=b; Result.c:=c; end; function GCH(url:TMyResult; laenge:integer = 0; init:int64 = GMAG):int64; var a, b, c, len, k:int64; m:TMyResult2; begin if laenge = 0 then laenge:=length(url); a:=2654435769; b:=2654435769; c:=init; k:=0; len:=laenge; while(len >= 12) do begin a:= a + (url[k+0] + (url[k+1] shl 8) + (url[k+2] shl 16) + (url[k+3] shl 24)); b:= b + (url[k+4] + (url[k+5] shl 8) + (url[k+6] shl 16) + (url[k+7] shl 24)); c:= c + (url[k+8] + (url[k+9] shl 8) + (url[k+10] shl 16) + (url[k+11] shl 24)); m:=mix(a, b, c); a:= m.a; b:= m.b; c:= m.c; k:= k + 12; len:= len - 12; end; c:= c + laenge; if len = 11 then c:=c + (url[k+10] shl 24); if len >= 10 then c:=c + (url[k+9] shl 16); if len >= 9 then c:=c + (url[k+8] shl 8); if len >= 8 then b:=b + (url[k+7] shl 24); if len >= 7 then b:=b + (url[k+6] shl 16); if len >= 6 then b:=b + (url[k+5] shl 8); if len >= 5 then b:=b + (url[k+4]); if len >= 4 then a:=a + (url[k+3] shl 24); if len >= 3 then a:=a + (url[k+2] shl 16); if len >= 2 then a:=a + (url[k+1] shl 8); if len >= 1 then a:=a + (url[k+0]); Result:=mix(a, b, c).c; end; function strord(url:string):TMyResult; var i:integer; begin setlength(Result, length(url)); for i:=1 to length(url) do Result[i-1]:=ord(url[i]); end; function getPR(url:string):string; var ch:longint; begin url:='info:' + url; ch:= GCH(strord(url)); // hier fehlt noch der Rest end; PHP: 4653896912 >> 13 = 43814 Delphi: 4653896912 shr 13 = 568102 Gruss Thorsten |
Re: Pagerank bei Google
zeroFill ist einfach ein vorzeichenloses shr, was in PHP so nicht geht. In Delphi müsstest du das einfach über "Integer(Cardinal(a) shr b)" abbilden können.
|
Re: Pagerank bei Google
WAO Danke Leute!!
Aber nur um zu zeigen das ich auch was versucht habe! und kein Schnorrer bin! Das hatte ich als Newbee geschrieben ich glaube ihr seht sofort die Unterschiede!!
Delphi-Quellcode:
function zeroFill(a, b: integer): integer;
begin if (($80000000 and a)<> 0) then begin a := (a shr 1); a := a and (not $80000000); a := a or $40000000; a := (a shr (b-1)); result := a; end else begin a := (a shr b); result := a; end; end; function mix(a, b, c : integer): integer; begin a := (a - b); a := (a - c); a := (a xor (zeroFill(c,13))); b := (b - c); b := (b - a); b := (b xor (a shl 8)); c := (c - a); c := (c - b); c := (c xor (zeroFill(b,13))); a := (a - b); a := (a - c); a := (a xor (zeroFill(c,12))); b := (b - c); b := (b - a); b := (b xor (a shl 16)); c := (c - a); c := (c - b); c := (c xor (zeroFill(b,5))); a := (a - b); a := (a - c); a := (a xor (zeroFill(c,3))); b := (b - c); b := (b - a); b := (b xor (a shl 10)); c := (c - a); c := (c - b); c := (c xor (zeroFill(b,15))); result := mix(a, b, c); end; function GCH(URL: array of byte): integer; const GMAG = '$0xE6359A60'; var a, b, c, k, lengths, len : integer; var mix : array of integer; begin lengths := SizeOf(URL); a := StrToInt('$0x9E3779B9'); b := a; c := StrToInt(GMAG); k := 0; len := lengths; while(len >= 12) do begin a := (a + (URL[k+0] + (URL[k+1]shl 8) + (URL[k+2]shl 16) + (URL[k+3]shl 24))); b := (b + (URL[k+4] + (URL[k+5]shl 8) + (URL[k+6]shl 16) + (URL[k+7]shl 24))); c := (c + (URL[k+8] + (URL[k+9]shl 8) + (URL[k+10]shl 16)+ (URL[k+11]shl 24))); mix := mix(a, b, c); a := mix[0]; b := mix[1]; c := mix[2]; k := (k + 12); len := (len - 12); end; c := (c + lengths); case len of 11: c := c + (URL[k+10] shl 24); 10: c := c + (URL[k+9] shl 16); 9 : c := c + (URL[k+8] shl 8); 8 : b := b + (URL[k+7] shl 24); 7 : b := b + (URL[k+6] shl 16); 6 : b := b + (URL[k+5] shl 8); 5 : b := b + (URL[k+4]); 4 : a := a + (URL[k+3] shl 24); 3 : a := a + (URL[k+2] shl 16); 2 : a := a + (URL[k+1] shl 8); 1 : a := a + (URL[k+0]); // case 0: nothing left to add end; mix := mix(a, b, c); result:= mix[2]; end; |
Re: Pagerank bei Google
Liste der Anhänge anzeigen (Anzahl: 1)
So, hier ist das fertige Projekt...
@Flocke: danke für den Tipp. Gruss Thorsten |
Re: Pagerank bei Google
Mega Fett!! Tausend Dank :shock: :dancer2: :hello:
|
Re: Pagerank bei Google
Hallo
ich hab mir das ganze auch mal angesehen und hab noch ein paar fragen dazu. wofür steht folgendes, bzw. wie kommt man auf solche zahlen? 1.
Delphi-Quellcode:
2.
const
GMAG = 3862272608;
Delphi-Quellcode:
3.
const z = 2147483648;
Delphi-Quellcode:
4.
a:= a or 1073741824;
Delphi-Quellcode:
würde den code auch gerne verstehen.
a:=2654435769;
b:=2654435769; grüsse, capo |
Re: Pagerank bei Google
Da gibt einige Informationen:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz