IBM / watson-discovery-news-alerting

WARNING: This repository is no longer maintained :warning: This repository will not be updated. The repository will be kept available in read-only mode.
Apache License 2.0
13 stars 24 forks source link
ibm-developer-technology-cognitive ibmcode nodejs watson-discovery watson-services

Build Status

WARNING: This repository is no longer maintained :warning:

This repository will not be updated. The repository will be kept available in read-only mode. Refer to https://github.com/IBM/watson-discovery-news for a similar example.

Watson Discovery News Alerting

In this code pattern, we will build a Node.js web application that will use the Watson Discovery Service to access Watson Discovery News.

Watson Discovery News is a default data collection that is associated with the Watson Discovery Service. It is a dataset of primarily English language news sources that is updated continuously, with approximately 300,000 new articles and blogs added daily.

The focus of this code pattern is to monitor a product's marketplace life-cycle using Watson's Discovery service to intelligently alert when a product's stance in the marketplace has changed. Users can receive periodic email alerts about a product or brand and how they're perceived in the News.

Alert tracking can be set up for the following areas:

The code pattern highlights the steps required to build a front-end management interface to search Watson News and a back-end service which periodically sends alerts out related to customizable queries.

architecture

Flow

  1. The user interacts with the backend server via the app UI. The frontend app UI uses React to render search results and can reuse all of the views that are used by the backend for server side rendering. The frontend is using watson-react-components and is responsive.
  2. User input is processed and routed to the backend server, which is responsible for server side rendering of the views to be displayed on the browser. The backend server is written using express and uses express-react-views engine to render views written using React.
  3. The backend server stores subscription information in a Cloudant NonSQL database for product tracking.
  4. The backend server sends user requests to the Watson Discovery Service. It acts as a proxy server, forwarding queries from the frontend to the Watson Discovery Service API while keeping sensitive API keys concealed from the user.
  5. The Watson Discovery Service queries the Watson News Collection for articles related to the product.
  6. The backend server sends periodic updates to email.

Included components

Featured technologies

Watch the Video

video

Steps

  1. Clone the repo
  2. Create Watson Services with IBM Cloud

1. Clone the repo

Clone the watson-discovery-news-alerting locally. In a terminal, run:

git clone https://github.com/ibm/watson-discovery-news-alerting

2. Create Watson Services with IBM Cloud

Create the following service:

Run the application locally

  1. Install Node.js and Yarn
  2. Install all of the dependencies by running yarn. This will install of the node modules specified in package.json
cd app
yarn
  1. Copy the env.sample to .env
cp .env.sample .env
  1. Edit the .env file and enter your Watson Discovery and Cloudant NoSQL DB credentials. Add SMTP Mail settings if you wish to use the tracking feature.

  2. Build and start the main app.

yarn run build
yarn start
  1. Build and start the tracking app.
yarn run start-notifier
  1. Open a browser and go to http://localhost:4391

Deploy and run the application on IBM Cloud

To deploy to IBM Cloud make sure you have the IBM Cloud CLI tool installed. Then run the following commands to connect it with IBM Cloud and login with your IBM Cloud credentials.

cd watson-discovery-news-alerting
ibmcloud login

Run the following command to deploy and run the alerting and notifier apps on the IBM Cloud. It will automatically connect to your existing Watson Discovery and Cloudant NoSQL DB services if your service names match the names specified in the manifest.yml file.

ibmcloud cf push

If the ibmcloud cf push command complains that the application name is already taken, change the lines in the manifest.yml to have a custom application name specific for your setup:

...
applications:
- name: custom-name
  path: ./app
...

Two IBM Cloud applications should be created and running:

Set the environment variables required for each the notifier service to perform properly. Use the values unique to your setup:

ibmcloud cf set-env watson-discovery-news-alert-notifier SMTP_SETTINGS '{"host":"smtp.gmail.com","user":"xxx@gmail.com","pass":"xxx","fromEmail":"xxx@gmail.com"}'
ibmcloud cf set-env watson-discovery-news-alert-notifier BASE_URL 'https://watson-discovery-news-alerting.mybluemix.net'

Go to the URL route that is associated with the watson-discovery-news-alerting app in IBM Cloud to view the application. Typically, this would be https://watson-discovery-news-alerting.mybluemix.net.

Sample output

sample_output

General Project Layout

The server which hosts the React web application, acts as an API to Watson, and communicates with the notifier App can be found at:

./app/server.js

The server which periodically emails news alerts to subscribed users can be found at:

./app/notifier.js

detailed_architecture

Architecture

Back-end Server

Handles hosting of the static assets (React front-end application) and manages a thin API used by the front-end application.

Front-end Application

Displays results from querying the Watson Discovery Service API and manages subscriptions for push updates.

Worker Application

Background process which periodically sends updates to email.

Troubleshooting

The credentials for IBM Cloud services (wdna-discovery and wdna-cloudant) can be found in the Services menu in IBM Cloud, and selecting the Service Credentials option.

If the port is unavailable, you will see the following error:

Error: listen EADDRINUSE :::{port}

Links

Learn more

License

This code pattern is licensed under the Apache Software License, Version 2. Separate third party code objects invoked within this code pattern are licensed by their respective providers pursuant to their own separate licenses. Contributions are subject to the Developer Certificate of Origin, Version 1.1 (DCO) and the Apache Software License, Version 2.

Apache Software License (ASL) FAQ