Closed colindean closed 1 year ago
Thanks for reaching out and providing such a thorough level of detail!
However, I'm going to close as unfortunately I don't think this makes sense for us, and doesn't seem to meet several of the criteria we have for new badges (particularly the ones around undocumented APIs and being a developer-oriented service)
Though I'll add that this could probably be done via our Custom Endpoint badge, and then if so, it could also then potentially be listed on Awesome Badges to increase awareness/availability to others
Thanks for considering it. If I could convince Duolingo to document the API in a way that met Shields' minimum expectations, would that alleviate concern enough to overlook the developer-oriented side of things? Of course, it might be easier to get them to relax the UA check, which would enable using the Dynamic JSON endpoint…
I want to avoid setting up another 10-line service to work around API weirdness. Too many puppies in that pack already, haha.
If I could convince Duolingo to document the API in a way that met Shields' minimum expectations
I don't think so, as I feel language-learning platforms are too far outside the scope of "developer tools". I'll go ahead and note that we do have badges for other platforms, like YouTube, which on the surface probably seem similar outside that scope. However, we can be persuaded to make a reach in those cases as those platforms are often used by developers for development/tech oriented things.
I just think that the likes of Duolingo, Babbel, Rosetta Stone, etc. would be a bridge too far
I understand. Thanks for the explanation. I'll try to work my contacts at Duolingo.
📋 Description
This badge would display the Duolingo logo and one of a few statistics, e.g. cumulative experience points or consecutive days of practice ("streak"):
Maybe
https://img.shields.io/duolingo/xp/:user
grabbing$.users[:0].totalXp
Maybe
https://img.shields.io/duolingo/streak/:user
grabbing$.users[:0].streak
Other stats that might be interesting:
$course = $.users[:0].courses[?(@.fromLanguage == $fromLanguage && @.learningLanguage == $learningLanguage)]
https://img.shields.io/duolingo/xp/:user/:fromLanguage/:learningLanguage
, which would pull$course.xp
$course.crowns
$.users[:0].hasPlus
Styling
Simple Icons already has
duolingo
so that part is good to go.Another color in the palate in addition to "Duolingo green"
#58cc02
is#1CB0F6
. I pulled#FF9600
from the fire icon widely used to represent streaks.🔗 Data
The API is ~public but seems to require authentication unless a browser-like User-Agent header is provided. This fact is the sole reason why one cannot simply use the Dynamic JSON badge service -- that service does not allow additional headers, it seems.
e.g.
works but
does not.
There is no official documentation, but there is one unofficial API library: https://github.com/KartikTalwar/duolingo
🎤 Motivation
Duolingo is widely used, having 54 million monthly active users as of its 2022 yearly reporting period and more than 500 million users cumulative total.