Implement search API (fixes #929)
This commit is contained in:
		
					parent
					
						
							
								6b622fa9e4
							
						
					
				
			
			
				commit
				
					
						4a5d988d8c
					
				
			
		
					 2 changed files with 83 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -1485,6 +1485,71 @@ function api_users_search($type)
 | 
			
		|||
/// @TODO move to top of file or somewhere better
 | 
			
		||||
api_register_func('api/users/search', 'api_users_search');
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Returns statuses that match a specified query.
 | 
			
		||||
 *
 | 
			
		||||
 * @see https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets
 | 
			
		||||
 *
 | 
			
		||||
 * @param string $type Return format: json, xml, atom, rss
 | 
			
		||||
 *
 | 
			
		||||
 * @return array|string
 | 
			
		||||
 * @throws UnauthorizedException
 | 
			
		||||
 * @throws BadRequestException
 | 
			
		||||
 */
 | 
			
		||||
function api_search($type)
 | 
			
		||||
{
 | 
			
		||||
	$data = array();
 | 
			
		||||
 | 
			
		||||
	if (x($_REQUEST, 'q')) {
 | 
			
		||||
		if (x($_REQUEST, 'rpp')) {
 | 
			
		||||
			$count = $_REQUEST['rpp'];
 | 
			
		||||
		} elseif (x($_REQUEST, 'count')) {
 | 
			
		||||
			$count = $_REQUEST['count'];
 | 
			
		||||
		} else {
 | 
			
		||||
			$count = 15;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$since_id = (x($_REQUEST, 'since_id') ? $_REQUEST['since_id'] : 0);
 | 
			
		||||
		$max_id = (x($_REQUEST, 'max_id') ? $_REQUEST['max_id'] : 0);
 | 
			
		||||
		$page = (x($_REQUEST, 'page') ? $_REQUEST['page'] - 1 : 0);
 | 
			
		||||
 | 
			
		||||
		$start = $page * $count;
 | 
			
		||||
 | 
			
		||||
		if ($max_id > 0) {
 | 
			
		||||
			$sql_extra .= ' AND `item`.`id` <= ' . intval($max_id);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		$r = q(
 | 
			
		||||
			"SELECT %s
 | 
			
		||||
			FROM `item` %s
 | 
			
		||||
			WHERE %s AND (`item`.`uid` = 0 OR (`item`.`uid` = %s AND NOT `item`.`global`))
 | 
			
		||||
			AND `item`.`body` REGEXP '%s'
 | 
			
		||||
			$sql_extra
 | 
			
		||||
			AND `item`.`id`>%d
 | 
			
		||||
			GROUP BY `item`.`uri`, `item`.`id`
 | 
			
		||||
			ORDER BY `item`.`id` DESC LIMIT %d ,%d ",
 | 
			
		||||
			item_fieldlists(),
 | 
			
		||||
			item_joins(),
 | 
			
		||||
			item_condition(),
 | 
			
		||||
			intval(local_user()),
 | 
			
		||||
			dbesc(protect_sprintf(preg_quote($_REQUEST['q']))),
 | 
			
		||||
			intval($since_id),
 | 
			
		||||
			intval($start),
 | 
			
		||||
			intval($count)
 | 
			
		||||
		);
 | 
			
		||||
 | 
			
		||||
		$data['status'] = api_format_items($r, api_get_user(get_app()));
 | 
			
		||||
	} else {
 | 
			
		||||
		throw new BadRequestException("q parameter is required.");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return api_format_data("statuses", $type, $data);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// @TODO move to top of file or somewhere better
 | 
			
		||||
api_register_func('api/search/tweets', 'api_search', true);
 | 
			
		||||
api_register_func('api/search', 'api_search', true);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 * http://developer.twitter.com/doc/get/statuses/home_timeline
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue