# LIRI Bot
### Overview
In this assignment, you will make LIRI. LIRI is like iPhone’s SIRI. However, while SIRI is a Speech Interpretation and Recognition Interface, LIRI is a _Language_ Interpretation and Recognition Interface. LIRI will be a command line node app that takes in parameters and gives you back data.
### Before You Begin
1. LIRI will search Spotify for songs, Bands in Town for concerts, and OMDB for movies.
2. Make a new GitHub repository called liri-node-app and clone it to your computer.
3. To retrieve the data that will power this app, you’ll need to send requests using the `axios` package to the Bands in Town, Spotify and OMDB APIs. You’ll find these Node packages crucial for your assignment.
* [Node-Spotify-API](https://www.npmjs.com/package/node-spotify-api)
* [Axios](https://www.npmjs.com/package/axios)
* You’ll use Axios to grab data from the [OMDB API](http://www.omdbapi.com) and the [Bands In Town API](http://www.artists.bandsintown.com/bandsintown-api)
* [Moment](https://www.npmjs.com/package/moment)
* [DotEnv](https://www.npmjs.com/package/dotenv)
## Submission Guide
Create and use a standard GitHub repository. As this is a CLI App, it cannot be deployed to GitHub pages or Heroku. This time you’ll need to include screenshots, a GIF, and/or a video showing us that you have the app working with no bugs. You can include these screenshots/GIFs or a link to a video in a `README.md` file.
In order to meet the Employer Competitive standards and be ready to show your application to employers, the `README.md` file should meet the following criteria:
1. Clearly state the problem the app is trying to solve (i.e. what is it doing and why)
2. Give a high-level overview of how the app is organized
3. Give start-to-finish instructions on how to run the app
4. Include screenshots, gifs or videos of the app functioning
5. Contain a link to a deployed version of the app
6. Clearly list the technologies used in the app
7. State your role in the app development
Because screenshots (and well-written READMEs) are extremely important in the context of GitHub, this will be part of the grading in this assignment.
If you haven’t written a markdown file yet, [click here for a rundown](https://guides.github.com/features/mastering-markdown/), or just take a look at the raw file of these instructions.
### Commits
Having an active and healthy commit history on GitHub is important for your future job search. It is also extremely important for making sure your work is saved in your repository. If something breaks, committing often ensures you are able to go back to a working version of your code.
* Committing often is a signal to employers that you are actively working on your code and learning.
* We use the mantra commit early and often. This means that when you write code that works, add it and commit it!
* Numerous commits allow you to see how your app is progressing and give you a point to revert to if anything goes wrong.
* Be clear and descriptive in your commit messaging.
* When writing a commit message, avoid vague messages like “fixed.” Be descriptive so that you and anyone else looking at your repository knows what happened with each commit.
* We would like you to have well over 200 commits by graduation, so commit early and often!
### Submission on BCS
* Please submit the link to the Github Repository!
### Instructions
1. Navigate to the root of your project and run `npm init -y` this will initialize a `package.json` file for your project. The `package.json` file is required for installing third party npm packages and saving their version numbers. If you fail to initialize a `package.json` file, it will be troublesome, and at times almost impossible for anyone else to run your code after cloning your project.
2. Make a `.gitignore` file and add the following lines to it. This will tell git not to track these files, and thus they won’t be committed to Github.
“`
node_modules
.DS_Store
.env
“`
3. Make a JavaScript file named `keys.js`.
* Inside keys.js your file will look like this:
“`js
console.log(‘this is loaded’);
exports.spotify = {
id: process.env.SPOTIFY_ID,
secret: process.env.SPOTIFY_SECRET
};
“`
4. Next, create a file named `.env`, add the following to it, replacing the values with your API keys (no quotes) once you have them:
“`js
# Spotify API keys
SPOTIFY_ID=your-spotify-id
SPOTIFY_SECRET=your-spotify-secret
“`
* This file will be used by the `dotenv` package to set what are known as environment variables to the global `process.env` object in node. These are values that are meant to be specific to the computer that node is running on, and since we are gitignoring this file, they won’t be pushed to github keeping our API key information private.
* If someone wanted to clone your app from github and run it themselves, they would need to supply their own `.env` file for it to work.
5. Make a file called `random.txt`.
* Inside of `random.txt` put the following in with no extra characters or white space:
* spotify-this-song,”I Want it That Way”
6. Make a JavaScript file named `liri.js`.
7. At the top of the `liri.js` file, add code to read and set any environment variables with the dotenv package:
“`js
require(“dotenv”).config();
“`
8. Add the code required to import the `keys.js` file and store it in a variable.
“`js
var keys = require(“./keys.js”);
“`
* You should then be able to access your keys information like so
“`js
var spotify = new Spotify(keys.spotify);
“`
9. Make it so liri.js can take in one of the following commands:
* `concert-this`
* `spotify-this-song`
* `movie-this`
* `do-what-it-says`
### What Each Command Should Do
1. `node liri.js concert-this <artist/band name here>`
* This will search the Bands in Town Artist Events API (`”https://rest.bandsintown.com/artists/” + artist + “/events?app_id=codingbootcamp”`) for an artist and render the following information about each event to the terminal:
* Name of the venue
* Venue location
* Date of the Event (use moment to format this as “MM/DD/YYYY”)
* **Important**: There is no need to sign up for a Bands in Town `api_id` key. Use the `codingbootcamp` as your `app_id`. For example, the URL used to search for “Celine Dion” would look like the following:
* `https://rest.bandsintown.com/artists/celine+dion/events?app_id=codingbootcamp`
2. `node liri.js spotify-this-song ‘<song name here>’`
* This will show the following information about the song in your terminal/bash window
* Artist(s)
* The song’s name
* A preview link of the song from Spotify
* The album that the song is from
* If no song is provided then your program will default to “The Sign” by Ace of Base.
* You will utilize the [node-spotify-api](https://www.npmjs.com/package/node-spotify-api) package in order to retrieve song information from the Spotify API.
* The Spotify API requires you sign up as a developer to generate the necessary credentials. You can follow these steps in order to generate a **client id** and **client secret**:
* Step One: Visit <https://developer.spotify.com/my-applications/#!/>
* Step Two: Either login to your existing Spotify account or create a new one (a free account is fine) and log in.
* Step Three: Once logged in, navigate to <https://developer.spotify.com/my-applications/#!/applications/create> to register a new application to be used with the Spotify API. You can fill in whatever you’d like for these fields. When finished, click the “complete” button.
* Step Four: On the next screen, scroll down to where you see your client id and client secret. Copy these values down somewhere, you’ll need them to use the Spotify API and the [node-spotify-api package](https://www.npmjs.com/package/node-spotify-api).
3. `node liri.js movie-this ‘<movie name here>’`
* This will output the following information to your terminal/bash window:
“`
* Title of the movie.
* Year the movie came out.
* IMDB Rating of the movie.
* Rotten Tomatoes Rating of the movie.
* Country where the movie was produced.
* Language of the movie.
* Plot of the movie.
* Actors in the movie.
“`
* If the user doesn’t type a movie in, the program will output data for the movie ‘Mr. Nobody.’
* If you haven’t watched “Mr. Nobody,” then you should: <http://www.imdb.com/title/tt0485947/>
* It’s on Netflix!
* You’ll use the `axios` package to retrieve data from the OMDB API. Like all of the in-class activities, the OMDB API requires an API key. You may use `trilogy`.
4. `node liri.js do-what-it-says`
* Using the `fs` Node package, LIRI will take the text inside of random.txt and then use it to call one of LIRI’s commands.
* It should run `spotify-this-song` for “I Want it That Way,” as follows the text in `random.txt`.
* Edit the text in random.txt to test out the feature for movie-this and concert-this.
### BONUS
* In addition to logging the data to your terminal/bash window, output the data to a .txt file called `log.txt`.
* Make sure you append each command you run to the `log.txt` file.
* Do not overwrite your file each time you run a command.
### Reminder: Submission on BCS
* Please submit the link to the Github Repository!
– – –
### Minimum Requirements
Attempt to complete homework assignment as described in instructions. If unable to complete certain portions, please pseudocode these portions to describe what remains to be completed. Adding a README.md as well as adding this homework to your portfolio are required as well and more information can be found below.
– – –
### Create a README.md
Add a `README.md` to your repository describing the project. Here are some resources for creating your `README.md`. Here are some resources to help you along the way:
* [About READMEs](https://help.github.com/articles/about-readmes/)
* [Mastering Markdown](https://guides.github.com/features/mastering-markdown/)
– – –
### Add To Your Portfolio
After completing the homework please add the piece to your portfolio. Make sure to add a link to your updated portfolio in the comments section of your homework so the TAs can easily ensure you completed this step when they are grading the assignment. To receive an ‘A’ on any assignment, you must link to it from your portfolio.
– – –
### One More Thing
If you have any questions about this project or the material we have covered, please post them in the community channels in slack so that your fellow developers can help you! If you’re still having trouble, you can come to office hours for assistance from your instructor and TAs.
**Good Luck!**