Spore

From Archiveteam
Jump to navigation Jump to search
Spore
Spore.com - 29072022.png
URL http://www.spore.com/[IAWcite.todayMemWeb]
Status Online!
Archiving status In progress... (API data)
Partially saved (website)
Archiving type ArchiveBot, other
IRC channel #archiveteam-bs (on hackint)

Spore is a video game developed by Maxis and published by Electronic Arts. The game allows players to create customized creatures, buildings, vehicles, adventures (with expansion pack Spore: Galactic Adventures) and share them with other players via the official game site, Spore.com, by publishing creations in-game or via third-party resources by publishing their 128x128 .png thumbnails without any postprocessing. (Data is embedded within the lowest bits of each pixel of those thumbnails.[1][2][3])

Numeric IDs

Spore website uses 12-digit numeric IDs for assets, users, sporecasts (feeds) and postcards (there are some bugged/technical assets that have short IDs with < 12 digits). In theory, one ID can be assigned to 2 or more entries, for example, an asset and a postcard.

Most of the IDs start with 500* or 501* (since 2015-01-01 16:54:20).

300* IDs are related to the staging server of Maxis.

600* IDs don't happen on the official Spore website, though a fan-made server for Spore uses them. [4]

Oddities

The asset upload endpoint on the official Spore server allows any numeric ID to be used. Due to this, we have some assets with bugged IDs.

Here is the full list of them.

  • 65* (12-Oct-2008 16:43)
  • 106* (18-Jan-2009 04:57)
  • 140* (28-Oct-2012 17:46)
  • 355 (30-Jan-2009 04:22)
  • 361 (25-Sep-2008 20:10)
  • 393 (28-Sep-2008 17:35)
  • 418* (25-Jan-2009 15:06)
  • 429 (29-Oct-2010 00:29)
  • 454 (26-Feb-2009 23:37)
  • 475* (06-Oct-2008 12:26)
  • 577* (03-Jan-2015 20:14)
  • 733 (27-Dec-2009 19:49)
  • 823 (08-Jan-2010 03:20)
  • 903* (02-Oct-2008 00:53)
  • 915 (01-Apr-2009 19:03)
  • 971 (31-Dec-2008 10:53)
  • 1007 (28-Oct-2011 00:54)
  • 1032 (28-Oct-2011 00:54)
  • 1063 (05-Sep-2010 09:20)
  • 1111 (04-May-2009 04:20)
  • 1186 (14-Sep-2008 06:17)
  • 1228* (15-Sep-2008 17:18)
  • 1251* (27-Feb-2009 02:08)
  • 1282* (04-Sep-2009 14:49)
  • 1321* (03-Oct-2008 15:26)
  • 1432 (26-Oct-2008 00:36)
  • 1511* (16-Oct-2008 17:44)

* missing from the database, but still on the static server.

** doesn't have any corresponding static data, but still in the database.

Site API

Public

Official Spore API documentation is available here: http://www.spore.com/comm/samples

URL Comments
Static Data /static/model/<subId1>/<subId2>/<subId3>/<AssetId>.xml

Asset XML model.

Sub IDs are 3-digit partitions of the Asset ID (like 500:123:456:789).
Should be requested on static subdomain which uses CDN.

/static/thumb/<subId1>/<subId2>/<subId3>/<AssetId>.png

Asset PNG 128x128 thumbnail. Can be imported into the game.

Sub IDs are 3-digit partitions of the Asset ID (like 500:123:456:789).
Should be requested on static subdomain which uses CDN.

/static/image/<subId1>/<subId2>/<subId3>/<AssetId>_lrg.png

/static/image/<subId1>/<subId2>/<subId3>/<AssetId>_2_lrg.png
/static/image/<subId1>/<subId2>/<subId3>/<AssetId>_3_lrg.png
/static/image/<subId1>/<subId2>/<subId3>/<AssetId>_4_lrg.png

Asset PNG 256x256 image.

_2_, _3_, _4_ are for additional adventure images.
Sub IDs are 3-digit partitions of the Asset ID (like 500:123:456:789).
Should be requested on static subdomain which uses CDN.

/static/postcard/<Date>/<subId1>/<subId2>/<subId3>/<PostcardId>.jpg (.png)

Postcard image.

Date is the date when the postcard was sent (YYYYMMDD).
Sub IDs are 2-digit partitions of the Postcard ID (like 5002:72:39:83:32).
Should be requested on static subdomain which uses CDN, although the site itself only uses www for postcards.

REST Service /rest/stats

Get daily stats about Spore.com.

/rest/creature/<CreatureAssetId>

Get various stats like height, diet, abilities etc. for a creature.

Returns <status>0</status> if the asset is not a creature or if the ID is invalid.

/rest/user/<Username>

Get profile pic, tagline, user id and creation date for a username.

Returns <status>0</status> if the username is invalid.
Note that all the non-ASCII symbols will be replaced with ? in the response.

/rest/assets/user/<Username>/<StartIndex>/<Length>/<AssetType>

Get asset id, name, creation date, type, parent and rating for a list of assets created by a user.

Always returns <status>1</status>.
The maximum length is 500 assets per request.
Ignores additional adventure images.
Note that all the non-ASCII symbols will be replaced with ? in the response.

/rest/sporecasts/<Username>

Get id, name, tags, subscription count, rating etc. for Sporecasts subscribed to by a user.

Returns <status>0</status> if the username is invalid.
The maximum length is unknown.
Note that all the non-ASCII symbols will be replaced with ? in the response.

/rest/assets/sporecast/<SporecastId>/<StartIndex>/<Length>

Get asset id, and name for assets in a sporecast.

