npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

signals-api

v1.0.77

Published

Signals API

Downloads

92

Readme

Signals Node JS API

Quick Start

Install Signals API

$ npm install signals-api

Get API Credential

  1. Create an API key in the account info panel. The API key has the same user groups as the owner.
  2. Download the API key.

Warning! It's your resposibility to protect the credential. A json with a complete credential will be pasted to your clipboard.

NodeJS has a easy way to load json.

module.exports={/*your credential here*/} // load json with require

If you want to use the command line, save the credential to .signalsrc under your working folder.

Create API instance

Save the credential to a json file and import it into your NodeJS code.

// import signals api
var Signals = require('signals-api').Signals;
// load your credential
var kAPPCredential = require('./appCredential');
// if region is undefined, then it is defaulted to en
var region = 'en'
var api = Signals(kAPPCredential,'en');
// do something with the api ...

Replace 'en' with 'zh' if you are using china node

Install Signals Command Line Tool

Command line tool is no longer included in the signals-api, use signals-cli instead

$ npm install -g signals-cli

Job Configuration

Job configuration tells Signals how to process the data. The most important part is the params which define the data type of each column in the csv file. You have to assign an array of column names to each index.

{
	"file_encoding": "utf-8", // encoding
	"params": {

		// map your header fields

			//Text Analysis
			"text_index": [ ... text columns ],	// multi value, put all your text fields in this array

			//Contributors
			"user_index": [ ... user id column ], // only support 1 user field now
			"user_image_index": [ ... user image src columns ], // 1 user image field, need to map "user_index" too

			// Geo Info, use related fields together, the more detailed fieilds you put in, the more accurate and efficient our engine will be
			"geo_index.unknown" : [ ... general address columns ],

			"geo_index.global": [ ... country name columns ]
			"geo_index.subglobal": [ ... state/provices name columns ]
			"geo_index.local": [ ... city columns ],		 
			"geo_index.sublocal": [ ... street columns ],

			"geo_index.postcode": [ ... postcode columns ],

			"geo_index.latitude": [ ... latitude columns ],
			"geo_index.longitude": [ ... longitude columns ],

			"geo_index.latitude_longitude": [ ... latitude_longitude columns, ex: "lat,lon" ],
			"geo_index.longitude_latitude": [ ... longitude_latitude columns, ex: "lon,lat" ],


			// Date info, the more detailed fieilds you put in, the more accurate and efficient our engine will be
			"date_index.unknown": [ ... general date columns ],

			"date_index.year": [ ... year columns ],
			"date_index.month": [ ... month columns ],
			"date_index.day": [ ... day of month columns ],

			"date_index.timestamp": [ ... epoch timestamp (UTC-0) in milliseconds columns ], // use timestamp for Excel files

		// general information

			"user_timezone": -4, // time zone offset, user current timezone
			"user_emails": [ ...array of emails that will be notified after analysis finished ],



				/* looking at specific languages, optional
			 	if your documents are all in the same language
					"run_language_detection":false,
					"default_language": "zh", // will increse accuracy and speed of your analysis
				else
					"run_language_detection": true,
					"filter_language": [... optional, only analysis on these languages, ex : 'en','zh','ja' ],
				*/

		// customize engine

			"sentimentlists": [ ... array of your customized sentiment list, { "fid": 1234567, "version": 1} ],
			"stopdocslists": [ ... array of your customized junk and feedback list, { "fid": 1234567, "version": 1} ],
			"stopwordslists": [ ... array of your customized stop words list, { "fid": 1234567, "version": 1} ],
			"tokenslists": [ ... array of your customized chinese tokens list, { "fid": 1234567, "version": 1} ],

			"taxonomies": [ ... // tag your documents with selected taxonomy
			{ "label": [... Optional, leave empty array, thi is an array of the labels in the taxonomy hierarcy,
				if you only want to tag a subtree of your taxonomy, input the path to your desired label ],
			"model" : { "fid": 123456789, "version": 1} ],

	},
	"meta": {
		"name": "API test small_lulu.csv 2016-6-24", // analysis name
		"source": "csv", // data format csv or xlsx
		"description": "Descrption of your analysis", // string
	}
}

Examples

List finished jobs

// import signals api
var Signals = require('signals-api');
// load your credential
var kAPPCredential = require('./appCredential');
var api = new Signals(kAPPCredential,'en');
// list all finished jobs
api.getJobStatus({
	pageIndex: 0,
	pageSize: 25,
	sortBy: 'time',
	sortOrder: -1,
	filter: {current:1,['status.code']:40}
}, function ( error, profiles, response) {
	if (profiles && profiles.items) {
		profiles.items.forEach(function (p) {
			var name = p.name;
			var fid = p.fid;
			var statusCode = p.status.code;
			var detail = p.status.detail;
			console.log({
				name: name,
				fid: fid,
				statusCode: statusCode,
				detail: detail
			});
		});
	}
});

List running jobs

// import signals api
var Signals = require('signals-api');
// load your credential
var kAPPCredential = require('./appCredential');
var api = new Signals(kAPPCredential,'en');
// list all finished jobs
api.getJobStatus({
	pageIndex: 0,
	pageSize: 25,
	sortBy: 'time',
	sortOrder: -1,
	filter: {['status.code']:{['$lt']:40}}
}, function ( error, profiles, response ) {
	if (profiles && profiles.items) {
		profiles.items.forEach(function (p) {
			var name = p.name;
			var fid = p.fid;
			var statusCode = p.status.code;
			var detail = p.status.detail;
			console.log({
				name: name,
				fid: fid,
				statusCode: statusCode,
				detail: detail
			});
		});
	}
});

Get a specific job

You need a job id to locate a specific job.
Job ids can be found in the response of creating a new job or the previous job status calls.
// import signals api
var Signals = require('signals-api');
// load your credential
var kAPPCredential = require('./appCredential');
var api = new Signals(kAPPCredential,'en');
signals.job(args.jobId,function( error, config, response ) {
	console.log(config);
});

Command Line

$ signals -job <job id>

Create a new job

You need a CSV data and a job configuration to create a job.
The job configuration tells Signals how to process the data in the csv and provides initial meta data for the job.
Check out more detailed job configuration/parameters that you can use in the "Job Configuration" section.
// import signals api
var Signals = require('signals-api');
// load your credential
var kAPPCredential = require('./appCredential');
var api = new Signals(kAPPCredential,'en');
// create a new job
var job = api.job();
job.config({
	"file_encoding": "utf-8",
	"params": {
		"text_index": ["text"],
		"user_index": [],
		"user_image_index": [],
		"date_index.unknown": ["date"],
		"user_timezone": -4,
		"geo_index.unknown": ["location"]
	},
	// "run_language_detection":true
	"meta": {
		"name": "API test small_lulu.csv 2016-6-24",
		"source": "csv"
	}
});
// upload data
var fs = require('fs');
job.uploadData(fs.createReadStream('../../samples/small_lulu.csv'), function ( error, body, response ) {
	console.log({ fid: job.fid() });
});

Command Line

$ signals submit -config <job configuration in json> -data <csv file>

Delete a job

// import signals api
var Signals = require('signals-api');
// load your credential
var kAPPCredential = require('./appCredential');
var api = new Signals(kAPPCredential,'en');
var jobId = '' /*job id*/;
api.deleteJob(jobId, function( error, body,response ) {
	if( response.success ) {
		console.log('Job deleted');
	}
});

Command Line

$ signals delete -job <job id>

Create a group

// import signals api
var Signals = require('signals-api');
// load your credential
var kAPPCredential = require('./appCredential');
var api = new Signals(kAPPCredential,'en');
api.createGroup( name, meta, function( error, body,response ) {
	if( response.success ) {
		console.log('group created');
		var groupId = body.payload._id;
		// do something with the id
	}
});

Delete a group

// import signals api
var Signals = require('signals-api');
// load your credential
var kAPPCredential = require('./appCredential');
var api = new Signals(kAPPCredential,'en');
var groupId = /* your group id */
api.deleteGroup( groupId, function( error, body,response ) {
	if( response.success ) {
		console.log('group deleted');
	}
});

Update a group

// import signals api
var Signals = require('signals-api');
// load your credential
var kAPPCredential = require('./appCredential');
var api = new Signals(kAPPCredential,'en');
var groupId = /* your group id */
api.updateGroup( groupId, { name: 'New Name', meta: { /* any meta field*/ } }, function( error, body,response ) {
	if( response.success ) {
		console.log('group updated');
	}
});

Get a group detail

// import signals api
var Signals = require('signals-api');
// load your credential
var kAPPCredential = require('./appCredential');
var api = new Signals(kAPPCredential,'en');
var groupId = /* your group id */
api.getGroup( groupId, function( error, body,response ) {
	if( response.success ) {
		var group = body.payload;
		/*do something with the detail*/
	}
});

Change access level for a user in the group

// import signals api
var Signals = require('signals-api');
// load your credential
var kAPPCredential = require('./appCredential');
var api = new Signals(kAPPCredential,'en');
var groupId = /* your group id */, userId = /*Your user id*/, acessLevel = /*1~4*/
api.changeUserAccess( groupId, userId, accessLevel, function( error, body,response ) {
	if( response.success ) {
		// access level changed	
	}
});

Share relational object with a user/group

// import signals api
var Signals = require('signals-api');
// load your credential
var kAPPCredential = require('./appCredential');
var api = new Signals(kAPPCredential,'en');
var fid = /* object fid */, type = /* relational object type dashboards,jobs,streams...	*/
var groupId = /* your group/user id */, acessLevel = /*1~4*/
api.shareWith( fid, type, groupId, accessLevel, function( error, body,response ) {
	if( response.success ) {
		// access level changed	
	}
});