Hi @bonushenricus and @florianm
I hope all is good. I’m working on a package to access KoBotoolbox
data using the v2 API.
The package is named robotoolbox
and you can find the dev version here:
I’m still working on it but would grateful for feedbacks, issues, etc.
The main function of robotoolbox
is kobo_data
or kobo_submissions
(alias), and to get the data you need to setup your account and the use your asset uid to read the data.
You’ll need to install this package using the remotes
R package
## install.packages("remotes")
remotes::install_gitlab("dickoa/robotoolbox")
The first step is to get your API token
using the kobo_token
function.
library(robotoolbox)
token <- kobo_token(username = "cool_user_name", password = "myP@$$Word",
url = "https://{kpi-url}/")
Now you can access all your projects and read the data from the project you picked. You can list project using kobo_asset_list()
.
library(dplyr)
l <- kobo_asset_list()
glimpse(l) # l is a data.frame with as many rows as projects
## $ uid <chr> "b9kgvd7AXQCmo5qyUOBEl", "aRfJMpTSGRLzZ…"
## $ name <chr> "Proj_A1", "Proj_A2", "Proj_A3", "Proj_A…"
## $ asset_type <chr> "survey", "survey", "survey", "survey", …
## $ owner_username <chr> "xxxxxxxxxxxxxx", "xxxxxxxxxxxxxxx", "xx…"
## $ date_created <dttm> 2020-04-27 20:34:23, 2020-04-27 21:21:1…
## $ date_modified <dttm> 2021-06-17 01:52:57, 2021-06-17 01:52:5…
## $ submissions <int> 2951, 2679, 2, 1, 0, 0, 287, 73, 0, 274,…
Let’s pick the first project and load it
uid <- l$uid[1]
asset <- kobo_asset(uid)
asset
## <robotoolbox asset> b9agvd9AXQCmo5qyUOBEl
## Asset Name: proj_A1
## Asset Type: survey
## Created: 2021-05-10 07:47:53
## Last modified: 2021-08-16 12:35:50
## Submissions: 941
With the asset you can now read the data (you can also read the data from the uid
directly).
data <- kobo_data(asset)
glimpse(data)
## Rows: 941
## Columns: 17
## $ id <int> …
## $ start <dttm> …
## $ end <dttm> …
## $ today <date> …
## $ deviceid <chr> …
## $ test <chr+lbl> …
## $ round <date> …
## $ effective_date <date> …
## $ collect_type <chr+lbl> …
## $ covid_module <chr+lbl> …
## $ country <chr+lbl> …
## $ interviewer_id <chr> …
## $ respondent_is_major <chr+lbl> …
## $ consent <chr+lbl> …
## $ admin_level_1 <chr+lbl> …
## $ admin_level_2 <chr+lbl> …
## $ admin_level_3 <chr+lbl> …
This package relies on the R package labelled
to read labels into R. You can learn more here
Another feature, is the use of dm
to handle repeating groups. More info in this vignette:
As I said, it’s still a WIP, and It might break with certain type of complex forms. Please, if it’s not working as expected don’t hesitate to reach out.
I want to thank @florianm for his work on ruODK
it was inspiring, and I hope robotoolbox
will be as robust to access KoBotoolbox
data.