Giter VIP home page Giter VIP logo

devplayground's Introduction

30 Days of API - API Playground.

IBM AWS BUS GOOGLE YELP ARCHIVE GIPHY BPM TMDB

This Web-App will include a library of API samples - to make it easier when working with the varios API's available.

Including Code Samples, Demo Sites, and video tutorials.

Below are examples for getting started with the different API's:

Emotional API - IBM WATSON - AUTH

const baseem = require('baseem');
const PersonalityInsightsV3 = require('watson-developer-cloud/personality-insights/v3');
const personality_insights = new PersonalityInsightsV3({
  username: process.env.IBM_USERNAME,
  password: process.env.IBM_PASSWORD,
  version_date: process.env.IBM_VERSIONDATE,
  headers: {
    'X-Watson-Learning-Opt-Out': 'true'
  }
});

app.post('/', (req,res) => {
  var text = req.body.text;
  personality_insights.profile(
  {text: text},
  function (err, response) {
    if (err)
      res.status(404).json({error: err});
    else
      res.json(response);
  });
});

Conversation API - IBM WATSON - AUTH

const ConversationV1 = require('watson-developer-cloud/conversation/v1');
const conversation = new ConversationV1(config.conversParams);
const workspace_id = process.env.IBM_WORKSPACEID;
const baseem = require('baseem');

app.post('/', (req,res) => {
  var msg = req.body.msg;
  conversation.message(
    {
      input: { text: msg },
      workspace_id: workspace_id
    },
    function(err, response) {
      if (err) {
        console.error(err);
      } else {
        var watsonResponse = response.output.text[0];
        res.json(response)
      }
    }
  );
})

Translate API - GOOGLE - AUTH

app.post('/', (req, res) => {
  var q = req.body.q;
  var options = { method: 'POST',
   url: 'https://translation.googleapis.com/language/translate/v2',
   form:
     { key: process.env.API_KEY,
       q: q,
       target: 'en' } };
  request(options, function (error, response, body) {
    if (error) throw new Error(error);
    res.send(body);
  });
})

Yelp API - YELP - AUTH

const yelp        = require('yelp-fusion');
const API_KEY      = process.env.YELP_APIKEY;
const client      = yelp.client(API_KEY);
const yelp = require('yelp-fusion');
const API_KEY = process.env.YELP_APIKEY;
const client = yelp.client(API_KEY);
const baseem = require('baseem');

app.get('/:id', (req, res) => {
  const zipcode = req.params.id;

  const searchRequest = {
    term: 'food',
    limit: 10,
    radius: 20000,
    location: zipcode
  };
    client.search(searchRequest)
    .then(response => {
      res.json(response.jsonBody.businesses)
    }).catch(e => {
      console.log(e);
    });
})

TMDB - The Movie Database - AUTH

 getFilm() {
  const API_KEY = process.env.TMDB_API_KEY;
  let query = 'batman';
    const url = `https://api.themoviedb.org/3/search/movie?api_key=${API_KEY}&language=en-US&page=1&include_adult=false&query=${query}`;

    axios.get(url)
    .then(data => {
      console.log(data);
    }).catch(err => {
    console.log('error');
    })
  }

DaBus API - Honolulu - AUTH

  • The api does not have json :(, you can use this npm package to convert xml to json:
const parseString = require('fast-xml2js').parseString;
const busURL = `http://api.thebus.org/arrivals/?key=${API_KEY}&stop=`;
const baseem = require('baseem');

app.get('/:id', (req,res) => {
  var all = []
  var id = req.params.id;
  axios(busURL+id).then((data) => {
    var xml = data.data;
    parseString(xml, function (err, result) {
    var body = result.stopTimes.arrival || [];
    var stop = result.stopTimes.stop;
    var x = body.map((elem,i) => {
      var local = {};
      local.stop = stop[0];
      local.id = elem.id[0];
      local.trip = elem.trip[0];
      local.route = elem.route[0];
      local.headsign = elem.headsign[0];
      local.vehicle = elem.vehicle[0];
      local.direction = elem.direction[0];
      local.stopTime = elem.stopTime[0];
      local.date = elem.date[0];
      local.canceled = parseInt(elem.canceled[0]);
      local.lat = elem.latitude[0];
      local.lng = elem.longitude[0];
      local.shape = elem.shape[0];
      all.push(local);
    })
    res.json(all)
  });
  }).catch(err =>{
    console.log(baseem('error'))
  })
})

Archive.org API - NO AUTH

app.get('/:id', (req, res) => {
  let rows = req.params.id;
  let mediatype = 'audio';
  let output = 'json';
  let archiveUrl = `https://archive.org/advancedsearch.php?q=subject%3A%22librivox%22+AND+mediatype%3A${mediatype}&fl[]=avg_rating&fl[]=publisher&fl[]=description&fl[]=downloads&fl[]=identifier&fl[]=mediatype&fl[]=num_reviews&fl[]=title&sort[]=&sort[]=&sort[]=&rows=${rows}&page=1&output=${output}`
  axios.get(archiveUrl)
  .then(elem => {
    res.json(elem.data.response.docs);
  })
})

GIFS! - Giphy API - AUTH

app.get('/:id', (req, res) => {
  var query = req.params.id;
  var url = `http://api.giphy.com/v1/gifs/search?q=random+${query}&api_key=${apikey}`;
  axios.get(url)
  .then(obj => {
    res.json(obj.data);
  }).catch(err => {
    res.json('error')
  })
})

Song Search - BPM API - AUTH

app.get('/:id', (req, res) => {
  let query = req.params.id;
  let url = `https://api.getsongbpm.com/search/?api_key=${BPM_KEY}&type=song&lookup=${query}`
  axios.get(url)
  .then(data => {
    res.json(data.data.search);
  }).catch(err => {
    res.json('error');
  })
})

Image Emotional Recognition - AWS Rekognition API - AUTH

  • NPM Packages that help:
const multer = require('multer');
const path = require('path');
const baseem = require('baseem');
const fs = require('fs-extra');
const AWS = require('aws-sdk');
const rekognition = new AWS.Rekognition({region: config.region}); //"us-east-1"
  • Save the photo in a local folder
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'routes/')
  },
  filename: function (req, file, cb) {
    cb(null, 'bat' + path.extname(file.originalname))
  }
});
const upload = multer({ storage: storage });
  • Create the Params
function getImage(){
  const imagePath = `./bat.jpg`;
  const bitmap = fs.readFileSync(imagePath);
  const params = {
      Image: {
        Bytes: bitmap
      },
      MaxLabels: 10,
      MinConfidence: 50.0
    };
  return params
}
app.post('/recognition', upload.single('image'), (req, res) => {
  let params = getImage();
  rekognition.detectLabels(params, function(err, data) {
    if (err) {
      console.log(baseem('error'));
    }else {
      console.log(data);
      res.json(data);
    }
  });
});

Image Label Detection - AWS Rekognition API - AUTH

  • Image submitted for analysis

  • Code for analysis - nodeJs
const AWS = require('aws-sdk');
const baseem = require('baseem');
const rekognition = new AWS.Rekognition({region: "us-east-1"});

var params = {
  Image: {
   S3Object: {
    Bucket: "S3 BUCKET_NAME",
    Name: "ship.jpg"
   }
  },
  MaxLabels: 123,
  MinConfidence: 40
 };
 rekognition.detectLabels(params, function(err, data) {
   if (err) console.log(err, err.stack); // an error occurred
   else     console.log(data);           // successful response
 });
  • Analysis Response - adjustment on Confidence set lower for testing:
 { Labels:
   [ { Name: 'Boat', Confidence: 99.26506042480469 },
     { Name: 'Transportation', Confidence: 99.26506042480469 },
     { Name: 'Vessel', Confidence: 99.26506042480469 },
     { Name: 'Watercraft', Confidence: 99.26506042480469 },
     { Name: 'Ferry', Confidence: 94.4769287109375 },
     { Name: 'Yacht', Confidence: 69.96138000488281 },
     { Name: 'Dock', Confidence: 53.720726013183594 },
     { Name: 'Pier', Confidence: 53.720726013183594 } ],
  OrientationCorrection: 'ROTATE_0' }

