codebits
v1.0.0
Published
codebits.eu API module wrapper
Downloads
14
Maintainers
Readme
Codebits API Node.js Module Wrapper
This is the Codebits API (https://codebits.eu/s/api) Node.js Module Wrapper to speed up for development during that 72 hour straight hackathon we know and love!
Badgers
![Gitter](https://badges.gitter.im/Join Chat.svg)
Installation
$ npm install codebits
Usage
var codebits = require('codebits');
codebits.auth.logIn('USERNAME', 'PASSWORD', function (err, token){
// codebits module will cache the token
codebits.users.getUserbyID('USERID', function(err, user){
console.log(user);
});
});
// but if you want to use another auth token, you can
codebits.users.getUserbyID('USERID', anotherToken, function(err, user){
console.log(user);
});
Disclaimer
This module was built in a very quick 'hacky' manner, it has tests, which is a good thing, but it is not bullet proof, if you find any bug or a better way to do things, we accept happily pull requests.
Big thanks to axfcampos who liked the idea and offered his time to implement several of the functionalities.
Table of Contents
- Auth
- Badges
- Bots
- Calendar
- Call for Talks
- Comments
requires auth token
- Projects
- Search
requires auth token
- Users
- Other Notes
Auth
logIn
Creates a session token that is requested by calls that need auth
call:
codebits.auth.logIn('USERNAME', 'PASSWORD', function (err, token){
// token is a string
});
Badges
listBadges
List of all the existing badges
codebits.badges.listBadges(function (err, reply){
/* each reply array elem:
{
"id": "string", //badge id
"img": "string", //img url
"title": "string", //badge title
"description": "string", //badge description
"usercount": "string" //number of users who have this badge
}
*/
});
getBadgeUsers
List of all the users who have a certain badge
codebits.badges.getBadgeUsers('BADGE_ID', function(err, reply){
/* reply is an array, where each element
{
"uid": "string", //user id
"name": "string", //user name
"nick": "string", //user nick
"proofurl": "string",
"md5mail": "string"
}
*/
});
redeemBadges
[Requires authentication!]
Redeem a badge through a badge code
codebits.badges.redeemBadges('BADGE_CODE', function (err, reply){
// if successful reply will be an object with success code and msg
// if not, error code and reason
});
Bots
getBodyParts
Returns the body parts you can play with to build your bot.
codebits.bots.getBodyParts( function (err, reply){
/* body elem contains array for body parts
{
"body":
[{
"id": "01",
"picker": "\/builder\/avatar_images\/body\/picker\/t-body-01.png",
"file": "\/builder\/avatar_images\/body\/composer\/body-01.png"
},
{ .... }, ....
]
}
*/
});
getUserBot
Returns the bot structure for a certain user
codebits.bots.getUserBot('USER_ID', function (err, reply){
/* example reply object:
{
"bgcolor":0,
"grad":0,
"body":"04",
"eyes":"07",
"mouth":"05",
"legs":"06",
"head":"01",
"arms":"17",
"balloon":false,
"botfile":"\/bots\/39f0e732e0d976c486573f53c687cc9d",
"comments_token":"2a680f5a39bf2e59b60e123cb22fb29611317522"
}
*/
});
makeBot
Returns the bot image. Request format as follows (example):
var opts = {
body: '01',
bgcolor: null,
grad: '03',
eyes: '04',
mouth: '05',
legs: '06',
head: '07',
arms: '08',
balloon: 'hello world! :-)',
file: '/path/to/save/returned/image.png'
}
Each field has the exact ID (with leading zeros) from getBodyParts.
If you don't want a certain body part to be rendered, use null
for the ID. The balloon is optional.
If file:
field is null it defaults to /tmp/bot.png
.
codebits.bots.makeBot(opts, function (err, res, body){
//the img will be saved to the path, res and body are in original form
});
setBot
[requires authentication!]
Sets the bot of the authenticated user.
Format for opts
field is the same as makeBot minus the file
field.
Returns a success/unsuccess message.
//_token is optional
codebits.bots.setBot(opts, _token, function (err, reply){
/* reply success example:
{ result: 1, user: '3949', msg: 'bot set' } //success
*/
});
Calendar
Returns this year's codebits calendar with detailed information.
codebits.calendar.getCalendar( function (err, result){
/*
Calendar is an array
check the full object at: https://services.sapo.pt/Codebits/calendar
*/
});
Call for Talks
listSubmissions
[authentication optional!]
Returns the list of the call for talks submissions for this year. Authentication is optional, returns the user thumb option under 'rated', if provided.
codebits.callfortalks.listSubmissions( function (err, reply){
/* an array where each object is a talk:
{
id: "string",
title: "string",
description: "string",
regdate: "2013-10-25 13:57:08",
up: 'string", //n votes up
down: "string", //n votes down
lang: "en",
user: "string",
userid: "string",
rated: "string",
approved: 1, //if approved
comments_token: "string" //useful to submit comments
}
*/
});
voteTalkUp
[authentication required!]
Vote up a proposed talk by its id.
//_token is optional
codebits.callfortalks.voteTalkUp('TALK_ID', _token, function (err, reply){
/*
Confirmation object returns the same talk id
{ talk: '100', thumbs: 'up' }
*/
});
voteTalkDown
[authentication required!]
Vote down a proposed talk by its id.
//_token is optional
codebits.callfortalks.voteTalkDown('TALK_ID', _token, function (err, reply){
/*
Confirmation object returns the same talk id
{ talk: '100', thumbs: 'down' }
*/
});
Comments
[requires authentication!]
Posts a new comment on a certain thread identified by the comment_token. Some calls (ie: listSubmission) will provide you with a comments_token field you can use here.
var opts = {
comment_token: '1234asdf1234qwerty',
comment: 'Hello Codebits World!',
subect: 'My Hello Message' //optional
token: authtoken //optional, If not submitted our code will search for it ˆ_ˆ
};
codebits.comment.postComment(opts, function (err, reply){
/*
{ result: 1, msg: 'comment posted' }
*/
});
Projects
listProjects
[requires authentication!]
Returns the list of submitted projects for this year's competition.
//_token is optional
codebits.projects.listProjects(_token, function (err, reply){
/*
returns an array where each object is a project
*/
});
getProjectInfo
[requires authentication!}
Returns information about a specfic project.
//_token is optional
codebits.ptojects.getProjectInfo('PROJECT_ID', _token, function (err, reply){
/*
reply contains object with project info
*/
});
getCurrentVotes
Returns information about the number of votes for the project being voted at the project's presentation session
codebits.projects.getCurrentVotes( function (err, reply){
/* //example reply obj
{ project: '353', yes: 63, no: 56 }
*/
});
voteCurrentProject
[requires authentication!]
Votes for the current project being presented. 1 for yes (liked it), 0 for no.
//_token is optional
codebits.projects.voteCurrentProject('1', _token, function (err, reply){
/* //confirmation reply object
{ result: 1, project: '353' }
*/
});
Search
[Requires authentication]
Search this year's edition registered users database
//_token is optional
codebits.search.searchByName('nick', _token, function (err, reply){
/* //example reply for nick=celso
[ { id: '1119',
nick: 'Zed_Blade',
name: 'Celso Bem dos Santos',
md5mail: '44c4eb5469934ceebfffe940d72f9521' },
{ id: '1',
nick: 'celso',
name: 'Celso Martinho',
md5mail: '39f0e732e0d976c486573f53c687cc9d' } ]
*/
});
Users
getUserByID
[requires authentication!]
Returns basic user information.
//_token is optional
codebits.users.getUserbyID('ID', _token, function (err, reply){
/*
{ id: 'string',
nick: 'string',
avatar: 'string',
twitter: 'string',
name: 'string',
md5mail: '39f0e732e0d976c486573f53c687cc9d',
checkin_date: 0,
karma: '143',
bio: 'the users bio',
blog: 'string'
coderep: 'string'
status: 'accepted',
badges:
[ '38',
'10' ],
skills:
[ 'api',
'design',
'web' ] }
*/
});
getUserbyNick
[requires authentication!]
Same as above, uses nick instead of ID.
//_token is optional
codebits.users.getUserbyNick('NICK', _token, function (err, reply){
/*
Same as above!
*/
});
getUserFriends
[requires authentication!]
Returns the list of the user's friends. A word about the status: accepted is accepted by both friends, requested is awaiting acceptance on your side, pending is pending acceptance on your friend's side.
//_token is optional
codebits.users.getUserFriends('ID', _token, function (err, reply){
/*
An array of the same objects returned by getUserbyID/Nick
*/
});
addUserAsFriend
[requires authentication!]
Adds or confirms a user as your friend. Requires confirmation at the other end.
//_token is optional
codebits.users.addUserAsFriend('ID', _token, function (err, reply){
/*
*/
});
rejectUserAsFriend
[requires authentication!]
Rejects a user as your friend. Deletes the pending request at the other end, if it exists.
//_token is optional
codebits.users.rejectUserAsFriend('ID', _token, function (err, reply){
/*
*/
});
listAcceptedUsers
[requires authentication!]
Returns the list of accepted users for this year's Codebits. You can filter the list by an optional 'skill'. The list of skills is: php perl ruby python erlang cc cocoa dotnet java javascript css api web embbeded mobile hardware microformats security sysadmin network desktop scala clojure design dbdesign nosql cooking processing max
//_token is optional
codebits.users.listAcceptedUsers('SKILL', _token, function (err, reply){
/*
*/
});
userFavSessions
[requires authentication!]
Returns the list of favorite calendar sessions for a user.
//_token is optional
codebits.users.userFavSessions('ID', _token, function (err, reply){
/*
*/
});
Other notes:
The correct API endpoint for user info by nick is not /user
, it is /nick
instead