Public site directory

One thing that's come up recently for API clients is being able to let users sign up for an account on a public Laconica site. We have quite a few, and the number is growing. It's not always easy for users to add in the API root to general-purpose interfaces (like Twitterfeeds), nor is it easy for client developers to special-case each and every Laconica site in their software.

I'd like to propose a mechanism that would let client developers find public Laconica sites that their users can register on or log into an existing account.

The API would be rooted at dir.laconi.ca. It would be Twitter-like (RESTy, JSON and XML supported), with the following API elements:

1. http://dir.laconi.ca/providers.[xml|json] would be a full list of all providers. It would support a "since" parameter to only show providers listed more recently than some date. 2. http://dir.laconi.ca/providers/.[xml|json] would give data on a single provider. 3. http://dir.laconi.ca/providers/.[xml|json] would give data on a single provider. 4. http://dir.laconi.ca/providers/search.[xml|json]?q= would return a list of providers whose full name, nickname, or description contains as a substring. This might be useful for type-ahead directory interfaces. It would also take an hl=[code] parameter to limit results to descriptions or names in a particular language.

Updating profile information would be out-of-band; we'd probably have a Web UI for site admins to keep this data up-to-date.

Each provider is described by a data structure as follows:

* ID - a unique numerical ID. Example: 3, 35015. * nickname - a unique nickname, lowercase ASCII alphanum, 1-64 chars. Example: "identica", "bleeper", "twitarmy". * fullname - a more descriptive name, UTF-8, up to 255 chars. Example: "Identi.ca", "Twit Army Canteen", "Saigonica". * minilogo - URL of a logo image, 24x24 pixels * streamlogo - URL of a logo image, 48x48 pixels * profilelogo - URL of a logo image, 96x96 pixels * rooturl - root URL, like "http://bleeper.de/" * registrationurl - URL for a registration page, optional * apirooturl - URL for the Twitter-like API root, like "http://identi.ca/api". * description - a text description of the provider. Typically 1-3 sentences.

"fullname" and "description" could have multiple values, varying by human language. For the XML representation, we'd use xml:lang to differentiate; I'm not sure what to do for JSON. Something like "description_en", "description_no"?

Finally: participation for this directory would be voluntary. It would initially only contain Laconica sites, but other sites that support the Twitter API could also be listed in the future. Code for the directory would be Free Software under a liberal Apache 2.0 license, and the data would be CC0 (public domain-ish).

Any ideas or comments? Anyone want to do a fun little piece of work?