Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

Search String aus Referer extrahieren

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Nullpointer
PostRank 10
PostRank 10
Beiträge: 4790
Registriert: 22.04.2005, 19:14
Wohnort: West Berlin

Beitrag von Nullpointer » 28.09.2005, 13:40

ich weiß zwar, dass ich mein monatliches budget für regex-fragen in diesem forum schon lange verbraucht habe, aber es ist schon wieder zum :bad-words:

auf holzige weise frage ich die existenz von den typischen query-string parametern ab. zum beispiel:

$ref=~/q=/g oder $ref=~/p=/g

jetzt möchte natürlich noch den query-string extrahieren. also alles von hinter dem matchenden paramter bis zum nächsten '&'.

ich weiß, dass das ganze mit einer einzigen, zehn meter langen, regex zu machen ist, aber ich begnüge mich auch mit meiner schlumpflösung mit if abfragen. nur wie extrahiere ich den substring ?????

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


cu-viper
PostRank 4
PostRank 4
Beiträge: 124
Registriert: 05.09.2005, 10:31
Wohnort: Aachen

Beitrag von cu-viper » 28.09.2005, 14:05

hmm .. BIST DU WAHNSINNIG? <gg>

.. mal was konstruktives.
es haben ja vor dir schon ne menge leute geschafft - und zwar alle, die eine web-counter haben, der das auswertet. schau dir doch mal die quelltexte an und hol dir da inspirationen.
ich kann mir gut vorstellen, dass du die 2-3 quellcodezeilen nutzen darfst, wenn du die autoren fragst.

mfg stephan

Nullpointer
PostRank 10
PostRank 10
Beiträge: 4790
Registriert: 22.04.2005, 19:14
Wohnort: West Berlin

Beitrag von Nullpointer » 28.09.2005, 14:14

naja. in einer hochsprache würde ich das selbst hinbekommen.
webalizer habe ich mir angeschaut, und das ist c quellcode.

wie gesagt, es geht nicht um performance oder guten code. es muß halt nur n' regex sein, den ich in mein dirty perl script schreiben kann.
irgendwie raffe ich das string extrahieren in perl nicht. komischerweise bin ich genau bei diesem thema noch auf keine brauchbare lösung im netz gestossen.

verschwörung.

aber was soll daran wahnsinnig sein? die interessanten suchmaschinen verwenden 2 oder 3 verschiedene paramter, die kann man doch easy abfragen.

Nullpointer
PostRank 10
PostRank 10
Beiträge: 4790
Registriert: 22.04.2005, 19:14
Wohnort: West Berlin

Beitrag von Nullpointer » 28.09.2005, 14:21

suchet, so werdet ihr finden:
https://www.pgts.com.au/pgtsj/pgtsj0307a.html

jetzt muß ich den code nur noch verstehen ;-)

cu-viper
PostRank 4
PostRank 4
Beiträge: 124
Registriert: 05.09.2005, 10:31
Wohnort: Aachen

Beitrag von cu-viper » 28.09.2005, 14:33

rofl - nix is schlimmer als den quellcode von jemandem anderen lesen und verstehen - besonders krass is da perl - nen php code oder so versteht man ja mal noch.

viel spass
mfg cu

Nullpointer
PostRank 10
PostRank 10
Beiträge: 4790
Registriert: 22.04.2005, 19:14
Wohnort: West Berlin

Beitrag von Nullpointer » 28.09.2005, 14:39

naja nix gegen code-review...
in java oder vergleichbarem ;-)

robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 28.09.2005, 15:48

Aus meiner Bastelkiste:

Code: Alles auswählen

$sstr = &getparam &#40;$ref, "&#40;p|q|qr|qt|qry|query|query.?string|question|qkw|k|kw|key|keyword|&#91;Kk&#93;eywords|general|search|searchfor|s?string|su|w|word|words|ask|MT|suche|suchstr|suchbegriff|plz|title|terms?|swords?|searchval&#41;="&#41;;

sub getparam &#123;
  my $result = shift;
  my $parn = shift;
  $result =~ s/.*\?//;
  my @params = split &#40;"&", $result&#41;;
  $result = "";
  foreach my $param &#40;@params&#41; &#123;
    if &#40;$param =~ s/^$parn//&#41; &#123;
      $result = $param;
    &#125;
  &#125;
  $result = &decodeencodedstring &#40;$result&#41;;
  $result = &utf8_to_latin1 &#40;$result&#41;;
  return $result;
&#125;

