2013-08-11 13:30:41 +02:00
< ? php
/**
* Returns the 100 most recent links in results in past year , sorting by date ( most recent first ) .
* Example :
* http :// www . google . com / search ? q = sebsauvage & num = 100 & complete = 0 & tbs = qdr : y , sbd : 1
* complete = 0 & num = 100 : get 100 results
* qdr : y : in past year
* sbd : 1 : sort by date ( will only work if qdr : is specified )
*/
class GoogleSearchBridge extends BridgeAbstract {
2013-08-15 13:58:58 +02:00
private $request ;
2015-11-05 16:50:18 +01:00
public function loadMetadatas () {
$this -> maintainer = " sebsauvage " ;
$this -> name = " Google search " ;
$this -> uri = " https://www.google.com/ " ;
$this -> description = " Returns most recent results from Google search. " ;
2016-08-17 14:45:08 +02:00
$this -> update = '2016-08-17' ;
2015-11-05 16:50:18 +01:00
$this -> parameters [] =
' [
{
" name " : " keyword " ,
" identifier " : " q "
}
] ' ;
}
2013-08-11 13:30:41 +02:00
public function collectData ( array $param ){
$html = '' ;
if ( isset ( $param [ 'q' ])) { /* keyword search mode */
2013-08-15 13:58:58 +02:00
$this -> request = $param [ 'q' ];
2016-08-17 14:45:08 +02:00
$html = $this -> file_get_html ( 'https://www.google.com/search?q=' . urlencode ( $this -> request ) . '&num=100&complete=0&tbs=qdr:y,sbd:1' ) or $this -> returnServerError ( 'No results for this query.' );
2013-08-11 13:30:41 +02:00
}
else {
2016-08-17 14:45:08 +02:00
$this -> returnClientError ( 'You must specify a keyword (?q=...).' );
2013-08-11 13:30:41 +02:00
}
$emIsRes = $html -> find ( 'div[id=ires]' , 0 );
if ( ! is_null ( $emIsRes ) ){
foreach ( $emIsRes -> find ( 'li[class=g]' ) as $element ) {
2013-08-12 22:37:19 +02:00
$item = new Item ();
// Extract direct URL from google href (eg. /url?q=...)
$t = $element -> find ( 'a[href]' , 0 ) -> href ;
2015-01-20 19:06:51 +01:00
$item -> uri = '' . $t ;
2013-08-12 22:37:19 +02:00
parse_str ( parse_url ( $t , PHP_URL_QUERY ), $parameters );
if ( isset ( $parameters [ 'q' ])) { $item -> uri = $parameters [ 'q' ]; }
2013-08-11 13:30:41 +02:00
$item -> title = $element -> find ( 'h3' , 0 ) -> plaintext ;
$item -> content = $element -> find ( 'span[class=st]' , 0 ) -> plaintext ;
$this -> items [] = $item ;
}
}
}
public function getName (){
2013-08-15 13:58:58 +02:00
return ( ! empty ( $this -> request ) ? $this -> request . ' - ' : '' ) . 'Google search' ;
2013-08-11 13:30:41 +02:00
}
public function getCacheDuration (){
return 1800 ; // 30 minutes
}
2014-05-21 19:15:52 +02:00
}