Returns both <status>1</status> and <status>0</status> if the sporecast ID is invalid.
The maximum length is 500 assets per request.
Ignores additional adventure images.
Note that all the non-ASCII symbols will be replaced with ? in the response.

/rest/achievements/<Username>/<StartIndex>/<Length>

Get number of achievements for user and a list of achievement ids and unlock-dates.

Returns <status>0</status> if the username is invalid.
The maximum length is 500 achievements per request (the real maximum achievements count is 151, 102 vanilla + 49 Galactic Adventures EP).
Note that all the non-ASCII symbols will be replaced with ? in the response.

/rest/asset/<AssetId>

For a given asset ID, get name, description, tags, 10 latest comments, type, parent, rating, creation date and author name/id.

Returns <status>0</status> if the asset ID is invalid.
Note that all the non-ASCII symbols will be replaced with ? in the response.

/rest/comments/<AssetId>/<StartIndex>/<Length>

For a given asset ID, get a list of comments, sender names, and comment dates.

Returns <status>0</status> if the asset ID is invalid.
The maximum length is unknown.
Note that all the non-ASCII symbols will be replaced with ? in the response.

/rest/users/buddies/<Username>/<StartIndex>/<Length>

For a given username, get a list of buddy names and ids and total buddy count.

Returns <status>0</status> if the username is invalid.
The maximum length is unknown.
Note that all the non-ASCII symbols will be replaced with ? in the response.

/rest/users/subscribers/<Username>/<StartIndex>/<Length>

For a given username, get the list of users who have added that username as a buddy.

Returns <status>0</status> if the username is invalid.
The maximum length is 500 users per request.
Note that all the non-ASCII symbols will be replaced with ? in the response.

/rest/assets/search/<ViewType>/<StartIndex>/<Length>/<AssetType>

List creations for a given view.

View types:
TOP_RATED TOP_RATED_NEW NEWEST OLDEST FEATURED MAXIS_MADE RANDOM CUTE_AND_CREEPY TOP_RATED THERESA_VISION ALL

Asset types:
CREATURE BUILDING VEHICLE UFO ADVENTURE

Uses NEWEST view if the requested one doesn't exist.
Ignores asset type if the requested one doesn't exist.
The maximum length is 500 assets per request.
Note that all the non-ASCII symbols will be replaced with ? in the response.

/rest/assets/find/<Query>/<StartIndex>/<Length>/<AssetType>

Unmentioned endpoint, find creations for a query.

Query example: is_quality:true AND !author:MaxisCactus AND (tags:cat OR name:cat)

  1. Creation has 2 rates up or more (is_quality:true)
  2. The author is NOT MaxisCactus (!author:MaxisCactus)
  3. The name OR tags of the creation have "cat" in them ((tags:cat OR name:cat))

Conditions:

id (number: ID of the creation)
name / plain text (string: name of the creation)
author (string: username of the author of the creation)
description (string: description of the creation)
tags (string: tags of the creation)
created (number: date of uploading in YYYYMMDD format)
function (string: BROKEN)
locale (string: BROKEN)
type (string: BROKEN, also shouldn't be used in a query since the endpoint itself has it as an argument)
is_original (bool: is the creation completely new or based on another one)
is_quality (bool: does the creation have 2+ rates up or not)
is_featured (bool: is the creation featured or not)
is_slurped (bool: is the creation uploaded automatically when playing the game or published manually)

Asset types:
CREATURE BUILDING VEHICLE UFO ADVENTURE

Returns <status>0</status> if nothing is found or the query is invalid.
Returns 500 if the query is missing (//).
Ignores asset type if the requested one doesn't exist.
The maximum length is 500 assets per request.
Note that all the non-ASCII symbols will be replaced with ? in the response.

ATOM Feeds /atom/news

Get Spore News feed.

/atom/assets/user/<Username>

Get a feed of all the assets for the user. Asset name, description, type, creation date, PNG, and XML links are included.

Returns 404 if the username is invalid.

/atom/events/user/<Username>

Get a feed of recent events for the user.

Returns 500 if the username is invalid.
The maximum count of events is 20.
The maximum age of events is 1 month.

/atom/events/asset/<AssetId>

Get a feed of recent events for given asset id.

Returns an empty feed if the asset ID is invalid.
The maximum count of events is 20.

/atom/sporecast/<SporecastId>

Get a feed of all the assets in a sporecast, the date they were added, and links to PNG and XML.

Returns 404 if the sporecast ID is invalid.

/atom/assets/view/<ViewType>/<StartIndex>/<Length>

List creations for a given view.

View types:
TOP_RATED TOP_RATED_NEW NEWEST OLDEST FEATURED MAXIS_MADE RANDOM CUTE_AND_CREEPY TOP_RATED THERESA_VISION ALL

Returns 500 if the requested view doesn't exist.
The maximum length is 20 assets per request.

Internal

URL Method Form Data Comments
Flash Widget /view/user-thumbnail-count/<UserID>/<StartIndex>/<Length> GET

Used for a personal Flash widget, which can be grabbed on this page: http://www.spore.com/view/tools/widget

Returns an XML with a user tagline and a list of assets with their IDs, names, and thumbnail links.
The widget itself sends only /0/100 requests, although this endpoint has no length limit.

DWR Interface W.I.P. POST W.I.P. Should be researched in the future.

Tools

  • SporeTools - a simple collection of tools for Spore written in TypeScript. Includes DWR API client.
  • Spore PNG Downloader - a simple CLI app that downloads all creations by a specific user or in a specific feed (only 128x128 thumbnails).
  • sporeget - a Docker image with CLI utility, saves the creations into .warc files using wget-lua with all the additional data available through GET.
  • spore_id_gatherer - a Rust code that brutes asset IDs that have existing thumbnails in the filestore.

References