Domain aus URL filtern
ikke
- perl
Hi,
ich würd gerne aus Referer-URLs die Domain rausfiltern
und komme nicht weiter :o(
Ich komme zwar bis http://(diesistdie.domain.de)/
aber ich möchte _diesistdie_ (normal www) noch wegkriegen.
! Soweit es denn vorhanden ist !
Könnt Ihr mir helfen?
Mir fällt da (wegen möglicher .co.uk etc.) nix sauberes ein.
Gibt es vielleicht ein Modul zum Domainauslesen?
Viele Grüsse, ikke
Hi,
Ich komme zwar bis http://(diesistdie.domain.de)/
aber ich möchte _diesistdie_ (normal www) noch wegkriegen.
das ist sinnvoll, denn mit "diesistdie" ist es ein Hostname, keine Domain :-)
Willst Du auch noch einen eventuell vorhandenen Port ausfiltern? Wie ist es mit Username und (evtl.) Passwort, falls das Protokoll es erlaubt (und falls Du das Protokoll auch erlaubst, klar)?
Könnt Ihr mir helfen?
Wie ist denn Dein bisheriger Code? Mit einer geschickten Regular Expression ist das sicher verhältnismäßig leicht zu lösen.
Mir fällt da (wegen möglicher .co.uk etc.) nix sauberes ein.
Willst Du in dem Fall also einen dreisegmentigen Hostnamen zurückhaben?
Gibt es vielleicht ein Modul zum Domainauslesen?
Nun ja, das URI-Modul kennt so einiges, aber soweit ich es überblicke wird es Deinen ganz speziellen Wunsch nicht erfüllen.
Cheatah
Hi, Cheatah
ich find den Host nur sekundär interessant,
weil es imho identisch ist, ob die Leute von
www.google.de oder nur http://google.de kommen.
Nur: www kann eben auch hutschifuddel heissen ...
*schnief* Danke, ikke
Hi,
ich find den Host nur sekundär interessant,
weil es imho identisch ist, ob die Leute von
www.google.de oder nur http://google.de kommen.
es ist purer Zufall, wenn dahinter der selbe Server steckt. Ein "www.xyz.tld" kann an einem völlig anderen Ende der Welt stehen als ein "xyz.tld", und selbstverständlich auch völlig andere Ergebnisse liefern.
Cheatah
Hi,
es ist purer Zufall, wenn dahinter der selbe Server steckt. Ein "www.xyz.tld" kann an einem völlig anderen Ende der Welt stehen als ein "xyz.tld", und selbstverständlich auch völlig andere Ergebnisse liefern.
Cheatah
Hi Cheatah,
das ist faktisch natürlich völlig korrekt,
aber z.Z. leider nicht das was ich wissen will.
Ein http://www.-Besucher ist (z.Z.) gleichbedeutend mit einem http://ww.-Besucher oder einem http://-Besucher.
Ich hab einfach gerade Bock, sie weitmöglich zusammenzufassen,
wenn ich schon gogle und googele nicht mit reinkriege.
Davon abgesehen ist es natürlich auch hochinteressant,
wie die Leute sich so vertippen.
Gruss, ikke
Moin Moin !
ich find den Host nur sekundär interessant,
weil es imho identisch ist, ob die Leute von
www.google.de oder nur http://google.de kommen.
es ist purer Zufall, wenn dahinter der selbe Server steckt. Ein "www.xyz.tld" kann an einem völlig anderen Ende der Welt stehen als ein "xyz.tld", und selbstverständlich auch völlig andere Ergebnisse liefern.
Im Prinzip hast Du völlig recht, hinter http://www.example.com und http://example.com können zwei unterschiedliche Server mit einer Entfernung von 20.000 km Luftlinie stehen, die völlig unterschiedlichen Content ausliefern. Aber mal ehrlich ? Wie oft kommt das vor ? Meistens ist http://example.com identisch mit http://www.example.com, oder ersterer liefert eine Umleitung auf letzteren. Slashdot macht's natürlich andersrum.
Ich habe für das Problem zwei Ansätze:
Wenn der Servername (Port, Protokoll und Username seien schon entfernt) mit "www.", "w3." oder "web." anfängt, genau diesen Ansatz streichen. Damit hat man diese Alias- und Umleit-Aktionen sicherlich zu 95% erschlagen. www.example.co.uk würde zu example.co.ok, auch kein Problem.
$servername=~s/^(www|w3|web).//i;
Andere Geschichte: Top Level Domains mit Unterstrukturen kennen und gesondert behandeln, sprich: Bei *.uk, *.tw, *.jp und so weiter drei Teile der Domain einsammeln, sonst nur zwei.
my $interesting_domain_part;
my @parts=split /./,lc $servername;
my %structurised_tlds=map { $_ => 1 } qw(uk tw jp und-noch-mehr);
if ($structurised_tlds{$parts[-1]}) {
$interesting_domain_part=join('.',$parts[-3],$parts[-2],$parts[-1]);
} else {
$interesting_domain_part=join('.',$parts[-2],$parts[-1]);
}
Beide Verfahren lassen sich natürlich kombinieren.
Alexander
Hi Alexander,
Dein Posting war ne echte Hilfe.
Danke, ikke
P.s.:
Kann man davon ausgehen, dass die co.uk .jp .tv
jeweil nur max. 2 Buchstaben haben, oder
gibts die auch mit mehr Zeichen?
Im ersten Fall könnte ich mir dann eine Lösung vorstellen.
Gruss, ikke
Hi,
Kann man davon ausgehen, dass die co.uk .jp .tv
jeweil nur max. 2 Buchstaben haben, oder
gibts die auch mit mehr Zeichen?
Es existieren auch mehrbuchstabige second-level-domains unter uk:
org.uk (bei gov.uk bin ich mir nicht sicher, das könnte auch gv.uk sein).
Aber: selbst wenn momentan keine mehrbuchstabigen existieren sollten - das kann sich jederzeit ändern...
Andreas
Ach ja, alles, was .xx.xx am Ende hat, ist auch kein zuverlässiges Zeichen...
Selbst in Deutschland gibt es ein paar alte (4?) mit 2buchstabiger Domain...
z.B.:
http://www.db.de
http://www.ix.de
Unter anderen Toplevel-Domains ist das auch möglich:
http://w3.org
http://w3.com
usw...
Andreas
Hi Alexander,
Dein Posting war ne echte Hilfe.
So war das gedacht ...
Danke, ikke
Den Hammer (zweite Methode) hab ich mir allerdings bis zum Schluß aufgehoben:
Es gibt so um die 100 ccTLDs, und du mußt eigentlich für jede einzelne herausfinden, ob sie Unterstrukturen hat (uk, jp, tw, ...) oder nicht (de, fr, ...). Unter http://www.iana.org/cctld/cctld-whois.htm sind zumindestens die Infos über die NICs verlinkt. Du mußt dann nur noch beim jeweiligen NIC nachforschen.
Und dann noch die generischen TLDs (info, com, edu, net, org, ...) - die haben (soweit ich es im Moment überblicken kann) keine Unterstrukturen.
Viel Spaß bei der Recherche ... :-)
Alexander
Hi Alexander,
*grummel* es gibt auch nen org.uk ...
Damit ist die Frage < m=135678&t=24676> hinfällig.
Es bleibt wohl beim Host kombiniert mit Deiner ersten Idee.
Gruss, ikke
Hi,
Aber mal ehrlich ? Wie oft kommt das vor ?
Gegenfrage: Wie relevant ist es, wie oft es vorkommt?
Antwort: Das kommt darauf an, was man damit machen will. Bei den meisten Zwecken ist schon die Möglichkeit eines Unterschiedes ausreichend, um beachtet zu werden; ikkes Bedarf ist jedoch offenbar anders gelagert, er will _tatsächlich_, ungeachtet des eigentlichen Servers, auf die Domain reduzieren. Für eine whois-Abfrage beispielsweise ist das nicht nur legitim, sondern nötig. Mir kam es nur darauf an, dass er sich des Problems bewusst ist; die Entscheidung fällt er selber.
Andere Geschichte: Top Level Domains mit Unterstrukturen kennen und gesondert behandeln, sprich: Bei *.uk, *.tw, *.jp und so weiter drei Teile der Domain einsammeln, sonst nur zwei.
Ja. Wegen dieser Dinge kann man eine Regular Expression geschickt oderverknüpft gestalten, etwa: m!(.+).(co.uk|co.tw|co.jp|[a-z]+)$!
Diese RegExp ist natürlich alles andere als endgültig ;-) aber sie bietet einen Hinweis, wie das Problem gehandhabt werden kann.
Cheatah
ich würd gerne aus Referer-URLs die Domain rausfiltern
und komme nicht weiter :o(
use URI;
print URI->new('http://www.example.org')->host;
Ich komme zwar bis http://(diesistdie.domain.de)/
aber ich möchte _diesistdie_ (normal www) noch wegkriegen.
! Soweit es denn vorhanden ist !
s/[1]+.// if (m/./ > 1)
Könnt Ihr mir helfen?
Mir fällt da (wegen möglicher .co.uk etc.) nix sauberes ein.
Was machst du mit a.b.c.example.co.uk?
^. ↩︎