|
1 | 1 | const scrapeIt = require("scrape-it");
|
2 |
| -const moment = require('moment'); |
3 |
| -const momentTZ = require('moment-timezone'); |
4 | 2 | const events = require('events');
|
5 | 3 | const schedule = require('node-schedule');
|
6 | 4 | const debug = require('debug')('steam-workshop-scraper');
|
| 5 | +const { DateTime, Settings } = require("luxon"); |
7 | 6 |
|
8 | 7 | class SteamWorkshopScraper {
|
9 |
| - constructor() { |
| 8 | + constructor(timeZoneName = undefined) { |
10 | 9 | this.workshopMap = new Map();
|
11 | 10 | this.schedule = undefined;
|
12 | 11 | this.workShopUrlInfo = 'https://steamcommunity.com/sharedfiles/filedetails/?id=';
|
@@ -59,6 +58,12 @@ class SteamWorkshopScraper {
|
59 | 58 | this.schedule = schedule.scheduleJob('28 * * * * *', function () {
|
60 | 59 | this.TriggerUpdate();
|
61 | 60 | }.bind(this));
|
| 61 | + if(timeZoneName != undefined){ |
| 62 | + Settings.defaultZone = timeZoneName; |
| 63 | + if(Settings.defaultZone.valid != true){ |
| 64 | + throw new Error('Timezone invalid for constructor SteamWorkshopScraper: ' + timeZoneName) |
| 65 | + } |
| 66 | + } |
62 | 67 | }
|
63 | 68 |
|
64 | 69 | async TriggerUpdate(){
|
@@ -153,30 +158,25 @@ class SteamWorkshopScraper {
|
153 | 158 |
|
154 | 159 | ParseSteamTime(string) {
|
155 | 160 | debug('ParseStreamTime:', string);
|
156 |
| - if (string.match('[0-9]{4}')) { |
157 |
| - let parsed = moment(string, 'DD MMM, YYYY @ h:mma').format('YYYY-MM-DD HH:mm'); |
158 |
| - let a = momentTZ.tz(parsed, 'America/Los_Angeles'); |
159 |
| - if (a.isValid()) { |
160 |
| - var time = moment(a).local(); |
161 |
| - } else { |
162 |
| - console.error('not valid date2'); |
163 |
| - } |
| 161 | + var steamDefaultTimezone = 'America/Los_Angeles'; |
| 162 | + var time; |
| 163 | + let time1 = DateTime.fromFormat(string, "d MMM, yyyy @ h:ma", { locale: 'en', zone: steamDefaultTimezone }); |
| 164 | + let time2 = DateTime.fromFormat(string, "d MMM @ h:ma", { locale: 'en', zone: steamDefaultTimezone }); |
| 165 | + let time3 = DateTime.fromFormat(string, "MMM d, yyyy @ h:ma", { locale: 'en', zone: steamDefaultTimezone }); // github workflow format |
| 166 | + let time4 = DateTime.fromFormat(string, "MMM d @ h:ma", { locale: 'en', zone: steamDefaultTimezone }); // github workflow format for current year |
| 167 | + if(time1.isValid){ |
| 168 | + time = time1; |
| 169 | + } else if(time2.isValid){ |
| 170 | + time = time2; |
| 171 | + } else if(time3.isValid){ |
| 172 | + time = time3; |
| 173 | + } else if(time4.isValid){ |
| 174 | + time = time4; |
164 | 175 | } else {
|
165 |
| - let parsed = moment(string, 'DD MMM @ h:mma').format('YYYY-MM-DD HH:mm'); |
166 |
| - var a = momentTZ.tz(parsed, 'America/Los_Angeles'); |
167 |
| - try { |
168 |
| - if (a.isValid()) { |
169 |
| - var time = moment(a).local(); |
170 |
| - } else { |
171 |
| - console.error('not valid date2'); |
172 |
| - } |
173 |
| - } catch (error) { |
174 |
| - debug('var a is:'); |
175 |
| - debug(a); |
176 |
| - console.error('try catch error:', error); |
177 |
| - } |
| 176 | + throw new Error('No time format was found in parser for: ' + string); |
178 | 177 | }
|
179 |
| - return time.toISOString(true); |
| 178 | + time = time.setZone(Settings.defaultZone); |
| 179 | + return time.toString(true); |
180 | 180 | }
|
181 | 181 | }
|
182 | 182 |
|
|
0 commit comments