[dev] [commit] r938 - phplib/models

Cătălin Frâncu cata at francu.com
Mon Aug 19 10:28:37 EEST 2013


Nu prea mi-e clar ce e cu 3 și cu 8. :-) Dacă înțeleg bine,

- substring_index(url, '/', 3) selectează până la al treilea slash, 
adică protocolul, domeniul și posibil portul
- substring(..., 8) extrage domeniul și posibil portul.

Codul ăsta e ok pentru folosirea limitată de acum, dar, dacă într-o zi 
vom crawla un site cu https, va trebui pus 9 în loc de 8. Într-o zi va 
crăpa și ne vom scărpina în cap cu orele neștiind de ce. Dacă vom crawla 
un site pe alt port decât 80, "domeniul" va include :8000 sau :8080, nu 
se știe cu ce efecte. Nu știu nici cât de rapid va fi codul ăsta când 
vom avea zeci de mii de pagini, vedem.

Hai să facem așa, o combinație de reparat chestiile ușor de reparat și 
un // TODO cu reparații pentru viitor:

- în loc de substring(..., 8), folosește tot substring_index(..., -2). 
Dacă am citit bine specificația, asta returnează tot după ://, deci 
merge natural și pentru https.
- înainte de query, adaugă un "// TODO extract domain name for every URL 
in separate field". Asta ar fi soluția cea mai elegantă, pentru că o 
poți face în PHP cu parse_url sau cu o bibliotecă dedicată.

Cătălin


On 2013-08-18 23:09, automailer at dexonline.ro wrote:
> Author: alinu
> Date: Sun Aug 18 23:09:45 2013
> New Revision: 938
> 
> Log:
> 
> 
> Modified:
>    phplib/models/CrawledPage.php
> 
> Modified: phplib/models/CrawledPage.php
> ==============================================================================
> --- phplib/models/CrawledPage.php	Sun Aug 18 22:48:13 2013	(r937)
> +++ phplib/models/CrawledPage.php	Sun Aug 18 23:09:45 2013	(r938)
> @@ -32,7 +32,9 @@
>  	//intoarce o lista cu domeniile parsate
>  	public static function getListOfDomains() {
> 
> -		return Model::factory(self::$_table)->raw_query("select id,
> substr(substring_index(url, '/', 3),8) as domain from CrawledPage
> group by domain order by id asc;")->find_many();
> +		//return Model::factory(self::$_table)->raw_query("select id,
> substr(substring_index(url, '/', 3),8) as domain from CrawledPage
> group by domain order by id asc;")->find_many();
> +		return Model::factory(self::$_table)->raw_query("select id, domain 
> from
> +			 (select id, substr(substring_index(url, '/', 3),8) as domain from
> CrawledPage order by id desc) alias1 group by domain order by id
> asc;")->find_many();
>  	}
> 
> 
> _______________________________________________
> Dev mailing list
> Dev at dexonline.ro
> http://list.dexonline.ro/listinfo/dev


More information about the Dev mailing list