如何以编程方式使用Airbnb的 iCalendar 链接



我已经得到了Airbnb列表的iCalendar链接。当我使用任何浏览器访问该链接时,浏览器都会自动下载.ics iCalendar文件。我正试图编程一个应用程序,将与该特定的Airbnb列表的iCalendar同步。我想我应该只fetchiCalendar链接,我可以读取。ics文件的内容,解析它并处理信息。

然而,当我尝试在同一个Airbnb日历链接上使用isomorphic-fetch时,我得到以下响应:

Response {
size: 0,
timeout: 0,
[Symbol(Body internals)]: {
body: PassThrough {
_readableState: [ReadableState],
_events: [Object: null prototype],
_eventsCount: 5,
_maxListeners: undefined,
_writableState: [WritableState],
allowHalfOpen: true,
[Symbol(kCapture)]: false,
[Symbol(kTransformState)]: [Object]
},
disturbed: false,
error: null
},
[Symbol(Response internals)]: {
url: 'https://www.airbnb.com/calendar/ical/22342432.ics?s=56501a678175afddd0ef3874b7a1b28b',
status: 200,
statusText: 'OK',
headers: Headers { [Symbol(map)]: [Object: null prototype] },
counter: 0
}
}
FetchError: invalid json response body at https://www.airbnb.com/calendar/ical/22342432.ics?s=56501a678175afddd0ef3874b7a1b28b reason: Unexpected token B in JSON at position 0

理想情况下,我想从NODE.js (Next.js)查询链接,而不是下载。ics文件,我希望能够以JSON格式解析。ics的信息,这样我就可以处理数据,找出哪些日期是可用的,哪些日期不可用于该列表....

我该怎么做呢?

顺便说一句,我使用isomorphic-fetchnpm库来做抓取…例如

const response = await fetch(`https://www.airbnb.com/calendar/ical/22342432.ics?s=56501a678175afddd0ef3874b7a1b28b`);

console.log('response');
console.log(response);
console.log('response.body', response.body);

stories = await response.json();
console.log('stories');
console.log(stories);
res.status(200).json(stories)
} catch(err) {
console.log('error')
console.log(err)
stories = [];
}

找到答案....使用npm packagenode-ical

const ical = require('node-ical');

ical.fromURL(url, options, function(err, data) {
if (err) console.log(err);
console.log(data);
});

最新更新