import { get _upcoming _events } from '../src/hoopla/index.mjs' ;
import send from '../src/signal/send.mjs' ;
import { get _credentials , updated } from '../src/util.mjs' ;
import fetch from 'node-fetch' ;
const prod = true ;
let { api , token } = get _credentials ( prod ) ;
if ( prod ) {
api = 'http://10.0.0.210:8484' ;
token = '831411806230c7e950c4eeb226499ef92bb6bdc4157797929a0e16d133dc13a8' ;
} else {
api = 'http://localhost:3333' ;
token = '1234567812345678123456781234567812345678123456781234567812345678' ;
}
const headers = { 'Content-Type' : 'application/json' } ;
const unix = ( a ) => parseInt ( new Date ( a ) . valueOf ( ) / 1000 , 10 ) ;
( async ( ) => {
let resp = await fetch ( ` ${ api } /places/?token= ${ token } ` ) ;
let places = await resp . json ( ) ;
places = places . filter ( ( place ) => {
const scrape = place . scraper == 'hoopla' ;
if ( ! scrape ) {
// console.log(
// 101,
// `Skipping #${place.id} ${place.name}. Reason: Scraper is ${place.scraper}`
// );
return false ;
}
const now = unix ( new Date ( ) ) ;
const recently = place . last _scraped + place . scrape _threshold ;
if ( now < recently ) {
console . log (
100 ,
` Skipping # ${ place . id } ${ place . name } . Reason: Was scraped ${
now - place . last _scraped
} s ago . `
) ;
return false ;
}
return true ;
} ) ;
for ( let place of places ) {
console . log ( 177 , ` Scraping # ${ place . id } ${ place . name } ` ) ;
const events = await get _upcoming _events ( place . hoopla _id ) ;
let payloads = [ ] ;
for ( let event of events ) {
payloads . push ( {
canceled : false ,
end : unix ( new Date ( event . end ) ) ,
start : unix ( new Date ( event . start ) ) ,
draft : false ,
hoopla _id : ` ${ event . event _id } ` ,
facebook _id : '' ,
place _id : place . id ,
name : event . name ? ? '' ,
ticket _url : ` https:// ${ place . hoopla _name _id } .hoopla.no/sales/ ${ event . event _id } `
} ) ;
}
if ( payloads . length == 0 ) {
console . log ( 123 , 'No upcoming events, dead place?' ) ;
}
for ( let payload of payloads ) {
let search ;
search = ` ${ api } /search/events/?hoopla_id= ${ payload . hoopla _id } &token= ${ token } ` ;
console . log ( search ) ;
search = await fetch ( search ) ;
if ( ! search . ok ) {
console . log ( search . status , 'Search was not OK.' , await search . text ( ) ) ;
continue ;
}
search = await search . json ( ) ;
let new _event = search . length === 0 ;
let old _event ;
if ( ! new _event ) {
old _event = search [ 0 ] ;
}
let res ;
if ( new _event ) {
res = await fetch ( ` ${ api } /events/?token= ${ token } ` , {
method : 'POST' ,
body : JSON . stringify ( payload ) ,
headers
} ) ;
console . log ( res . status , 'Insert' , place . name , payload . name ) ;
let newEvent = await res . text ( ) ;
let msg = await send ( newEvent , place ) ;
console . log ( res . status , 'Signal' , msg ) ;
} else if ( old _event && updated ( old _event , payload ) ) {
payload . id = old _event . id ;
if ( old _event . ticket _url . length > 0 && payload . ticket _url . length == 0 ) {
payload . ticket _url = old _event . ticket _url ;
}
if ( updated ( old _event , payload ) ) {
res = await fetch ( ` ${ api } /events/ ${ old _event . id } /?token= ${ token } ` , {
method : 'PATCH' ,
body : JSON . stringify ( payload ) ,
headers
} ) ;
console . log ( res . status , 'Update' , place . name , payload . name ) ;
} else {
console . log ( 201 , 'Skip Update' , place . name , payload . name ) ;
}
} else {
console . log ( 201 , 'Skip' , place . name , payload . name ) ;
}
}
if ( payloads . length > 0 ) {
let res = await fetch ( ` ${ api } /places/ ${ place . id } /?token= ${ token } ` , {
method : 'PATCH' ,
body : JSON . stringify ( {
last _scraped : unix ( new Date ( ) )
} ) ,
headers
} ) ;
if ( res . ok ) {
console . log ( res . status , ` Last scrape at ${ place . name } updated. ` ) ;
} else {
console . log (
res . status ,
` Last scrape at ${ place . name } failed to update last update.. `
) ;
}
}
}
} ) ( ) ;
let example = {
event _id : 143146107 ,
organization _id : 1947342940 ,
identifier : 'vvalentinerne' ,
name : 'Vidar & Valentinerne' ,
description :
'Vidar & Valentinerne\nLobbyen - 18. års aldersgrense. \n\nVALENTINERNE (Oslo) spilte sammen med Joachim «Jokke» Nielsen på 80- og 90-tallet, og består av May-Irene Aasen (trommer), Petter Pogo (gitar), Håkon Torgersen (bass) og de har med seg selveste Vidar Rugset på vokal og gitar. Sammen fremfører de Jokke & Valentinernes musikk på nær autentisk vis. ' ,
start : '2022-08-12T19:00:00Z' ,
end : '2022-08-12T23:00:00Z' ,
data : {
location : {
name : 'Verkstedhallen & Lobbyen' ,
street _address : 'Strandveien 29' ,
postal _code : '7067' ,
postal _area : 'Trondheim'
} ,
image : '1947342940/vidar-valentinerne.1654597144.jpg' ,
image _crop : {
percentTop : 1.97 ,
percentBottom : 1.59 ,
percentLeft : 0 ,
percentRight : 0 ,
width : 628 ,
height : 392.5 ,
x : 0 ,
y : 8.02
} ,
max _tickets : 10 ,
category : 'CONCERT' ,
other _category _description : ''
} ,
is _published : true ,
published _at : '2022-06-07T10:37:40.817271Z' ,
is _cancelled : false ,
invoice _allowed : false ,
has _slatejs _description : false ,
has _promo _codes : false ,
has _addons : true ,
created : '2022-06-07T10:19:50.6722Z' ,
featured : null ,
feature _priority : null ,
images : null
} ;