sub utf8_to_latin1 &#123;
  my $string = shift;

  my $format = $ENV&#123;"UCFORMAT"&#125;||&#40;'%lx'&#41;;
  use bytes;
  $string =~ s/&#40;&#91;\xC0-\xDF&#93;&#41;&#40;&#91;\x80-\xBF&#93;&#41;/sprintf &#40;"%c", hex&#40;sprintf&#40;$format,unpack&#40;"c",$1&#41;<<6&0x07C0|unpack&#40;"c",$2&#41;&0x003F&#41;&#41;&#41;/ge;
  $string =~ s/&#40;&#91;\xE0-\xEF&#93;&#41;&#40;&#91;\x80-\xBF&#93;&#41;&#40;&#91;\x80-\xBF&#93;&#41;/sprintf &#40;"%c", hex&#40;sprintf&#40;$format,unpack&#40;"c",$1&#41;<<12&0xF000|unpack&#40;"c",$2&#41;<<6&0x0FC0|unpack&#40;"c",$3&#41;&0x003F&#41;&#41;&#41;/ge;
  $string =~ s/&#40;&#91;\xF0-\xF7&#93;&#41;&#40;&#91;\x80-\xBF&#93;&#41;&#40;&#91;\x80-\xBF&#93;&#41;&#40;&#91;\x80-\xBF&#93;&#41;/sprintf &#40;"%c", hex&#40;sprintf&#40;$format,unpack&#40;"c",$1&#41;<<18&0x1C0000|unpack&#40;"c",$2&#41;<<12&0x3F000|unpack&#40;"c",$3&#41;<<6&0x0FC0|unpack&#40;"c",$4&#41;&0x003F&#41;&#41;&#41;/ge;
  no bytes;

  return $string;
&#125;

sub decodeencodedstring &#123;
  my $stringtodecode = shift;
  $stringtodecode =~ tr/\+/ /s;
  $stringtodecode =~ s/%&#40;&#91;A-F0-9&#93;&#91;A-F0-9&#93;&#41;/pack&#40;"C", hex&#40;$1&#41;&#41;/ieg;
  $stringtodecode =~ s/\\x&#40;&#91;A-F0-9&#93;&#91;A-F0-9&#93;&#41;/pack&#40;"C", hex&#40;$1&#41;&#41;/ieg;
  return $stringtodecode;
&#125;
Achja, in $ref sollte der Referrer drin sein ...

cu, Robo :)

Nullpointer
PostRank 10
PostRank 10
Beiträge: 4790
Registriert: 22.04.2005, 19:14
Wohnort: West Berlin

Beitrag von Nullpointer » 28.09.2005, 15:54

thx, mal schauen was mehr ausspuckt.

robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 28.09.2005, 16:00

Nachtrag: Die umbrochenen Zeilen oben natürlich in eine Zeile packen ...

Und nach der Zeile

$result = $param;

in der Funktion getparam kannst du noch ein last; einfügen, bringt noch ein paar millisekunden Performance. :-)

cu, Robo :)
Zuletzt geändert von robo am 28.09.2005, 16:03, insgesamt 1-mal geändert.

Nullpointer
PostRank 10
PostRank 10
Beiträge: 4790
Registriert: 22.04.2005, 19:14
Wohnort: West Berlin

Beitrag von Nullpointer » 28.09.2005, 16:03

chlor.

funzt prima und ist auch gut verständlich dein code. kombiniere ich wohl noch mit der engine abfrage aus dem anderen script.....und mache einen counterdienst (löl).

1001 dank

robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 28.09.2005, 16:12

Das ist nicht alles "mein" Code ... die beiden unteren Funktionen habe ich aus anderen Open-Source-Projekten abgeguckt. Aber wieso sollte man jedes Mal das Rad neu erfinden? ;-)

Natürlich ist die Regex weder vollständig noch optimiert, da könnte man noch was machen, sollte aber glaube ich 99% abdecken.

Und beachte bitte auch den Edit meines letzten Posts bezüglich Performance. :-)

cu, Robo :)

Nullpointer
PostRank 10
PostRank 10
Beiträge: 4790
Registriert: 22.04.2005, 19:14
Wohnort: West Berlin

Beitrag von Nullpointer » 28.09.2005, 16:58

das script läuft nur in meinem lokal.
performance, copyright und ähnlichen schwachsinn gibt es hier nicht. obwohl ich habe so ein gnu an der wand hängen.

:lol:

robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 28.09.2005, 18:00

Tststs ... Performance ist kein Schwachsinn! :-)

cu, Robo :)

Nullpointer
PostRank 10
PostRank 10
Beiträge: 4790
Registriert: 22.04.2005, 19:14
Wohnort: West Berlin

Beitrag von Nullpointer » 28.09.2005, 18:26

hmm....vielleicht das haar in der suppe?

https://www.blueyonder.co.uk/blueyonder/index.jsp

die haben ihren query string auch im q parameter stehen. aber da bekomme ich nur ein 'a' (kein ping) in die logfile. ist bisher der einzige referrer, der falsch ausgewertet wird.

isch weiß es ist nicht gerade google und einem geschenkten gaul haut man nicht auf's maul, aber ...

gute nacht

robo
PostRank 8
PostRank 8
Beiträge: 837
Registriert: 23.12.2003, 19:41
Wohnort: Schwangau

Beitrag von robo » 28.09.2005, 18:36

Hmm ... blueyonder hat auch einen Parameter qt im Referrer stehen, und der überschreibt im Script den Inhalt von q, da er später ausgewertet wird. Da kommt auch das a her. qt habe ich mit in der Regex stehen, weil ich das auch schon irgendwo mal als Query-Parameter gesehen habe.

Wenn du das last; einbaust, wie oben beschrieben, kriegst du nicht nur mehr Performance, sondern löst auch dieses Problem. Ob es zu neuen Problemen führt, vermag ich nicht vorauszusehen. ;-)

cu, Robo :)

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag