WaniKani Explorer Update

======== LATEST UPDATE: 3/30/2018 ========

Big update for the app! I’ve redesigned the interface and improved much of the code. Give it a whirl if you’d like! I’ll be adding more “things” soon (I hope…).



UPDATE: 8/7/2015

Added level progress duration times, so you can see how long it took you to complete each level

NOTE: There is a data export bug (Download CSV) that seems to be occurring due to an unexpected unicode character.  My guess is that there’s an unexpected learning item unicode that occurs in the -teen levels that causes the problem.  I’m trying to track this down and fix.  Sorry for the inconvenience, and let me know if you encounter the problem and what level you were at the time.



Fellow Friends,

Thanks to all the users who helped to test out my web app WaniKani Explorer.  The app was hosted on a free plan over at shinyapps.io, but they recently implemented some tight restrictions on usage, and the app was not reliably up and running.

I’ve finally transitioned it to my own server and you can access it via:

The app should now be up reliably and should be more responsive (improved hardware FTW).  Next up is to implement the improvements and fixes suggested by the community.

Thanks again and please send along any suggestions you might have to make the app more useful for you.


UPDATE: 7/11/2015

 I fixed a caching bug pointed out by cmunch (thanks friend) where multiple users could step on each others displayed data; now each user’s session is truly isolated.
I now only display items that have been attempted at least 1x (e.g. you’ve tried it in a review).  The WK API seems to return items that are unlocked for a given level, but that you haven’t even yet seen in a lesson.

My next to-do is to implement cross-session caching so I don’t have to request so much data from the WK servers.  This should also improve performance.



UPDATE: 7/11/2015 #2

* I’ve implemented caching so you don’t have to re-download your data every time from the WaniKani servers (and so the app doesn’t exhaust the API request limit).
* If you want a new copy of your data (e.g. because you’ve made progress since you last used the app), use the “Clear Cached Data” button to remove the cached data.  You’ll then need to reload the page and start over.


Update: 07/25/2015

* Progress plots have been added (see “Progress Plots” tab).
* SRS status counts are also display on the “Progress Plots” tab.

Very cool, thank you! I didn’t see your previous post so apologies if someone has already made this suggestion, but it would be really helpful if you could add a ‘part of speech’ column for vocabulary - I’ve been trying to find a way to painlessly extract all the adverbs for a while…

LThorburn said... Very cool, thank you! I didn't see your previous post so apologies if someone has already made this suggestion, but it would be really helpful if you could add a 'part of speech' column for vocabulary - I've been trying to find a way to painlessly extract all the adverbs for a while...
 Can't access this information via WK's API. Only on the page it's stored, which means crawling every single page just for POS, which I already have done. But hey you're 48 now, so it shan't be an issue for you anymore, right?

Ah well, it’s not particularly necessary. I’m doing a concurrent diploma in Japanese at uni and it’s handy to have a sheet of key vocab to remind myself of before writing essays. Linking phrases (そのまま、とは言っても、etc) and adverbs are the most useful, I’ve found. Thanks for letting me know, though :slight_smile:

This is amazing… thanks so much!

Cool.  Very clean UI.  I was clicking through different things to see them and when I hit ‘Available Date’, it showed me the answer in seconds.  I don’t think your date conversion call is working on that field.

Thanks for an interesting way to look at the data!

Amejanai – thanks for the suggestion!  The date converted versions are available in the columns called (for example) “Unlocked on”, “Burned On”, etc.  These are toward the top of the list.

However, it is confusing that the versions in seconds are there too (e.g. “Burned”).  I’ve just pushed out an updated where I’ve removed these columns for selection.  A few others had noticed this too, so it was obviously a bad UI choice on my end.


Fiddling around with it some more, it seems that the left primary column’s (with the right column’s table selectors) grey space is set to a % width.  When there are few enough columns in the right that it needs to fill space to make the whole table as wide as the browser window, this works well enough.  If the browser window shrinks or the user adds more and more sub-columns on the right, there comes a point where the left column’s grey space isn’t re-sizing appropriately.   The user can force the window to require side-scrolling even though there’s a fair bit of empty space remaining to collapse in the left primary column.  If possible, that grey space should continue to shrink as more right-side sub-columns are added to prevent data from extending beyond the confines of the browser window.

