Get game data from URL
							parent
							
								
									44d7e126c8
								
							
						
					
					
						commit
						4e2c158a85
					
				
							
								
								
									
										33
									
								
								app/index.js
								
								
								
								
							
							
						
						
									
										33
									
								
								app/index.js
								
								
								
								
							| 
						 | 
					@ -7,7 +7,7 @@ const fs = require("fs");
 | 
				
			||||||
const shared = require("./scripts/shared.js");
 | 
					const shared = require("./scripts/shared.js");
 | 
				
			||||||
const constURLs = require("./scripts/constants/urls.js");
 | 
					const constURLs = require("./scripts/constants/urls.js");
 | 
				
			||||||
const selectors = require("./scripts/constants/css-selectors.js");
 | 
					const selectors = require("./scripts/constants/css-selectors.js");
 | 
				
			||||||
const { isStringAValidURL, urlExists } = require("./scripts/urls-helper.js");
 | 
					const { isStringAValidURL, urlExists, isF95URL } = require("./scripts/urls-helper.js");
 | 
				
			||||||
const gameScraper = require("./scripts/game-scraper.js");
 | 
					const gameScraper = require("./scripts/game-scraper.js");
 | 
				
			||||||
const {
 | 
					const {
 | 
				
			||||||
  prepareBrowser,
 | 
					  prepareBrowser,
 | 
				
			||||||
| 
						 | 
					@ -238,6 +238,37 @@ module.exports.getGameData = async function (name, includeMods) {
 | 
				
			||||||
  if (shared.isolation) await browser.close();
 | 
					  if (shared.isolation) await browser.close();
 | 
				
			||||||
  return result;
 | 
					  return result;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * @public
 | 
				
			||||||
 | 
					 * Starting from the url, it gets all the information about the game you are looking for.
 | 
				
			||||||
 | 
					 * You **must** be logged in to the portal before calling this method.
 | 
				
			||||||
 | 
					 * @param {String} url URL of the game to obtain information of
 | 
				
			||||||
 | 
					 * @returns {Promise<GameInfo>} Information about the game. If no game was found, null is returned
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					module.exports.getGameDataFromURL = async function (url) {
 | 
				
			||||||
 | 
					  if (!shared.isLogged) {
 | 
				
			||||||
 | 
					    console.warn("user not authenticated, unable to continue");
 | 
				
			||||||
 | 
					    return null;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Check URL
 | 
				
			||||||
 | 
					  if(!urlExists(url)) return null;
 | 
				
			||||||
 | 
					  if (!isF95URL(url)) throw url + " is not a valid F95Zone URL";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Gets the search results of the game being searched for
 | 
				
			||||||
 | 
					  let browser = null;
 | 
				
			||||||
 | 
					  if (shared.isolation) browser = await prepareBrowser();
 | 
				
			||||||
 | 
					  else {
 | 
				
			||||||
 | 
					    if (_browser === null) _browser = await prepareBrowser();
 | 
				
			||||||
 | 
					    browser = _browser;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // Get game data
 | 
				
			||||||
 | 
					  let result = await gameScraper.getGameInfo(browser, url);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (shared.isolation) await browser.close();
 | 
				
			||||||
 | 
					  return result;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @public
 | 
					 * @public
 | 
				
			||||||
 * Gets the data of the currently logged in user.
 | 
					 * Gets the data of the currently logged in user.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,7 +17,8 @@ const { isStringAValidURL, isF95URL, urlExists } = require("./urls-helper.js");
 | 
				
			||||||
 * Get information from the game's main page.
 | 
					 * Get information from the game's main page.
 | 
				
			||||||
 * @param {puppeteer.Browser} browser Browser object used for navigation
 | 
					 * @param {puppeteer.Browser} browser Browser object used for navigation
 | 
				
			||||||
 * @param {String} url URL (String) of the game/mod to extract data from
 | 
					 * @param {String} url URL (String) of the game/mod to extract data from
 | 
				
			||||||
 * @return {Promise<GameInfo>} Complete information about the game you are looking for
 | 
					 * @return {Promise<GameInfo>} Complete information about the game you are 
 | 
				
			||||||
 | 
					 * looking for or null if the URL doesn't exists
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
module.exports.getGameInfo = async function (browser, url) {
 | 
					module.exports.getGameInfo = async function (browser, url) {
 | 
				
			||||||
  if (shared.debug) console.log("Obtaining game info");
 | 
					  if (shared.debug) console.log("Obtaining game info");
 | 
				
			||||||
| 
						 | 
					@ -25,7 +26,7 @@ module.exports.getGameInfo = async function (browser, url) {
 | 
				
			||||||
  // Verify the correctness of the URL
 | 
					  // Verify the correctness of the URL
 | 
				
			||||||
  if (!isF95URL(url)) throw url + " is not a valid F95Zone URL";
 | 
					  if (!isF95URL(url)) throw url + " is not a valid F95Zone URL";
 | 
				
			||||||
  let exists = await urlExists(url);
 | 
					  let exists = await urlExists(url);
 | 
				
			||||||
  if (!exists) return new GameInfo();
 | 
					  if (!exists) return null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let page = await preparePage(browser); // Set new isolated page
 | 
					  let page = await preparePage(browser); // Set new isolated page
 | 
				
			||||||
  await page.setCookie(...shared.cookies); // Set cookies to avoid login
 | 
					  await page.setCookie(...shared.cookies); // Set cookies to avoid login
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue