Como pocos sabrán, hasta hace ya algunos años Sulake contaba con un Dev Center destinado a su juego "estrella" Habbo Hotel.
Este Dev Center fue clausurado tras la salida del
Game Center a comienzos del año 2014. En el se exponía una muy limitada API para que los usuarios con conocimientos en el área tuviesen
la posibilidad de desarrollar aplicaciones interactivas para el uso de los usuarios dentro del Hotel bajo el nombre de la compañía (Sulake) a cambio de recibir una remuneración económica por tu trabajo. Aplicaciones como Habbo Stories, Fast Food Habbo, Habbo Speedway encabezaban la lista de las decenas de juegos
desarrollados por estos usuarios, incluidos en el Game Center y por supuesto, en otras plataformas móviles como es el caso de
Android e iOS.
Indagando un poco por la red, me encuentro con una muy extraña y poco documentada API incluida en el nuevo Homepage de
Habbo Hotel Internacional (COM), por el momento solo he conseguido dos endpoint referentes a Esta API y la he ido documentando según los datos que he ido extrayendo de ella.
¿Curioso?, empezamos...
API:
URL: https://www.habbo.com/api/public/users (GET user data)
Parámetros:
- name (string) -> Habbo nombre
Petición:
GET
https://www.habbo.com/api/public/users?name={username}
Descripción: Información resumida del usuario.
Respuesta:
JSON
{
"uniqueId": (string),
"name": (string),
"figureString": (string),
"selectedBadges": [
{
"badgeIndex": (int),
"code": (string),
"name": (string),
"description": (string)
},
{
"badgeIndex": (int),
"code": (string),
"name": (string),
"description": (string)
}
// ...
],
"motto": (string),
"memberSince": (string),
"profileVisible": (bool)
}
- uniqueId (string) -> Identificador del usuario.
- name (string) -> Nombre del usuario.
- figureString (string) -> Avatar string image del usuario.
- selectedBadges (object) -> Placas seleccionadas (Max. 5).
- selectedBadges.badgeIndex (int) -> Identificador de posición de la placa en el perfil.
- selectedBadges.code (string) -> Código de la placa.
- selectedBadges.name (string) -> Nombre de la placa.
- selectedBadges.description (string) -> Descripción de la placa.
- motto (string) -> Misión del usuario.
- memberSince (string) -> (UTC time) Fecha de creación del personaje.
- profileVisible (bool) -> True si tiene el perfil visible.
Petición:
GET
https://www.habbo.com/api/public/users/{username.uniqueId}/profile
Descripción: Información más detallados del usuario.
Respuesta:
JSON
{
"user": {
"uniqueId": (string),
"name": (string),
"figureString": (string),
"selectedBadges": [
{
"badgeIndex": (int),
"code": (string),
"name": (string),
"description": (string)
},
{
"badgeIndex": (int),
"code": (string),
"name": (string),
"description": (string)
}
// ...
],
"motto": (string),
"memberSince": (string),
"profileVisible": (bool)
},
"friends": [
{
"name": (string),
"motto": (string),
"uniqueId": (string),
"figureString": (string)
},
{
"name": (string),
"motto": (string),
"uniqueId": (string),
"figureString": (string)
}
// ...
],
"groups": [
{
"id": (string),
"name": (string),
"description": (string),
"type": (string),
"badgeCode": (string),
"roomId": (string),
"primaryColour": (string),
"secondaryColour": (string),
"isAdmin": (bool)
},
{
"id": (string),
"name": (string),
"description": (string),
"type": (string),
"badgeCode": (string),
"roomId": (string),
"primaryColour": (string),
"secondaryColour": (string),
"isAdmin": (bool)
}
// ...
],
"rooms": [
{
"id": (string),
"name": (string),
"description": (string),
"ownerUniqueId": (string)
},
{
"id": (string),
"name": (string),
"description": (string),
"ownerUniqueId": (string)
}
// ...
],
"badges": [
{
"code": (string),
"name": (string),
"description": (string)
},
{
"code": (string),
"name": (string),
"description": (string)
}
// ...
]
}
- user (object) -> Datos del usuario.
- user.uniqueId (string) -> Identificador del usuario.
- user.name (string) -> Nombre del usuario.
- user.figureString (string) -> Avatar string image del usuario.
- user.selectedBadges (object) -> Placas seleccionadas (Max. 5).
- user.selectedBadges.badgeIndex (int) -> Identificador de posición de la placa en el perfil.
- user.selectedBadges.code (string) -> Código de la placa.
- user.selectedBadges.name (string) -> Nombre de la placa.
- user.selectedBadges.description (string) -> Descripción de la placa.
- user.motto (string) -> Misión del usuario.
- user.memberSince (string) -> (UTC time) Fecha de creación del personaje.
- user.profileVisible (bool) -> True si tiene el perfil visible.
- friends (object) -> Datos de los amigos.
- friends.name (string) -> Nombre del amigo.
- friends.motto (string) -> Misión del amigo.
- friends.uniqueId (string) -> Identificador del amigo.
- friends.figureString (string) -> Avatar string image del amigo.
- groups (object) -> Datos de los grupos.
- groups.id (string) -> Identificador del grupo.
- groups.name (string) -> Nombre del grupo.
- groups.description (string) -> Descripción del grupo.
- groups.type (string) -> Tipo del grupo (NORMAL | EXCLUSIVE)
- groups.badgeCode (string) -> Código de la placa del grupo.
- groups.roomId (string) -> Identificador de la sala del grupo.
- groups.primaryColour (string) -> Color HEX primario del grupo.
- groups.secondaryColour (string) -> Color HEX secundario del grupo.
- groups.isAdmin (bool) -> True si es administrador del grupo.
- rooms (object) -> Datos de las salas.
- rooms.id (string) -> Identificador de la sala.
- rooms.name (string) -> Nombre de la sala.
- rooms.description (string) -> Descripción de la sala.
- rooms.ownerUniqueId (string) -> Identificador del dueño de la sala.
- badges (int) -> Placas del usuario.
- badges.code (string) -> Código de la placa.
- badges.name (string) -> Nombre de la placa.
- badges.description (string) -> Descripción de la placa.
Otros endpoints:
[GET] https://www.habbo.com/api/public/users/{username.uniqueId}/badges
[GET] https://www.habbo.com/api/public/users/{username.uniqueId}/rooms
[GET] https://www.habbo.com/api/public/users/{username.uniqueId}/friends
[GET] https://www.habbo.com/api/public/users/{username.uniqueId}/groups
Request -> JSON
Nota de interés: Son creadas dos (2) cookies por cada petición.
Límites: Toda API tiene un límite de consultas cada cierto tiempo, desconozco por el momento el límite que esta posee.
Me tarde al rededor de 3 horas redactando esta documentación, la estaré actualizando a medida que vaya encontrando nuevas fuentes de datos.
Espero que les sea de utilidad, se que así será.
Un saludo.