Avatar billede KenSchultzDK Nybegynder
25. september 2012 - 10:36 Der er 12 kommentarer og
1 løsning

Udtrække et søgeord fra en Google søgning via php

Hej

Et andet sted på dette website ( http://www.eksperten.dk/spm/495444 ) svares der på hvordan et søgeord hentes ud fra en Google søgning (variabel) via ASP.

Men hvordan gøres dette via PHP?

Jeg har en variabel med hele URLen.
Typisk står søgeordet efter q= og før et &-tegn.
Alternativt kan det også stå til allersidst efter q=

Jeg vil gerne kunne trække det ud og gemme det som en anden variabel.

Mvh. Ken
Avatar billede Panen Nybegynder
25. september 2012 - 11:12 #1
Du kan muligvis bruge parse_url til dette.

http://php.net/manual/en/function.parse-url.php
Avatar billede KenSchultzDK Nybegynder
25. september 2012 - 11:24 #2
Hvordan skal jeg bruge parse_url til at hive søgeordet ud?

Hvordan skriver jeg det?
Avatar billede Panen Nybegynder
25. september 2012 - 11:46 #3
Du kan også istedet bare bruge strpos().

Proceduren er at du først finder positionen for "q=".
Og derefter positionen for "&" hvor du søger fra "q=" og frem.

Derefter kan du hive teksten ud mellem de 2 positioner og få søgestrengen :)

Her er et hint til hvordan man bruger strpos().

$url = "https://www.google.dk/#hl=da&sclient=psy-ab&q=test&oq=test&gs_l=hp.3";

$pos1 = strpos($url, "q=");


http://php.net/manual/en/function.strpos.php
Avatar billede KenSchultzDK Nybegynder
25. september 2012 - 12:49 #4
Jeg kan godt se hvordan jeg kan finde forekomsten af et &-tegn.

Men hvordan sikrer jeg at der 'tælles' fra q= og frem til den første gang støder på & ?
Jeg synes ikke at jeg kan finde et eksempel på i den manuel du henviser til.

Tit står søgeordet også til sidst således at url'en slutter med q=SØGNING

Her kan man så ikke tælle frem til et &
Man kan man tælle frem til 'slut' af url'en?
Avatar billede Panen Nybegynder
25. september 2012 - 13:03 #5
strpos() har en tredje parameter som er offset.
Offset bestemmer hvor der tælles fra.

$pos2 = strpos($url, "&", $pos1);

Substring kan bruges til at pille en mindre streng ud af en større streng.

Man angiver først strengen, derefter startposition, til sidst længde.

$searchstring = substr($url, $pos1, $pos2 - $pos1);
Avatar billede KenSchultzDK Nybegynder
25. september 2012 - 13:10 #6
OK, det giver mening :-)

Men hvad hvis $pos2 er slutningen af url'en, dvs. q=SØGEORD står til allersidst.

Der kan jeg jo ikke angive & som i dette eksempel
$pos2 = strpos($url, "&", $pos1);

Hvad kan jeg så angive i stedet for & ?
Er der en bestemt værdi for 'slut' på en variabel streng?
Avatar billede olebole Juniormester
25. september 2012 - 13:31 #7
<ole>

Mønstersøgning i en streng betyder normalt: RegExp:

$s = "https://www.google.dk/#hl=da&gs_nf=1&cp=6&gs_id=m&xhr=t&q=foobar&pf=p&output=search";
preg_match("/(?:&|\/)q=(.+?)(?:&|$)/i", $s, $match);
echo $match[1];

/mvh
</bole>
Avatar billede KenSchultzDK Nybegynder
25. september 2012 - 13:43 #8
Super Ole :-)

Har lige testet det med søgeordet inde midt i URLen og med søgeordet til sidst. Det virker bare :-)
Avatar billede olebole Juniormester
25. september 2012 - 14:02 #9
Jeg samler ikke point, så mig rører det ikke, men du skal nok passe på hvor og hvordan du træder. Desuden har Panen også bidraget i denne tråd  *o)

Her er lidt om, hvordan man behandler svar på Eksperten, og det er nok tilrådeligt lige at løbe hele FAQ'en igennem.

Og velkommen på Eksperten. Jeg håber, du får glæde af stedet  =)
Avatar billede KenSchultzDK Nybegynder
25. september 2012 - 14:07 #10
Hej Ole og Panen

Det med point kiggede jeg også på, men der var ingen svar som jeg kunne tildele point til. Derfor fulgte jeg vejledningen ved selv at lave et svar, så jeg kunne lukke spørgsmålet igen.

Men naturligvis også stort tak til Panen :-)

Mvh. Ken
Avatar billede olebole Juniormester
25. september 2012 - 14:33 #11
Helt okay, og det er jo præcis derfor, FAQ'en altid er en god ting at læse, når man kommer til et nyt sted  *o)
Avatar billede KenSchultzDK Nybegynder
26. september 2012 - 10:18 #12
Hej Ole

Jeg håber at du kan hjælpe med et tillægsspørgsmål:

Hvis jeg nu vil ændre denne kode:
preg_match("/(?:&|\/)q=(.+?)(?:&|$)/i", $url, $match);

til at den kan trække et domæne ud der står mellem www. og den første skråstreg / hvordan skal koden så se ud?

Jeg kan godt finde ud at ændre så der checkes på www. - se herunder:
preg_match("/(?:&|\/)www.(.+?)(?:&|$)/i", $url, $match);

Men hvis jeg skifter & ud med / får jeg fejl (nok fordi skråstregen tolkes på en anden måde). Hvordan kan jeg skrive det hvis søgningen skal slutte når man støder på den første skråstreg / slutningen af strengen efter www.?
Avatar billede KenSchultzDK Nybegynder
26. september 2012 - 10:34 #13
Hej igen

Jeg fandt ud at det via et eksempel på php.net :-)

Beklager ulejligheden.

Mvh. Ken
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester