node package manager
Stop wasting time. Easily manage code sharing in your team. Create a free org »

datapackage-query

DataPackage Query

NPM

Opens datapackage.json and contained resource.csv files and performs various search queries on the contents.

npm install datapackage-query

Getting Started

Include package and perform a basic query with arguments. In this case the arguments are the type key and search

var Query = require('datapackage-query')
 
var arguments = { country: 'SY', 'search': 'DarkCo' }
 
Query.Grow('/path/to/your/datapackage.json', function(schema) {
  Query.Twirl('/path/to/datapackage/', schema.resources[0], arguments, function(csv_to_json_data) {
    // use your data for good :)
   })
})

Arguments

search filters results by wild card search term specified

key filters results by "key" in a datapackage's schema to the specified value of query

Examples

Here is an example of datapackage-query being used to power digitalfreedom.io website which creates a REST API using ConjurorAPI which exposes the data through the Hapi.js webserver.

Example: retrieve all surveillance vendors based in Germany:

curl "https://digitalfreedom.io/api/vendors?country=DE" | python -m json.tool

Example: retrieve all targeted attacks related to Syria that have employed the DarkComet RAT:

curl "https://digitalfreedom.io/api/targetedthreats?country=SY&family=DarkCo" | python -m json.tool
curl "https://digitalfreedom.io/api/vendors?country=DE&search=Trojan" | python -m json.tool

REST API Query Result

$ curl https://digitalfreedom.io/api/targetedthreats | python -m json.tool
{
    "description": "Targeted attacks related to civil society",
    "homepage": "",
    "license": "PDDL-1.0",
    "name": "data-targetedthreats",
    "repository": "https://github.com/digitalfreedom/data-targetedthreats.git",
    "result": [
        {
            "c2": "213.55.99.74",
            "country": "ET",
            "date": "2012-01-01",
            "family": "FinSpy",
            "md5": "8ae2febe04102450fdbc26a38037c82b",
            "reference": "https://citizenlab.org/2013/03/you-only-click-twice-finfishers-global-proliferation-2/",
            "target": "opposition"
        },
        {
            "c2": "46.4.69.25",
            "country": "ET",
            "date": "2013-12-01",
            "family": "RCS",
            "md5": "53a9e1b59ff37cc2aeff0391cc546201",
            "reference": "https://citizenlab.org/2014/02/hacking-team-targeting-ethiopian-journalists/",
            "target": "journalist"
        },
        ...
    ],
    "status": "success",
    "title": "Targeted Threats",
    "version": "0.1.0"
}