I just wanted to let anyone who wanted to use this API know that this is pretty safe to use. All downloaded files are cached, and as such it avoids sending more than the required amount of requests to SmileBASIC servers.
If you're doing a large amount of automated queries at one time, please check out the WebSocket Query API, as it provides less overhead on the server and adds additional features like queueing requests.
Also, there might be a new feature soon :)
Quick jump:
NewsIntroductionUsageExamplesSiteJS pluginCreditsWebSocket Query API
03/26/2020: Fixed a bug that was causing long load times. I don't know if anyone noticed this, but it was taking like 3 seconds per request. Not any more!
03/16/2020: Added English tag support! When using the `info` endpoint, add ?en=1 for the official English tags. They haven't been updated but should give a better idea of what each tag is. This also works with ?json=1 and the WebSocket Query API!
02/29/2020: Added tags to the info page! Only Japanese tags for now because official tag data for English is not very good right now, but will be updated in the future!
02/04/2020: WebSocket query API implemented! Read more details below.
Introduction
SmileBASIC API (SBAPI) is a service created by me (MasterR3C0RD) and triangle, with help from Yttria, 12Me21, and snail_, that allows you to get info for and download programs directly from SmileBASIC 3 servers. Not only is this useful for moderators to check if a key is still available, it also allows users to post GRPs to the forums as a PNG.
Usage:
Everything in SBAPI is simply a URL. The basic URL format for keys is http://sbapi.me/get/(key)[/(filename)]/(encoding), where anything in [] is optional and anything in () is required. key should be replaced with the public key, and filename allows you to choose a specific file if the key is a project. The encoding is required and can be one of the following:
info - all files, shows information about the file provided (use ?json=1 if you're writing a program to get information as JSON, add en=1 for English tags)
list - only projects, lists all files (use ?json=1 if you're writing a program to get information as JSON)
zip - only projects, download all files from the project as a ZIP file. If you want to convert files to their preferred format (ex, GRP -> PNG, TXT -> Text), add ?nice=1
raw - all files, downloads the raw file.
text - only TXTs, returns the text content of the file
json - only DATs, returns the DAT information as a JSON array of arrays.
csv - only 2D DATs, converts the data to a CSV (comma-separated values) file
icon - only META files, returns the icon as a PNG file.
downloads - all files, returns a PNG with the download count (download count is only updated every 24 hours). You can also control the PNG using query parameters: ?color=#BADA55&stroke=#A55A55&strokewidth=3&padding=3&bgcolor=rgba(0,0,0,0.5)
encodings - all files, returns JSON array with all possible encodings for the file given
Other encodings may be added in the future.
Examples:Disclaimer: Authors of projects or assets displayed on this page are not associated with and have not contributed to the SmileBASIC API project.
This can be used when asking people to debug code on the forums. Posting a public key and a link to the code could make debugging much easier.
Example:http://sbapi.me/get/CKANY53Y/TN_SHARP/code (Phil's N# compiler)
Output:
Wanting to show off your sprites is another possible use. Simply use the PNG endpoint.
Example:http://sbapi.me/get/4DH5P4K3/BBG_TIKI/png (sprites from cujo1992's Tiki Descent)
Output:
You can also back up your project as a ZIP file if you need to be sure you'll always have it.
Example:http://sbapi.me/get/P3T43E3V/zip (kantackistan's Virtual Buffalo)
Output:
Don't forget a download counter to gauge how popular your programs are! Note that the download count is not real time, and only updates every 24 hours.
Example:http://sbapi.me/get/QK4N3PZF/downloads (calc84maniac's Spooky Maze Raycaster demo)
Output:Optional SiteJS:
If you think it's too much of a hassle to have to go through the API to check out information about programs, you have a similar mindset to I. That's why me and 12Me21 wrote a SiteJS, available at http://sbapi.me/sbapi-sbs.js that adds an extra section to pages that looks something like this:
Simply copy and paste the contents into your SiteJS and load up a program page. After a few seconds, the information will load and be shown on the page.
WebSocket Query API
If you're doing multiple requests, the best way to accomplish this is using the WebSocket Query API. Simply connect to ws[s]://sbapi.me/get and send a request, and you'll get something back.
You can either do:
Request: (key[/version[/filename]]) info [prop1,prop2.subprop2] - Gets information about a program.
Response: (key[/version[/filename]]) (value) - Value will either be the entire JSON-encoded info object (if no properties are provided), a single JSON-encoded value (if one property is provided), or a JSON-encoded object of all properties requested and their values (if multiple properties are provided). This info object uses a different format than the `info` encoding, test it first by not providing any property arguments.
OR
Request: (key[/version[/filename]]) download [encoding[?options]] - Gets the file as a specified encoding (or the raw file if none is specified). Any encodings that allow options work exactly the same as if options were provided
Response: (key[/version[/filename]]) (filename) (datalength) (data) - Datalength will be the ASCII representation of the size of the data returned, and data will be the response of the encoding.
If a request fails, you will get a response similar to such: (key[/version[/filename]]) FAIL
If you get this and you're sure you're not doing anything wrong, send me a DM and I'll take a look.
NOTE: Send multiple requests separated by \n, eg, `KEY1 info\nKEY2 info` or otherwise you will end up never getting a response in the end. Some requests async are fine, but not all.
Credits
triangle - file format guru, wrote the file parser used for SB files and other parts of code, and most of reverse engineering of SmileBASIC's servers, donated 3DS information for the server
MasterR3C0RD - hosting, wrote the server communication libraries and helped with reverse engineering of SmileBASIC's servers
12Me21 - wrote sbhighlight and rewrote the SiteJS plugin to work with more browsers
snail_ - working on proper documentation for API
Yttria - word of reason, helped with multiple things internally
227 Comment(s)the_squat1115Second YearMy account is over 2 years oldWebsiteAvatar TabooI didn't change my avatar for 180 daysWebsiteForum ContributorHiddenAchievementsIn that API, is there a Wav to SB Wav converter?HTV04Forum LeaderHiddenAchievementsThird YearMy account is over 3 years oldWebsiteIntermediate ProgrammerI can make programs, but I still have trouble here and there. Programming StrengthI think you mean the other way around, but just use Perska’s tool if you want to convert WAVs to SB WAVs.HTV04Forum LeaderHiddenAchievementsThird YearMy account is over 3 years oldWebsiteIntermediate ProgrammerI can make programs, but I still have trouble here and there. Programming StrengthThis is really cool! Using this tool, it would be 10x easier to archive the SmileBASIC servers in case they go down.the_squat1115Second YearMy account is over 2 years oldWebsiteAvatar TabooI didn't change my avatar for 180 daysWebsiteForum ContributorHiddenAchievementsIt defeats one of its purposes?HTV04Forum LeaderHiddenAchievementsThird YearMy account is over 3 years oldWebsiteIntermediate ProgrammerI can make programs, but I still have trouble here and there. Programming StrengthPlease reply next time, and I meant the 3DS to PC part of PetitModem. With this, all you would have to do to port SB programs to PC is use SBAPI.HTV04Forum LeaderHiddenAchievementsThird YearMy account is over 3 years oldWebsiteIntermediate ProgrammerI can make programs, but I still have trouble here and there. Programming StrengthRIP Petit Modem I guess
(Well, at least the 3DS->PC part)photonegativemickeyMinecraft Is Awesome!I love Minecraft!Express YourselfIntermediate ProgrammerI can make programs, but I still have trouble here and there. Programming StrengthVideo GamesI like to play video games!HobbiesWait what happened to petit modem?HTV04Forum LeaderHiddenAchievementsThird YearMy account is over 3 years oldWebsiteIntermediate ProgrammerI can make programs, but I still have trouble here and there. Programming StrengthNothing, this just defeats one of its purposes.kantackistanNeat! Wish I had this last week, then I wouldn't have spent hours with Petit Modem...
Would you consider adding horizontal scrolling to the code viewer? Word wrapping is great but it doesn't help much on gigantic MML strings or animations without whitespaces.
MasterR3C0RDPower UserAmazing ContributorSomeone thinks I'm an awesome person who has done so much for the community!AchievementsThird YearMy account is over 3 years oldWebsiteosu! Is Awesome!I love osu!Express YourselfGotcha, I'll get that fixed for you
EDIT: There you go! By default, code doesn't wrap, so add ?wrap=1 to the end of the URL if you do want it.snail_Power UserQSP Contest 1 Contest ParticipantI participated in the first SmileBASIC Source QSP Contest!HelperReceived for being very helpful around SmileBASIC SourceAchievementsAmazing ContributorSomeone thinks I'm an awesome person who has done so much for the community!AchievementsSince the code view is really just for presentation, you could add a toggleable word wrap button. kantackistanExcellent, thanksMasterR3C0RDPower UserAmazing ContributorSomeone thinks I'm an awesome person who has done so much for the community!AchievementsThird YearMy account is over 3 years oldWebsiteosu! Is Awesome!I love osu!Express YourselfNext thing to add is a way for people to add download counters to their pages, might be useful-ishSamAmazing PageHiddenAchievementsGreat PageHiddenAchievementsGood PageHiddenAchievementsI wasn't asked for permission to have my program be showcased here (which I don't mind: people can do whatever they want with any program), but as the epic grand dad memer himself, I just want to let people know that I do not actually approve of this whole hacking thing.MasterR3C0RDPower UserAmazing ContributorSomeone thinks I'm an awesome person who has done so much for the community!AchievementsThird YearMy account is over 3 years oldWebsiteosu! Is Awesome!I love osu!Express YourselfSorry for not asking for permission first, I didn't really think that part through. Maybe everything is public in SB, but this is a separate thing so I'd prefer not to use graphics that other people don't want displayedSamAmazing PageHiddenAchievementsGreat PageHiddenAchievementsGood PageHiddenAchievements(I'd delete my comment now that we're gucci but I can't.) Thanks famTheV360Pokemon Is Awesome!I love Pokemon!Express YourselfFirst DayJoined on the very first day of SmileBASIC SourceWebsiteNight PersonI like the quiet night and sleep late.Express YourselfThis is huge. Not only for convenience, but also for backups and preservation. Seriously, this looks amazing.MasterR3C0RDPower UserAmazing ContributorSomeone thinks I'm an awesome person who has done so much for the community!AchievementsThird YearMy account is over 3 years oldWebsiteosu! Is Awesome!I love osu!Express YourselfThanks, we all put a lot of time into getting this up and working!codingineptBeginner ProgrammerI'm just starting out! I'm still trying to grasp the basics.Programming StrengthVideo GamesI like to play video games!HobbiesZelda Is Awesome!I love The Legend Of Zelda!Express Yourselfi like the name sbapi
1
2
3
4