[PHP] fopen / meta tags probleem

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste mede tweakers:)

Ik ben voor mijn stage bezig met een zoekmachine en ik stuit nu op 2 problemen.

1. Is er een snellere manier om een pagina binnen te halen dan met fopen()?
2. Hoe kan ik een meta tag "keywords" uit de pagina rippen?

ik heb dit 2de punt al meerdere malen geprobeerd maar het wil niet echt lukken.


1. Ik heb gebruik gemaakt van deze code:
Deze manier werkte wel maar het is erg traag omdat hij nu in pricipe 2x de pagina binnen haalt, 1x fopen() 1x get_meta_tags() dus ik denk dat ik dit anders moet doen.

PHP:
1
2
$metatag = get_meta_tags($webpagina[0]);
echo $metatag['keywords'];


2. Ik heb geprobeerd door de inhoud van de variable $content (hierin staan de regels die fgets binnen heeft gehaald) de metatag eruit te halen met een pattern. Deze was als volgt:

PHP:
1
eregi("^(.*)(<meta name=keywords content=){1}(.*)>(.*)$",$content,$metatag);


Iemand een idee? Alvast bedankt :)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik zou het inderdaad met een regexp doen, maar die van jou ziet er niet helemaal ok uit. Waarom voor en achteraan die ^(.*) en (.*)$? nergens voor nodig, je doet er niks mee. En ik neem aan dat je alleen de waarde van content wil hebben op basis van de name.
Verder moet je oppassen met het gebruik van http-equiv ipv name, als dat op een pagina voorkomt doet je regexp het niet. (Heb ik bij mijn eigen zoekfunctie door schade en schande ondervonden... :X)

Sneller dan inlezen met fopen kan volgens mij ook niet. Ik weet niet of je dit real time wil doen, maar dat blijft altijd traag. Je kan beter periodiek de hele website indexeren, zoals phpBB dat bijvoorbeeld doet.

[ Voor 14% gewijzigd door NMe op 24-03-2004 09:26 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
het punt met fopen() was dat ik nu het gedeelte aan het maken ben die de database gaat vullen met relevante data en daarvoor laad ik eerst de gehele webpagina in en ga hem daarna bekijken, ontleden enzovoort. Bij 30 pagina's doet hij daar al vrij lang over, zeker zon 40 seconden. Ik moet straks overgaan op meer dan 30.000 webpagina's dus daarom wilde ik zeker weten dat ik de snelste methode gebruikte :)

Over die expressie, die ^(.*) en (.*)$ heeft een mede-programmeur hier erbij gezet. (heb zelf nog niet al te veel ervaring met expressies)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Bij mijn zoekscript duurt het indexeren van de hele website (150 pagina's) zo'n anderhalf uur. Ik gebruik wel ASP (wat langzamer is met strings) en er zijn html pagina's van 1 mb bij, maar toch. Indexeren is een traag zaakje, en volgens mij heb je de snelste methode wel te pakken. Je moet alleen even Googlen voor wat uitleg over regular expressions. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mja, het werkt :) Alleen dit moet toch met 1 enkele expressie kunnen?

PHP:
1
2
3
4
5
eregi("(meta name=\"?keywords\"?){1}[[:space:]]content=\"?.*\"?",$oudecontent,$metatag);            
$eindmeta = strpos($metatag[0],">");
$substrmeta = substr($metatag[0], 0, $eindmeta);
$begincontent = strrpos($substrmeta,"=") + 1;
$substrmeta = substr($substrmeta,$begincontent,(strlen($substrmeta)-$begincontent));

Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
PHP:
1
2
eregi("(meta name=\"?keywords\"?){1}[[:space:]]content=\"?(.*)\"?",$oudecontent,$metatag);    
$keywords = explode(',',$metatag[2]);

Je regexp ziet er niet zo mooi uit, ik heb 'm maar gewoon even overgenomen. {1}? Denk daar eens overna.

[ Voor 12% gewijzigd door Skaah op 24-03-2004 16:21 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Kleine aanpassing:
PHP:
1
2
eregi("(meta [name|http-equiv]=\"?keywords\"?){1}[[:space:]]content=\"?(.*)\"?",$oudecontent,$metatag);    
$keywords = explode(',',$metatag[2]);

Zoals ik al zei: rekening houden met http-equiv is niet overbodig...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Overigens zijn de pregs ook sneller dan de eregs.

Rustacean


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Manuzhai schreef op 24 maart 2004 @ 17:12:
Overigens zijn de pregs ook sneller dan de eregs.
Maar staan niet in verhouding tot de tijd die nodig is voor de fopen ;)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate

Pagina: 1