ushahidi / SwiftRiver-API

An API for external (third party) applications to post and consume data to/from SwiftRiver.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

date_from and date_to request fails in API /rivers/river_id/drops request

dan-king opened this issue · comments

The documentation at https://wiki.ushahidi.com/display/WIKI/SwiftRiver+API+River+Resources#SwiftRiverAPIRiverResources-GETrivers/:id/drops explains date_from and date_to parameters but doesn't describe the format.

The trends example uses the format YYYY-MM-DD but when I try this in the DROPS GET request I get the following error:

Fatal error: Uncaught exception 'Exception' with message 'An error occurred: array ( 'message' => 'Invalid parameter.', 'errors' => array ( 0 => array ( 'field' => 'date_from', 'code' => 'invalid', ), 1 => array ( 'field' => 'date_to', 'code' => 'invalid', ), ), )' in /opt/firsttosee/swift/api3.php:104 Stack trace: #0 /opt/firsttosee/swift/api3.php(120): API_Client->exec_api_request('/rivers/39/drop...', '', 'GET', Array) #1 {main} thrown in /opt/firsttosee/swift/api3.php on line 104

I get the same error when I try MM-DD-YYYY.

When I used RFC822 I get a different error:

$date_from = "Thu, 25 Jul 2013 15:12:33 -0700";
$date_to = "Thu, 15 Aug 2013 15:12:33 -0700";

Fatal error: Uncaught exception 'Exception' with message 'An error occurred: ''' in /opt/firsttosee/swift/api3.php:104 Stack trace: #0 /opt/firsttosee/swift/api3.php(120): API_Client->exec_api_request('/rivers/39/drop...', '', 'GET', Array) #1 {main} thrown in /opt/firsttosee/swift/api3.php on line 104

I have a workaround until the bug is fixed and/or documentation updated with working example.

The workaround is to query the database directly instead of using the api. The database schema is documented at https://wiki.ushahidi.com/display/WIKI/SwiftRiver+Database+Schema

The query I used is

SELECT
droplets.id, droplets.identity_id, droplets.droplet_orig_id, droplets.channel, droplets.droplet_type, droplets.droplet_title, droplets.droplet_content, droplets.droplet_date_pub, droplets.droplet_date_add, droplets.original_url,
rivers_droplets.droplet_id,
identities.identity_username, identities.identity_name, identities.identity_avatar
FROM $db.droplets , $db.rivers_droplets , $db.identities
WHERE
droplets.id = rivers_droplets.droplet_id
AND
droplets.identity_id = identities.id
AND
droplets.droplet_date_pub >= '$date_from 00:00:00'
AND
droplets.droplet_date_pub <= '$date_to 23:59:59'
AND
rivers_droplets.river_id = $river_id
ORDER BY droplets.id DESC LIMIT 500";

The variables $date_from and $date_to are in the format "yyyy-mm-dd".

Of course this kind of direct query is very unreliable because it will fail as soon as the schema changes. It would be better to get the result from the API.