summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFivePixels <37427166+FivePixels@users.noreply.github.com>2021-04-10 22:40:50 -0500
committerGitHub <noreply@github.com>2021-04-10 22:40:50 -0500
commit0007b7e4fb5b48334b35e1fd77c2bcf814089f7a (patch)
treeb3337895a40e0c7b047089fbdcbf32023732683b /src
parentd3d9f7e6b69a84ea4da04609642f309134f0a346 (diff)
parent74598733bcc7b39b8a9b6521195545c543e38850 (diff)
downloadStreamFinder-0007b7e4fb5b48334b35e1fd77c2bcf814089f7a.tar.xz
StreamFinder-0007b7e4fb5b48334b35e1fd77c2bcf814089f7a.zip
Merge pull request #3 from FivePixels/dylan
Complete implementation for check.js, complete scrape.js
Diffstat (limited to 'src')
-rw-r--r--src/check.js52
-rw-r--r--src/scraper/scrape.js72
-rw-r--r--src/test.js5
3 files changed, 98 insertions, 31 deletions
diff --git a/src/check.js b/src/check.js
index c7085ca..0b52ece 100644
--- a/src/check.js
+++ b/src/check.js
@@ -1,18 +1,58 @@
const MongoClient = require('mongodb').MongoClient;
+
// This is for passing the parameters of the search to check and see if it already exists in the database
// if it does exist, we're gonna call another function in another file.
const scraper = require('./scraper/scrape')
-exports.performCheck = async function performCheck(query, type) {
- // if (!exist in database) {
- await scraper.performSearch(query, type);
- // }
+exports.performCheck = async function performCheck(id, query, type) {
+ const uri = "mongodb+srv://user0:8HL0NBINt6B8mIYF@cluster0.kfyrm.mongodb.net/StreamFinder?retryWrites=true&w=majority";
+ const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
+
+ var result;
+ await client.connect();
+ const database = client.db("db");
+ const tv = database.collection("tv");
+ const movie = database.collection('movie')
+ const search = { id: `${id}` };
+ // check to see if the title is already in the database
+ switch (type) {
+ case 'tv':
+ result = await tv.findOne(search);
+ break;
+ case 'movie':
+ result = await movie.findOne(search);
+ break;
+ }
+ if (result == null) {
+ await scraper.performSearch(id, query, type)
+ }
// (if it needed to be scraped, it now is, and its stored. next, we perform the database search for the newly saved entry)
- performDatabaseSearch(query, type);
+ var array = await performDatabaseSearch(id, type); // returns values
+ await client.close();
+ return array;
}
-async function performDatabaseSearch(query, type) {
+async function performDatabaseSearch(id, type) {
// do database search
+ const uri = "mongodb+srv://user0:8HL0NBINt6B8mIYF@cluster0.kfyrm.mongodb.net/StreamFinder?retryWrites=true&w=majority";
+ const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
+ var result;
+ await client.connect();
+ const database = client.db("db");
+ const tv = database.collection("tv");
+ const movie = database.collection('movie')
+ const search = { id: `${id}` };
+ // check to see if the title is already in the database
+ switch (type) {
+ case 'tv':
+ result = await tv.findOne(search)
+ break;
+ case 'movie':
+ result = await movie.findOne(search)
+ break;
+ }
+ client.close()
+ return [result.service, result.price]
} \ No newline at end of file
diff --git a/src/scraper/scrape.js b/src/scraper/scrape.js
index a24d1e8..605c234 100644
--- a/src/scraper/scrape.js
+++ b/src/scraper/scrape.js
@@ -1,32 +1,54 @@
const puppeteer = require('puppeteer');
-const mongodb = require('mongodb')
-
+const MongoClient = require('mongodb').MongoClient;
// Specifically for scraping
// Stores in database once finished scraping
-// query is the search string (title of movie or show) and the type (music, show, movie)
-// will be used
+// query is the movie or show name
+// type is the media type ("tv" for tv show or "movie")
-exports.performSearch = async function(query, type) {
- const browser = await puppeteer.launch({
- headless: true
- });
- const pages = await browser.pages();
- const page = pages[0];
- await page.goto('https://google.com');
- const searchBox = await page.$x("/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input");
- await searchBox[0].type(`${query} streaming`);
- await page.keyboard.press('Enter');
- await page.waitForNavigation();
- const resultsContainer = await page.$$('.r0VsPb')
- var streamingPlatforms;
- var streamingPrices;
- for (let i = 0; i < resultsContainer.length; i++) {
- streamingPlatforms = await resultsContainer[i].$$eval('.i3LlFf', nodes => nodes.map(n => n.innerText));
- streamingPrices = await resultsContainer[i].$$eval('.V8xno', nodes => nodes.map(n => n.innerText))
+exports.performSearch = async function (id, query, type) {
+ try {
+ const uri = "mongodb+srv://user0:8HL0NBINt6B8mIYF@cluster0.kfyrm.mongodb.net/StreamFinder?retryWrites=true&w=majority";
+ const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
+ await client.connect();
+ const database = client.db("db");
+ const tv = database.collection("tv");
+ const movie = database.collection('movie')
+ const browser = await puppeteer.launch({
+ headless: true
+ });
+ const pages = await browser.pages();
+ const page = pages[0];
+ await page.goto('https://google.com');
+ const searchBox = await page.$x("/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[2]/input");
+ await searchBox[0].type(`${query} ${type} streaming`);
+ await page.keyboard.press('Enter');
+ await page.waitForNavigation();
+ const resultsContainer = await page.$$('.r0VsPb')
+ var streamingPlatforms;
+ var streamingPrices;
+ for (let i = 0; i < resultsContainer.length; i++) {
+ streamingPlatforms = await resultsContainer[i].$$eval('.i3LlFf', nodes => nodes.map(n => n.innerText));
+ streamingPrices = await resultsContainer[i].$$eval('.V8xno', nodes => nodes.map(n => n.innerText))
+ }
+ if (type == "movie") {
+ await movie.insertOne({
+ title: query,
+ id: id,
+ service: streamingPlatforms,
+ price: streamingPrices
+ })
+ } else if (type == "tv") {
+ await tv.insertOne({
+ title: query,
+ id: id,
+ service: streamingPlatforms,
+ price: streamingPrices
+ })
+ }
+ await client.close()
+ await browser.close();
+ } catch (error) {
+ console.log(error)
}
- console.log(streamingPlatforms);
- console.log(streamingPrices);
- // do the database storage
- await browser.close();
}
diff --git a/src/test.js b/src/test.js
new file mode 100644
index 0000000..6c10475
--- /dev/null
+++ b/src/test.js
@@ -0,0 +1,5 @@
+const check = require('./check')
+
+check.performCheck('387', 'Spongebob Squarepants', 'tv').then(res => {
+ console.log(res)
+}) \ No newline at end of file