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.
99 lines
2.4 KiB
99 lines
2.4 KiB
|
4 years ago
|
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());
|
||
|
|
}
|
||
|
|
});
|