Implement search API (fixes #929)
This commit is contained in:
parent
6b622fa9e4
commit
4a5d988d8c
2 changed files with 83 additions and 0 deletions
18
doc/api.md
18
doc/api.md
|
@ -449,6 +449,24 @@ It shows all direct answers (excluding the original post) to a given id.
|
||||||
|
|
||||||
Friendica doesn't allow showing followers of other users.
|
Friendica doesn't allow showing followers of other users.
|
||||||
|
|
||||||
|
---
|
||||||
|
### search (*; AUTH)
|
||||||
|
#### Parameters
|
||||||
|
* q: search query
|
||||||
|
* page: the page number (starting at 1) to return
|
||||||
|
* rpp: the number of statuses to return per page
|
||||||
|
* count: alias for the rpp parameter
|
||||||
|
* since_id: returns statuses with ids greater than the given id
|
||||||
|
* max_id: returns statuses with ids lower or equal to the given id
|
||||||
|
|
||||||
|
#### Unsupported parameters
|
||||||
|
* geocode
|
||||||
|
* lang
|
||||||
|
* locale
|
||||||
|
* result_type
|
||||||
|
* until
|
||||||
|
* include_entities
|
||||||
|
|
||||||
---
|
---
|
||||||
### users/search (*)
|
### users/search (*)
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
|
@ -1485,6 +1485,71 @@ function api_users_search($type)
|
||||||
/// @TODO move to top of file or somewhere better
|
/// @TODO move to top of file or somewhere better
|
||||||
api_register_func('api/users/search', 'api_users_search');
|
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
|
* http://developer.twitter.com/doc/get/statuses/home_timeline
|
||||||
|
|
Loading…
Reference in a new issue