| Autor |
Beitrag |
Bronco
Hält's aus hier
Beiträge: 2
|
Verfasst: Fr 11.08.06 17:57
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
www.irnis.net/soft/pagerank/
Anbei der php Code
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97:
| <?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); }
?> | Moderiert von Christian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 11.08.2006 um 18:18
|
|
Bronco 
Hält's aus hier
Beiträge: 2
|
Verfasst: So 13.08.06 02:22
Hab da jetzt ein wenig rum gecoded aber bin nicht wirklich schlau draus geworden. Wist ihr was ich falsch gemacht habe?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| 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]); end; mix := mix(a, b, c); result:= mix[2]; end; |
Die mix Zeile wird bei mir als Fehler ausgegeben aber warum? Verstehe das nicht ganz habt ihr einen Tipp?
|
|
matze
      
Beiträge: 4613
Erhaltene Danke: 24
XP home, prof
Delphi 2009 Prof,
|
Verfasst: So 13.08.06 09:22
ich glaube die Funktion mix gibt es in Delphi nicht.
Die musst du auch nachbauen !
_________________ In the beginning was the word.
And the word was content-type: text/plain.
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 13.08.06 10:29
du hast vergessen die funktion mix (aus dem quellcode) mit zu übersetzen.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 18.08.06 14:26
Im Wesentlichen seh ich zwei Fehler:
1. Doppelte Bezeichner-Namen (Sowohl eine Funktion mix, als auch ein Array mit diesem Namen - wenn man nicht weiß, wie man damit arbeitet, gibt das immer Fehler)
2. Die Page-Rank-Abfrage ist nur von zugelassenen Rechnern aus möglich, d.h. bedarf der Genehmigung durch Google. (heißt konkret, dass kaum jemand im Forum den übersetzten Source testen könnte, sollte er ihn anpassen)
Bitte ergänz mal in deinem ersten Post noch Delphi-Tags für deine portierte Source-Version; liest sich dann besser ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
DELPHIn
      
Beiträge: 98
Windows Vista
Delphi 2007 für Win 32 Prof.
|
Verfasst: Do 11.10.07 14:23
Moin Moin,
eine Nachfrage:
Hat es denn mit dem Abfragen des Pagerank noch geklappt, ist suche nämlich die selbe Funktion und habe bisher noch kein Glück gehabt.
Grüße
Delphin
_________________ DELPHIn
=> Errare humanum est
|
|
|