2013-08-11 15:30:41 +04: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 15:58:58 +04:00
private $request ;
2015-11-05 18:50:18 +03: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-22 02:25:56 +03:00
$this -> parameters [] = array (
'q' => array ( 'name' => " keyword " )
);
2015-11-05 18:50:18 +03:00
}
2013-08-11 15:30:41 +04:00
public function collectData ( array $param ){
$html = '' ;
if ( isset ( $param [ 'q' ])) { /* keyword search mode */
2013-08-15 15:58:58 +04:00
$this -> request = $param [ 'q' ];
2016-07-08 20:06:35 +03:00
$html = $this -> getSimpleHTMLDOM ( '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 15:30:41 +04:00
}
else {
2016-08-17 15:45:08 +03:00
$this -> returnClientError ( 'You must specify a keyword (?q=...).' );
2013-08-11 15:30:41 +04:00
}
$emIsRes = $html -> find ( 'div[id=ires]' , 0 );
if ( ! is_null ( $emIsRes ) ){
foreach ( $emIsRes -> find ( 'li[class=g]' ) as $element ) {
2016-08-22 19:55:59 +03:00
$item = array ();
2016-07-08 20:06:35 +03:00
2013-08-13 00:37:19 +04:00
// Extract direct URL from google href (eg. /url?q=...)
$t = $element -> find ( 'a[href]' , 0 ) -> href ;
2016-08-22 19:55:59 +03:00
$item [ 'uri' ] = '' . $t ;
2013-08-13 00:37:19 +04:00
parse_str ( parse_url ( $t , PHP_URL_QUERY ), $parameters );
2016-08-22 19:55:59 +03:00
if ( isset ( $parameters [ 'q' ])) { $item [ 'uri' ] = $parameters [ 'q' ]; }
$item [ 'title' ] = $element -> find ( 'h3' , 0 ) -> plaintext ;
$item [ 'content' ] = $element -> find ( 'span[class=st]' , 0 ) -> plaintext ;
2013-08-11 15:30:41 +04:00
$this -> items [] = $item ;
}
}
}
public function getName (){
2013-08-15 15:58:58 +04:00
return ( ! empty ( $this -> request ) ? $this -> request . ' - ' : '' ) . 'Google search' ;
2013-08-11 15:30:41 +04:00
}
public function getCacheDuration (){
return 1800 ; // 30 minutes
}
2014-05-21 21:15:52 +04:00
}