You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.4 KiB
98 lines
2.4 KiB
import fetch from 'node-fetch'; |
|
|
|
process.stdin.resume(); |
|
process.stdin.setEncoding('utf8'); |
|
let input = []; |
|
process.stdin.on('data', (data) => { |
|
input.push(data); |
|
}); |
|
|
|
const token = |
|
'1234567812345678123456781234567812345678123456781234567812345678'; |
|
|
|
const api = 'http://localhost:3333'; |
|
const headers = { 'Content-Type': 'application/json' }; |
|
|
|
const updated = (oldEvent, scrapedEvent) => { |
|
let keys = [ |
|
'canceled', |
|
'end', |
|
'start', |
|
'draft', |
|
'facebook_id', |
|
'place_id', |
|
'name', |
|
'ticket_url', |
|
'id' |
|
]; |
|
for (let key of keys) { |
|
if (oldEvent[key] != scrapedEvent[key]) { |
|
return true; |
|
} |
|
} |
|
return false; |
|
}; |
|
|
|
process.stdin.on('end', async () => { |
|
for (let event_line of input.join('').split('\n')) { |
|
const [ |
|
facebook_id = '', |
|
location_name = '', |
|
place_id = '', |
|
name = '', |
|
start = '', |
|
ticket_url = '' |
|
] = event_line.split('¤'); |
|
let payload = { |
|
draft: false, |
|
canceled: false, |
|
facebook_id, |
|
location_name, |
|
place_id: Number(place_id), |
|
name, |
|
start: Number(start), |
|
ticket_url |
|
}; |
|
|
|
let search = await fetch( |
|
`${api}/search/events/?facebook_id=${payload.facebook_id}&token=${token}` |
|
); |
|
if (!search.ok) { |
|
console.log(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', payload.name); |
|
} 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/${payload.id}/?token=${token}`, { |
|
method: 'PATCH', |
|
body: JSON.stringify(payload), |
|
headers |
|
}); |
|
console.log(res.status, 'Update', payload.name); |
|
} else { |
|
console.log(201, 'Skip', payload.name); |
|
} |
|
} else { |
|
console.log(201, 'Skip', payload.name); |
|
} |
|
console.log(res.status, await res.text()); |
|
} |
|
});
|
|
|