Nu vill jag dels plocka ut adressen och dels sökordet (det efter q=). Antar att man kan göra en regexp som matchar från "http://" tills nästa "/" och en som går från "q=" till "&". Tänker jag rätt, eller någon annan som har bra förslag?
Jag skulle behöva hjälp med att skriva detta, och gärna någon fin referens (helst på svenska) var man kan läsa mer om sånt här så jag kan lära mig det!
tack!
/red: la in lite mellanslag i länkarna så att de skulle bli text och inte länkar...
dim arr
arr = array("http://www.google.se/search?hl=sv&q=Fredriks+fotosida&btnG=Google-s%C3%B6kning&meta=","http://search.msn.se/results.aspx?FORM=MSNH&CP=1252&q=Fredriks+fotosida","http://www.altavista.com/web/results?itag=ody&q=Fredriks+fotosida&kgs=1&kls=0")
dim re
set re = new regexp
re.pattern = "(https?://[^/]+)[^\?]+\?(?:[^q]|[^=]{2,}=[^&]*&)*q=([^&]+)"
re.ignorecase = true
for i = 0 to ubound(arr)
set r = re.execute(arr(i))
for each item in r
for each item2 in item.submatches
response.write item2 & "<br>"
next
next
next
set re = nothing
Någon bra referens på svenska vet jag tyvärr inte. :)
Verkar fungera bra, även om jag inte riktigt förstår hur. Har dock några frågor:
1. Får svaret "http://www.google.se" och skulle gärna vilja ha ett avslutande "/" tecken efter .se så det ser snyggt ut. förstår tyvärr inte var jag ska skriva in det.
2. om man söker med fnuttar runt sitt sökord så blir resultatet såhär:
dim arr
arr = array("http://www.google.se/search?hl=sv&q=%22Fredriks++fotosida%22&btnG=Google-s%C3%B6kning&meta=","http://www.google.se/search?hl=sv&q=Fredriks+fotosida&btnG=Google-s%C3%B6kning&meta=","http://search.msn.se/results.aspx?FORM=MSNH&CP=1252&q=Fredriks+fotosida","http://www.altavista.com/web/results?itag=ody&q=Fredriks+fotosida&kgs=1&kls=0")
dim re
set re = new regexp
re.pattern = "(https?://[^/]+/)[^\?]+\?(?:[^q]|[^=]{2,}=[^&]*&)*q=([^&]+)"
re.ignorecase = true
for i = 0 to ubound(arr)
set r = re.execute(arr(i))
for each item in r
for each item2 in item.submatches
dim re2
set re2 = new regexp
re2.global = true
re2.pattern = "(^(%22)+)|((%22)+$)"
item2 = re2.replace(item2, "")
re2.pattern = "\+"
item2 = re2.replace(item2, " ")
response.write item2 & "<br>"
set re2 = nothing
next
next
next
set re = nothing
For-looparna och indenteringen skulle kunna göras snyggare. Sedan hade det inte varit fel med några radbrytningar här och där, för läsbarhetens skull. :)
ok, men du tycker inte att din kod är ineffektiv eller?
nu är det ju så att svaret loopas ut hela tiden, om man vill ha in det i en databas så behöver man ju ha det i olika variabler först, dvs först vill jag sätta in sökmotorns namn i en variabel och sen sökordet i en annan. hur skulle man kunna få ut det på ett bra sätt med ovanstående kod? med item(0) och item(1) eller något sådant? och sen köra regexparna som är kvar på dem för att ersätta % och + tecken? då kanske item2 inte behövs eller tänker jag konstigt?
Jag har filat litet till på uttrycket och kommit fram till följande:
re.pattern = "(https?://[^/]+/)[^\?]+\?(?:[^q]|[^=]{2,}=[^&]*&)*q=(?:%22)?((?:[^&](?!%22&))*(?:.(?=%22))?)"
re.ignorecase = true
for i = 0 to ubound(arr)
set r = re.execute(arr(i))
for each item in r
searchengine = item.submatches(0)
query = item.submatches(1)
set re2 = new regexp
re2.global = true
re2.pattern = "\+"
query = re2.replace(query, " ")
set re2 = nothing
' insert into foo values(searchengine, query)
next
next