From 001d0a438022bfae7717facb6ae89aa8b96a8b0e Mon Sep 17 00:00:00 2001 From: Hugo Martinez Date: Thu, 9 Feb 2023 12:04:40 +0100 Subject: [PATCH] Factorize downloader & eslint fixes --- .env.dist | 6 ++--- downloader.js | 62 ++++++++++++--------------------------------------- index.js | 4 ++-- 3 files changed, 19 insertions(+), 53 deletions(-) diff --git a/.env.dist b/.env.dist index 2bdfaba..a52ddd6 100644 --- a/.env.dist +++ b/.env.dist @@ -1,4 +1,7 @@ API_URL="" +METABASE_MAIL="" +METABASE_PWD="" +METABASE_URL="" OVH_APP_KEY="" OVH_APP_SECRET_KEY="" OVH_CONSUMER_KEY="" @@ -7,6 +10,3 @@ SLACK_WEBHOOK="" TWILIO_ACCOUND_SID="" TWILIO_AUTH_TOKEN="" TWILIO_PHONE_VOICE="" -METABASE_URL="" -METABASE_MAIL="" -METABASE_PWD="" diff --git a/downloader.js b/downloader.js index 106acd2..a60a1dd 100644 --- a/downloader.js +++ b/downloader.js @@ -1,48 +1,14 @@ const axios = require('axios') const fs = require('fs') - -const reviewsDownloader = async () => { - const response = await axios({ - method: 'post', - url: `https://${process.env.METABASE_URL}/api/session`, - data: { username: `${process.env.METABASE_MAIL}`, password: `${process.env.METABASE_PWD}` } - }) - console.log(response.data.id) - - const datasetReviews = await axios.post( - `https://${process.env.METABASE_URL}/api/dataset/json`, - new URLSearchParams({ - query: '{"database":2,"query":{"source-table":6},"type":"query","middleware":{"js-int-to-string?":true,"add-default-userland-constraints?":true}}', - visualization_settings: '{"column_settings":{},"table.pivot":false,"table.pivot_column":"completed_at","table.cell_column":"do_it_for_me","table.columns":[{"name":"id","fieldRef":["field",48,null],"enabled":true},{"name":"google_place_id","fieldRef":["field",52,null],"enabled":true},{"name":"created_at","fieldRef":["field",49,{"temporal-unit":"default"}],"enabled":true},{"name":"completed_at","fieldRef":["field",51,{"temporal-unit":"default"}],"enabled":true},{"name":"type","fieldRef":["field",47,null],"enabled":true},{"name":"do_it_for_me","fieldRef":["field",50,null],"enabled":true}],"table.column_formatting":[]}' - }), - { - headers: { - authority: `${process.env.METABASE_URL}`, - accept: '*/*', - 'accept-language': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7', - 'content-type': 'application/x-www-form-urlencoded;charset=UTF-8', - cookie: `metabase.DEVICE=50796a71-d0ec-49c3-9dcd-d453b57c5f53; _ga=GA1.2.938353226.1673289574; metabase.TIMEOUT=alive; metabase.SESSION=${response.data.id}; _gid=GA1.2.1794784591.1675763957; _gat=1`, - origin: `https://${process.env.METABASE_URL}`, - referer: `https://${process.env.METABASE_URL}/question`, - 'sec-ch-ua': '"Not_A Brand";v="99", "Google Chrome";v="109", "Chromium";v="109"', - 'sec-ch-ua-mobile': '?0', - 'sec-ch-ua-platform': '"macOS"', - 'sec-fetch-dest': 'empty', - 'sec-fetch-mode': 'cors', - 'sec-fetch-site': 'same-origin', - 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36' - } - } - ) - - const json = JSON.stringify(datasetReviews.data) - - fs.writeFile('reviews.json', json, 'utf8', function (res, err) { - console.log(res, err) - }) -} - -const placesDownloader = async () => { +require('dotenv').config() + +/** + * + * @param {object} queryRequested + * @param {object} visualiszationRequested + * @param {string} fileName + */ +const downloader = async (queryRequested, visualiszationRequested, fileName) => { const response = await axios({ method: 'post', url: `https://${process.env.METABASE_URL}/api/session`, @@ -53,8 +19,8 @@ const placesDownloader = async () => { const datasetPlaces = await axios.post( 'https://o2t37cyszh.execute-api.eu-west-3.amazonaws.com/api/dataset/json', new URLSearchParams({ - query: '{"database":2,"query":{"source-table":7},"type":"query","middleware":{"js-int-to-string?":true,"add-default-userland-constraints?":true}}', - visualization_settings: '{"column_settings":{},"table.pivot":false,"table.pivot_column":"report_count","table.cell_column":"latitude","table.columns":[{"name":"google_place_id","fieldRef":["field",44,null],"enabled":true},{"name":"name","fieldRef":["field",38,null],"enabled":true},{"name":"google_place_url","fieldRef":["field",46,null],"enabled":true},{"name":"address","fieldRef":["field",41,null],"enabled":true},{"name":"phone_number","fieldRef":["field",45,null],"enabled":true},{"name":"created_at","fieldRef":["field",43,{"temporal-unit":"default"}],"enabled":true},{"name":"report_count","fieldRef":["field",39,null],"enabled":true},{"name":"latitude","fieldRef":["field",42,null],"enabled":true},{"name":"longitude","fieldRef":["field",40,null],"enabled":true}],"table.column_formatting":[]}' + query: queryRequested, + visualization_settings: visualiszationRequested }), { headers: { @@ -78,10 +44,10 @@ const placesDownloader = async () => { const json = JSON.stringify(datasetPlaces.data) - fs.writeFile('places.json', json, 'utf8', function (res, err) { + fs.writeFile(fileName, json, 'utf8', function (res, err) { console.log(res, err) }) } -reviewsDownloader() -placesDownloader() +downloader('{"database":2,"query":{"source-table":7},"type":"query","middleware":{"js-int-to-string?":true,"add-default-userland-constraints?":true}}', '{"column_settings":{},"table.pivot":false,"table.pivot_column":"report_count","table.cell_column":"latitude","table.columns":[{"name":"google_place_id","fieldRef":["field",44,null],"enabled":true},{"name":"name","fieldRef":["field",38,null],"enabled":true},{"name":"google_place_url","fieldRef":["field",46,null],"enabled":true},{"name":"address","fieldRef":["field",41,null],"enabled":true},{"name":"phone_number","fieldRef":["field",45,null],"enabled":true},{"name":"created_at","fieldRef":["field",43,{"temporal-unit":"default"}],"enabled":true},{"name":"report_count","fieldRef":["field",39,null],"enabled":true},{"name":"latitude","fieldRef":["field",42,null],"enabled":true},{"name":"longitude","fieldRef":["field",40,null],"enabled":true}],"table.column_formatting":[]}', 'places.json') +downloader('{"database":2,"query":{"source-table":6},"type":"query","middleware":{"js-int-to-string?":true,"add-default-userland-constraints?":true}}', '{"column_settings":{},"table.pivot":false,"table.pivot_column":"completed_at","table.cell_column":"do_it_for_me","table.columns":[{"name":"id","fieldRef":["field",48,null],"enabled":true},{"name":"google_place_id","fieldRef":["field",52,null],"enabled":true},{"name":"created_at","fieldRef":["field",49,{"temporal-unit":"default"}],"enabled":true},{"name":"completed_at","fieldRef":["field",51,{"temporal-unit":"default"}],"enabled":true},{"name":"type","fieldRef":["field",47,null],"enabled":true},{"name":"do_it_for_me","fieldRef":["field",50,null],"enabled":true}],"table.column_formatting":[]}', 'reviews.json') diff --git a/index.js b/index.js index d00e2a2..b9384fb 100644 --- a/index.js +++ b/index.js @@ -21,7 +21,7 @@ const ovh = require('ovh')({ /** * - * @param {ID of place looked for} id + * @param {string} id * * @returns Place object */ @@ -34,7 +34,7 @@ const findPlaceById = (id) => { /** * - * @param {ID of place that we looked for reviews} id + * @param {string} id * @returns Array of reviews for Google Place ID & with Do It For Me true */ const findOtherReviews = (id) => {