[[Indholdsfortegnelse]]
 

Indexering af Retsinformation

Ca. 581 ord.

Retsinformation er en guldgrube af information. Desværre har de et utroligt tungt søgeinterface. Det ville ikke være så slemt, hvis blot deres sider blev indexeret af andre søgerobotter. Det sker imidlertid ikke og det er der flere grunde til:
  • robots.txt
    Retsinfos robots.txt siger, at alle robotter skal holde sig væk. Alle flinke robotter lader derfor være med at prøve at indexere.
  • Javascript-URL'er
    URL'erne i Retsinfos søgeresultater bliver fortolket af noget Javascript. Det gør det ret svært at se hvilken URL, der henvises til, med mindre man udfører Javascript. Robotter udfører ikke Javascript, idet Javascript kan få en robot til at gå i selvsving (uendelig løkke).
Da jeg gerne så, at Retsinfo blev indexeret, så skrev jeg til Retsinfo. Tilbage fik jeg et ligegyldigt svar. De har næppe ressourcer til at gøre noget ved det. Det havde jeg imidlertid. Så jeg har nu omgået problemerne på følgende måde:

Javascript-URL'er

Jeg har i hånden lavet en søgning på Status = gældende. Det gav d. 28-02-2002 22117 dokumenter. Resultatlisten tog jeg direkte fra Mozillas cache. Derefter lavede jeg en simpel oversættelse af javascript-URL'er med nedenstående perl-script. Resultatet lagde jeg på http://home.tange.dk/~tange/retsinfo.html.
#!/usr/bin/perl

$/="<LI>";

<>;
while(<>) {
    if(/Dokumentet er (.*) og indeholder (.*) lin.er/) {
        $gaeldende = $1;
        $linjer = $2;
    } else {
        die ("Gældende eller linjer findes ikke $_");
    }
    
    # <a href=JavaScript:openDoc("1238&A16652000130REGL&0001&000001","A16652000130REGL") 
    # onMouseOver="self.status='Hent dokument. ACCN: A16652000130';return true">LOV 
    # nr 20001 af 14/11/1665</a><br> <P>Lex Regia (Konge-Lov)</P>   <hr>

    if (m{<a href=JavaScript:openDoc."(.*)","(.*)". onMouseOver="self.status='Hent dokument. ACCN: (.*)';return true">(.*)</a><br> <P>(.*)</P>   <hr>}) {
        $purl1=$1; $purl2=$2; $accn=$3; $lovtitel=$4; $lovbesk=$5;
    } else {
        die ("Titel eller beskrivelse findes ikke $_");
    }

    $purl2=~m{([A-Z]\d\d\d\d)(\d*)}; # C19861168760REGL
    #$docurl="http://147.29.40.91/DELFIN/HTML/$1/$2.htm";
    $docurl="/DELFIN/HTML/$1/$2.htm";

    print "<P>$gaeldende $linjer ",
    "<A HREF=\"$docurl\">$lovtitel</A> $lovbesk</P>\n";
}

robots.txt

For at snyde indexeringsrobotterne til at indexere sitet, så lavede jeg en proxy for http://147.29.40.91 (som er der, hvor dokumenterne i Retsinfo ligger). Denne proxy en almindelig proxy med 2 små ændringer: /robots.txt og /index.html er anderledes. 127.0.0.1 er nødvendigt pga. den NAT jeg sidder bag ved - det burde have været home.tange.dk istedet. I apache.conf-sprog ser det sådan ud:
Listen 5556
<VirtualHost 127.0.0.1:5556>
  # Retsinfo - proxy
  ProxyPass /index.html http://127.0.0.1/~tange/retsinfo.html
  ProxyPass /robots.txt http://127.0.0.1/robots.txt
  ProxyPass / http://147.29.40.91/
</VirtualHost>

Adskildelse mellem robot og menneske

Egentlig var proxyløsningen nok i sig selv. Men da jeg ikke ønsker at blive beskyldt for at hugge besøgende fra Retsinfo, så vil jeg gerne sende folk over på den rigtige Retsinfo-side. Dette kan gøres med en redirect. Men alle må ikke blive redirected: Robotterne skal blive på den proxy'ede version - ellers læser de robots.txt og nægter at indexere sitet.

Der skal altså opstilles en regel, så man kan kende forskel på en person (som skal redirectes) og en robot (som skal proxyes). Jeg har valgt reglen, at hvis user-agent hedder noget med 'bot', så er det en robot og ellers er det en person.

I apache.conf-sprog ser det sådan ud:

Listen 5555
<VirtualHost 192.168.1.2:5555>
  # Retsinfo
  # Starturl: http://retsinfo.tange.dk:5555/index.html
  ServerName retsinfo.tange.dk
  RewriteEngine On
  RewriteCond %{HTTP_USER_AGENT} bot
  RewriteRule ^/(.*)$ http://127.0.0.1:5556/$1 [proxy]
  RewriteCond %{HTTP_USER_AGENT} !bot
  RewriteRule ^/(.*)$ http://147.29.40.91/$1 [redirect]
</VirtualHost>

Hvis din user-agent hedder noget med bot, så får du en proxyet version uden robots.txt. Hvis ikke, så bliver du redirected.

Eksempel

Hvis man vil lave et mirror, så skal man blot kalde sin user-agent for noget med 'bot' i: wget -m -U robotus http://retsinfo.tange.dk:5555/index.html

Hvis man vil redirectes til en Retsinfo-side, så skal man blot kalde sin user-agent noget andet: wget -m -U rootus http://retsinfo.tange.dk:5555/DELFIN/HTML/A1953/0016930.htm


Sidst ændret Sun Apr 27 01:34:56 2003