Nookipedia:Development

Nookipedia provides the ability for developers to access its content for development projects through two APIs. We encourage developers to use Nookipedia's API to develop bots, tools, applications, and more! This page serves as an introduction to the APIs, as well as a directory of existing developers' projects.

Development
Nookipedia has a variety of ways to query and extract data from the wiki. If you have any questions, you are welcome to ask on the talk page or join our Discord server.

Nookipedia's text content is released under a CC BY-SA 3.0 license. Our data is free to use for any purpose; we simply ask that you provide attribution to Nookipedia, and a link back when possible.

Nookipedia API
Nookipedia has two custom-built API services:
 * api.nookipedia.com, our newly-built RESTful service that provides highly-structured data and is in active development. This API serves as a wrapper for Nookipedia's Cargo data (covered in more detail below).
 * nookipedia.com/api, our legacy RESTful service that has endpoints for villagers, today's events, critters (beta), and fossils.

For those looking to integrate with Nookipedia's APIs, we recommend utilizing our first service, as the data is much more structured and is where the majority of Nookipedia's development efforts will be focused.

Users can request access to the API by following the instructions on the page. If you have questions regarding using Nookipedia's API, feel free to post them on the talk page. Users who are actively developing projects using the API are also encouraged to join us on Discord. You'll be assigned the API developer role and will gain access to our support channel where you can ask questions directly. Contact one of Nookipedia's directors for more information.

Cargo
Nookipedia utilizes the MediaWiki Cargo extension, which lets us store data from templates in structured databases. For example, if you visit a villager's article (e.g. Rosie), all the data you see in the infobox at the top of the page is stored in a database that can be queried elsewhere on the wiki, or through the MediaWiki API for external use.

A list of Nookipedia's Cargo tables is available at Special:CargoTables. Please note that several tables are under active development, and their metadata is subject to change. A list of tables and their status (development vs. production) is coming soon.

There are two ways to query Nookipedia's Cargo tables:
 * Through our custom wrapper API; we recommend using this service in most cases for several reasons:
 * Hosted on its own dedicated server and cached, so it is not subjected to the wiki's performance limitations or downtime.
 * Changes we make to Cargo tables will be reflected in our API, so you can trust that nothing will break as our tables evolve.
 * Querying and filtering data is more lenient, as well as abstracted behind simple endpoints, making querying easier.
 * Additional features built in, such as the ability to generate thumbnails of varying size.
 * Actively monitored and under development (your feature requests can come to life).
 * Through the MediaWiki API, which provides direct access to Cargo tables. While the endpoints are more technical, they are powerful as they allow unfettered access to Nookipedia's Cargo tables through any SQL joins, group_bys, and where clauses you desire. We recommend using this when our wrapper above doesn't provide what you need, or if you are building out complicated queries that tie in data from multiple tables. A more in-depth guide on querying Cargo directly is coming soon.

MediaWiki API
Nookipedia, which runs on MediaWiki software, comes with the MediaWiki API that is standard on all MediaWiki instances. It can be used to extract list of articles from categories; grab statistics about the wiki; edit pages and upload files; grab page content to scrape; and more. If you're new to using the MediaWiki API, we recommend looking over the following to get started:
 * MediaWiki API Introduction and examples
 * MediaWiki API FAQ
 * MediaWiki API Queries

Licensing
Nookipedia's text content is released under a CC BY-SA 3.0 license. When using Nookipedia's text in your application, we request that you follow the terms of the license by citing Nookipedia as the source of the information, and linking back to the article's history when possible.

In the spirit of open source and knowledge, we also request that you open source your application (on a site such as GitHub) when possible.

Projects
The following is a list of community-made tools that utilize Nookipedia's API. If you have created your own project that isn't listed below, feel free to add it!


 * Nookipedia's official organizational projects are hosted at github.com/Nookipedia:
 * Ribbot: "Cogs" for Nookipedia's official Discord bot, running off of Red.

Other projects built by the community are as follows:
 * Nookscraper on GitHub: A tool written in Go to scrape data from villager pages.
 * PellyBot on Reddit: A reddit bot that posts daily updates to the Animal Crossing subreddit. The updates include events and birthdays for the week.
 * Sonchou: Some packages and scripts written in Go that could be useful to future users and developers of Nookipedia. More information can be found in the godoc.
 * Nookbot: A bot for the Animal Crossing: New Horizons Discord server. Includes a villager information lookup.