I realized after my earlier post that there were two ways to select the column I mentioned.  You explained before I posted, today, to ask what the difference was. =)

My new question is about what constitutes ‘available’.  The Explorer is showing me as having 70 more items available than WK does.  I’m guessing your DB totals all the things available in all the unlocked levels even if individual elements aren’t unlocked, yet?

Amejanai – thanks for the additional feedback.  This is helpful.

On the layout, I agree – not the best use of space.  For this app, I’m using a non-typical web toolkit call Shiny, and the layout options are limited in its current state.  However, I’m going to try to fiddle with the underlying layout to see if I can get something more efficient.

Good catch on the counts.  I’m literally pulling everything that the WK API provides to display.  This seems to include items that are part of your current level, but those that you haven’t been given access to yet through the lessons.  If you take a look at your data, I expect you’ll see 0 total attempts for these items.  I might add a checkbox to select whether or not you want to display these items, or in fact, just limit the display to the items that have been attempted out right.

Thanks again!

This piqued my interest! However I keep getting a ‘server refused the connection’ error. Using chrome… Is it down? 

I’d also like to throw in, it lets you see the data of whoever put their API before you. I was sharing this with another wanikani user at the same time to look at our “worst items”.

I put my API in first, then he put his in. When I accidentally refreshed, it was no longer my information, but his information. When I re-entered my API key, we confirmed he was now able to see my information as well. It was kinda funny being able to see each other’s walls of shame, just wanted to let you know :slight_smile:

derpanine – sorry for the issues and thanks for giving it a shot.  I just loaded up the site (on both Chrome and Safari), and it loaded up OK for me.  I also checked the server itself and all seems to be OK.  Are you on OS X or Windows?  Maybe give it another shot to see if you’re still getting  the denied connection.

cmunch – wow!  Very interesting and thanks for letting me know.  This behavior obviously isn’t my intent on how the app should function.  It much have something to do with how the data are being cached.  Just to confirm, were you and your friend working on the same computer when you saw this or on different computers?


I went to review my lists now that lv 5 is open and the tool is giving me someone’s data who is level 11.  Not sure whose, but it appears that the db isn’t flushing a cache, somewhere.  This is in Chrome/Win7.  The first page tells me the data is for Amejanai, so that part is correct.  I went to load it in Firefox to compare, but that shows my current data.  When I refreshed in Chrome, it showed the correct data, too.  So, it appears some tables are keeping the n-1 API key and not loading the proper one the way the first page does.

Since I messed with the columns being displayed, I wonder if I changed some other user’s setup?

Actually, the level appears to change as I change tabs.  for a couple minutes, I get the right info but then it’s all over the place.  One tab will show Lv 14, another will show Lv 23.  So it may not be that it’s not updating the cache from the last person, but that it’s only holding one key in the cache, at all, and that’s of the most recent submitter.

Amejanai – sorry about the mess and the confusion.  I’ve just fixed this bug in the app (an issue with caching).  Please give it a shot again and let me know if you run into any issue.  Thanks for using my app and for the feedback.

This is so handy! Thanks!!

Many thanks for the awesome tool! It’s interesting to be able to sort the data and see which items have given me the most trouble. Not a lot of surprises there, since I"m already very familiar with the few items that just keep getting kicked back to apprentice level!  ><    

I’m wondering if anyone else is having trouble with the download feature. I’ve tried on a variety of browsers on both OS X and Windows 7, but it appears to be  possibly a backend issue:  unimplemented type ‘list’ in ‘EncodeElement’   

Thanks again for this great tool!

AnnDeLune – thanks for the shout out.

ralichte – sorry about that.  I got some reports before about issues popping up with the download but haven’t been able to track this down.  I’m running on a Mac with Safari and it works here.  Since I’m a lowly level 3, I wonder if there are some issues with the characters that pop-up at later levels that might be causing the problems (?).  I will do some more testing and get this fixed.  I think we should all have easy access to our WaniKani data.


the progress plots are showing some really weird data for the level progress times because of how the radicals were moved around recently.

ShotgunLagoon said... the progress plots are showing some really weird data for the level progress times because of how the radicals were moved around recently.