Behöver lite hjälp :) Gör så att du plockar ut referer, kontrollerar om det är från en av sökmotorerna du har stöd för och sen plockar du ut sökinformationen... Regular Expressions är inte min starka sida så jag skulle vara jätte tacksam för en sådan :) Hej! Hej!Parsa sökord?
Ska försöka få ut sökord från de vanligaste sökmotorerna (via Referer) Ex:
http://www.google.se/search?q=Referer+Google+parse+string&hl=sv&lr=&ie=UTF-8&start=10&sa=N
(+ de övriga vanligaste sökm)
men behöver en "dynamisk" funktion för detta, finns det någon färdig kod/dll/ artikel eller någon som har nåt asp script liggandes? :)Sv: Parsa sökord?
Lättast plockar du ut informationen genom att använda Regular Expressions...
Till exempel har ju Google "q" som markör för vad de ska söka efter...
Enkelt att genom mönstret "q=[^&]+" att få ut hela strängen med sökord...
Efter konverterar man den URL kodade strängen till vanlig sträng, lättast genom funktionen Server.URLDecode(Text).
Jag kan hjälpa dig med en funktion om du vill!
Mvh,
ThomasSv: Parsa sökord?
Sv: Parsa sökord?
Här har du kod som ska klara av det du vill...
<code>
Function SearchWords(Referer)
'Funktionen skapad av Thomas Vanhaniemi (thomas@eurocitynet.nu)
'Skapad 24/6 2004
'All användning tillåten
Dim RegExp
Dim Res
Dim Search
Set RegExp = New RegExp
RegExp.Global = False
RegExp.IgnoreCase = True
'Vilken sökmotor?
RegExp.Pattern = "^https?://(?:www\.)?([^/\.]+)\.[a-z]{2,4}/.*"
Search = RegExp.Replace(Referer, "$1")
'Om längden på träffen är noll har inte en giltlig adress skickats in
If Len(Search) = 0 Then
Set RegExp = Nothing
SearchWords = ""
Exit Function
End If
'Sätt vilket namn sökmotorerna har på sin sökvariabel
Dim Query
Select Case LCase(Search)
Case "google", "altavista"
Query = "q"
Case Else
Set RegExp = Nothing
SearchWords = ""
Exit Function
End Select
'Hämta ut sökorden
RegExp.Pattern = ".*?(?:\?|&)" & Query & "=([^&]*).*"
Res = RegExp.Replace(Referer, "$1")
'URLDecode för att ersätta alla specialkombinationer
Res = Replace(Res, "%C3%A5", "å")
Res = Replace(Res, "%C3%A4", "ä")
Res = Replace(Res, "%C3%B6", "ö")
Res = URLDecode(Res)
'Städa upp och retunera sökorden med mellanrum som avgränsare
Set RegExp = Nothing
SearchWords = Res
End Function
Function URLDecode(URL)
'Funktionen skapad av Thomas Vanhaniemi (thomas@eurocitynet.nu)
'Skapad 24/6 2004
'All användning tillåten
Dim RegExp
Dim Res
Set RegExp = New RegExp
Res = Replace(URL, "+", " ")
RegExp.Global = True
RegExp.IgnoreCase = True
'Hitta alla %## förekomster
RegExp.Pattern = "%[A-F0-9]{2}"
Dim Matches, Match
Set Matches = RegExp.Execute(Res)
'Om det finns förekomster av %## ersätt dem
If Matches.Count > 0 Then
Dim Shrink
Shrink = 0
'För varje förekomst
For Each Match In Matches
Res = Left(Res, Match.FirstIndex + CInt(Shrink)) & Replace(Res, Match.Value, Chr(CLng("&H" & Mid(Match.Value, 2, 2))), Match.FirstIndex + 1 + CInt(Shrink), 1)
Shrink = CInt(Shrink) - 2
Next
End If
'Städa upp och retunera svaret
Set Matches = Nothing
Set Match = Nothing
Set RegExp = Nothing
URLDecode = Res
End Function
</code>
Används genom SearchWords(Request.ServerVariables("HTTP_REFERER")).
I SearchWords funktionen finns det ett ställe där man själv måste ange vilket namn på variabeln sökmotorn använder.
Just nu finns google och altavista där, men du får själv lägga till fler...
Hör av dig om du får problem eller har något annat på hjärtat ;)
Mvh,
ThomasSv: Parsa sökord?
Vill bara tillägga att om du är nöjd med svaret kan du antingen markera tråden som löst eller stängd...
Mvh,
Thomas