///
///
import xml2js = require('xml2js');
var unirest = require('unirest');
module eventful {
export interface searchEventOptions{
location: string;
date : string;
category : string;
within : string;
units : string;
count_only : boolean;
sort_order : string;
sort_direction : string;
page_size : number;
page_number : number;
image_sizes : string;
languages : number;
mature : string;
include : string;
}
export interface searchEventResults{
total_items : number;
page_size : number;
page_count : number;
page_number : number;
page_items : number;
first_item : number;
last_item : number;
search_time : number;
//refer to eventful doc on content body
//http://api.eventful.com/docs/events/search
events : any[];
}
export interface categoryResult{
id: string;
name: string;
}
export class Client{
private app_key : string;
private base_url : string;
constructor(key : string){
this.app_key = key;
this.base_url = "http://api.eventful.com/rest/";
}
public searchEvents(options : searchEventOptions,
callback : (err: any, data: searchEventResults) => void)
{
var request = this.base_url + 'events/search?app_key='+ this.app_key;
for(var i in options){
request += '&';
request += i + '=' + options[i];
}
unirest.get(request, (response : any, err : any) => {
if(err){
return callback(err, null);
}
xml2js.parseString(response.body, {explicitArray : false}, (err: any, parsed: any) => {
if(err){
return callback(err, null);
}
return callback(null, parsed);
});
});
}
public listCategories(callback : (err: any, data: categoryResult[]) => void)
{
var request = this.base_url + '/categories/list?app_key='+ this.app_key;
unirest.get(request, (response: any, err: any) => {
if(err){
return callback(err, null);
}
xml2js.parseString(response.body, {explicitArray : false}, (err: any, parsed: any) => {
if(err){
return callback(err, null);
}
return callback(null, parsed.categories.category);
});
});
}
}
}
export = eventful;