Historical Weather API - DarkSky Dark

const express = require('express');
const app = express();
const baseem = require('baseem');
const DarkSky = require('dark-sky')
const darksky = new DarkSky('process.env.API_KEY');
const beaufort = require('beaufort')
const options = {unit: 'kmh', getName: true};

const degToCompass = (val_num) => {
    let num = parseInt(val_num);
    let val = Math.floor((num / 22.5) + 0.5);
    let arr = ["N", "NNE", "NE", "ENE", "E", "ESE", "SE", "SSE", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW"];
    return arr[(val % 16)];
}

// sample api request -> http://localhost:9000/2017/3/21.308714/-157.808782/8
app.get('/:year/:month/:lat/:lng/:hours', (req, res) => {
  let year = req.params.year;
  let month = req.params.month;
  let lat = req.params.lat;
  let lng = req.params.lng;
  let hours = req.params.hours; // ex. 8 will respond with 0:00am - 08:00am
  month === '2'
  ? count = 28
  : count = 30

  for(let i = 1; i < count; i++){ // run based off days in month
      darksky
      .latitude(lat) // set location lat
      .longitude(lng) // set location lng
      .time(`${year}-${month}-${i}`) // date based off api call
      .units('ca') // kph - mph available - check docs
      .get() // make request
      .then(data=>{
        let num = 0;
        data.hourly.data.map(elem => {
          num ++;
          let timeConverted = new Date(elem.time*1000).toString();
          let y = new Date(timeConverted);
          let z = y.getHours();
          if(parseInt(z) <= hours){
            let local = {
              hour: `Hour: ${num}`,
              time: timeConverted,
              windSpeed: elem.windSpeed,
              beaufort: beaufort(parseInt(elem.windSpeed), options),
              units: 'KPH',
              windBearing: degToCompass(elem.windBearing)
            }
            console.log(local);
          }
        })
      })
      .catch(console.log);
  }
  res.json(baseem('Check your console - Data will be there'));
})

app.listen(9000);
  • Output Example:
{ hour: 'Hour: 24',
  time: 983696400,
  windSpeed: 16.8,
  units: 'KPH',
  windBearing: 70 }

Video Analysis with AWS Rekognition - AWS Rekognition API - AUTH

const express = require('express');
const app = express();
const baseem = require('baseem');
const AWS = require('aws-sdk'); // NPM Package - makes life easier
const rekognition = new AWS.Rekognition({region: "us-east-1"});

// FYI: This will work if you have used AWS-CLI and configured your key/secret key

let params = {
  Video: { /* required */
    S3Object: {
      Bucket: 'bucket_name', // s3 bucket name
      Name: 'video_name.mp4', // video name case sensitive
    }
  },
  ClientRequestToken: 'request_name', // any name you prefer
  MinConfidence: 90,
  NotificationChannel: {
    RoleArn: 'role_arn', // found on AWS IAM Dashboard
    SNSTopicArn: `SNSTopicArn` // found on AWS Service: SNS
  }
};

/* RUN FIRST to get job ID */
rekognition.startLabelDetection(params, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
});

let jobID = "from startLabelDetection response";

let params1 = {
  JobId: jobID, /* required */
  MaxResults: 100, // MAX 1000
  NextToken: 'token', // returned if more labels are found
  SortBy: "TIMESTAMP" // NAME
};

rekognition.getLabelDetection(params1, function(err, data) {
  if (err) console.log(err, err.stack); // an error occurred
  else{
    res.json(data.Labels);
  };
});

This project was bootstrapped with Create React App.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.