Display skills sorted in different orders in SUSI.AI Android App
Skills in SUSI.AI were displayed in a random order earlier as per the response received from the server. To provide more flexibility to the users, the skills can be sorted by various orders like top-rated, lexicographical, recently updated and so on. This blog shows how to get sorted skills from the server using the getSkillList.json API.
API Information
For requesting a list of SUSI skills, the endpoint used is /cms/getSkillList.json.
This will give you the sorted skills as per the applied filter. Some of the filters include top rated skills, recently updated skills, newly created skills, etc.
Base URL : https://api.susi.ai/cms/getSkillList.json
Parameters to be passed :
- group – This is the group to which a skill belongs to.
- language – The language in which the skill is needed.
- applyFilter – This parameter tells if the filtering needs to be enabled.
- filter_type – This is the order in which the skills need to be sorted and is applicable if applyFilter is true.
- filter_name – This tells whether the order of sorting needs to be ascending or descending and is applicable if applyFilter is true.
Currently, there are following filters available :
- Top Rated : The skills will be sorted based on the skills ratings by users.
filter_type : rating filter_name : ascending or descending (based on the requirement).
- Lexicographical : The skills will be sorted in alphabetical order.
filter_type : lexicographical filter_name : ascending (to show skills in the order A-Z) or (descending to show skills in the order Z-A).
- Newly Created : The skills will be displayed based on the date of creation.
filter_type : creation_date filter_name : ascending to show newly created skills first and descending to show the oldest created skills first.
- Recently Updated : The skills will be sorted based on the date when they were last updated.
filter_type : modified_date filter_name : ascending or descending as per requirement.
- Feedback Count : The skills will be sorted as per the feedback count.
filter_type : feedback filter_name : ascending to show skills with the most number of feedbacks first and descending to show skills with the least number of feedbacks first.
- This Week Usage : The skills will be sorted as per the usage analytics of the week.
filter_type : usage duration : 7 filter_name : descending to show the most used skill first and vice-versa.
- This Week Usage : The skills will be sorted as per the usage analytics for the last 30 days.
filter_type : usage duration : 30 filter_name : descending to show the most used skill first and vice-versa.
Note: In all the above cases, the ‘applyFilter’ param will be passed with the value ‘true’ otherwise the skills will not be sorted.
Here is an example of a URL for displaying the top rated skills:
https://api.susi.ai/cms/getSkillList.json?group=All&language=en&applyFilter=true&filter_name=descending&filter_type=rating
To make a request to the getSkillList.json API, make a GET request as follows :
@GET("/cms/getSkillList.json")
Call<ListSkillsResponse> fetchListSkills(@QueryMap Map<String, String> query);
Here the query map contains all the aforementioned params.
Now, make the GET request using Retrofit from the model :
private lateinit var authResponseCallSkills: Call<ListSkillsResponse> override fun fetchSkills(group: String, language: String, listener: IGroupWiseSkillsModel.OnFetchSkillsFinishedListener) { val queryObject = SkillsListQuery(group, language, "true", "descending", "rating") authResponseCallSkills = ClientBuilder.fetchListSkillsCall(queryObject) authResponseCallSkills.enqueue(object : Callback<ListSkillsResponse> { override fun onResponse(call: Call<ListSkillsResponse>, response: Response<ListSkillsResponse>) { listener.onSkillFetchSuccess(response, group) } override fun onFailure(call: Call<ListSkillsResponse>, t: Throwable) { Timber.e(t) listener.onSkillFetchFailure(t) } }) } override fun cancelFetch() { try { authResponseCallSkills.cancel() } catch (e: Exception) { Timber.e(e) } }
The skills in the filteredData array, received in the JSON response, shall be sorted in the order based on the filter_type and filter_name params that you passed. Now, this array can be used to display skills on the skills listing page.
Resources
- Check out the ListSKillsService.java to know more about the API –
https://github.com/fossasia/susi_server/blob/development/src/ai/susi/server/api/cms/ListSkillService.java - Check out a blog on how Kotlin is a great language for JSON –
https://medium.com/square-corner-blog/kotlins-a-great-language-for-json-fcd6ef99256b