AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pagerank bei Google

Ein Thema von bronco · begonnen am 11. Aug 2006 · letzter Beitrag vom 30. Aug 2006
Antwort Antwort
Seite 1 von 2  1 2      
bronco

Registriert seit: 11. Aug 2006
6 Beiträge
 
#1

Pagerank bei Google

  Alt 11. Aug 2006, 18:08
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
http://www.irnis.net/soft/pagerank/

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);
}

?>
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Pagerank bei Google

  Alt 11. Aug 2006, 19:47
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.
  Mit Zitat antworten Zitat
bronco

Registriert seit: 11. Aug 2006
6 Beiträge
 
#3

Re: Pagerank bei Google

  Alt 13. Aug 2006, 02:11
So habe ein wenig rumgecoded aber es gibt noch ein paar Fragen.
Delphi-Quellcode:
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;
Wird die Ausagbe ein Array sein oder hab ich da irgendwie was falsch gemacht?
Habe noch so meine Array Verständnisschwierigkeiten bei Delphi
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Pagerank bei Google

  Alt 13. Aug 2006, 03:09
Hallo bronco,

Delphi-Quellcode:
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;
leider gibt es eine Problemstelle, die in PHP etwas anderes liefert als in Delphi.

PHP: 4653896912 >> 13 = 43814
Delphi: 4653896912 shr 13 = 568102

Gruss
Thorsten
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

Re: Pagerank bei Google

  Alt 13. Aug 2006, 13:56
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.
Volker
Besucht meine Garage
Aktuell: RtfLabel 1.3d, PrintToFile 1.4
  Mit Zitat antworten Zitat
bronco

Registriert seit: 11. Aug 2006
6 Beiträge
 
#6

Re: Pagerank bei Google

  Alt 13. Aug 2006, 16:53
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;
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Pagerank bei Google

  Alt 13. Aug 2006, 18:36
So, hier ist das fertige Projekt...

@Flocke: danke für den Tipp.

Gruss
Thorsten
Angehängte Dateien
Dateityp: zip googleranking_910.zip (2,4 KB, 66x aufgerufen)
  Mit Zitat antworten Zitat
bronco

Registriert seit: 11. Aug 2006
6 Beiträge
 
#8

Re: Pagerank bei Google

  Alt 13. Aug 2006, 18:43
Mega Fett!! Tausend Dank
  Mit Zitat antworten Zitat
capo

Registriert seit: 7. Jul 2006
453 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Pagerank bei Google

  Alt 14. Aug 2006, 10:24
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:
const
  GMAG = 3862272608;
2. const z = 2147483648; 3.  a:= a or 1073741824; 4.
Delphi-Quellcode:
 a:=2654435769;
     b:=2654435769;
würde den code auch gerne verstehen.

grüsse, capo
Hotte
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#10

Re: Pagerank bei Google

  Alt 14. Aug 2006, 12:55
Da gibt einige Informationen: http://de.pr10.info/index.php
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz