0
我对Node.js非常陌生,以前一直没有用过json数据,所以真的希望你能帮助我。如何从多个url页面获取json数据Node.js?
我想从特玛的API的所有事件信息和具体的变量添加到MongoDB的。但是,我目前使用的API'限于每页200个事件。因此,我不可能将活动信息与场地信息连接起来,因为这些信息单独添加到mongoDB中,并没有详尽列出所有活动和场地信息(由于缺少活动和场地数据而无法连接到ID)。
因此,我的问题是关于我如何能得到的所有页面到我的数据库在一次?
,我至今写的代码看起来像下面的东西:
app.get('/tm', (req, res) => {
axios // getting venues
.get('https://app.ticketmaster.com/discovery/v2/venues.json?apikey=myApiKey&page=0&size=200&countryCode=DK')
.then(response => {
const venuesToBeInserted = response.data._embedded.venues.map(venue => { // preparing venues
return {
sourceID: venue.id,
venue: venue.name,
postalCode: venue.postalCode,
city: venue.city.name,
country: venue.country.name,
countryCode: venue.country.countryCode,
address: !!venue.address ? venue.address.line1 : null,
longitude: !!venue.location ? venue.location.longitude : null,
latitude: !!venue.location ? venue.location.latitude : null,
source: 'ticketmaster'
}
})
// Create all venues at once
Venue.create(venuesToBeInserted).then(venues => {
console.log("venues inserted")
axios // getting events and shows - note the page parameter in the api link
.get('https://app.ticketmaster.com/discovery/v2/events.json?apikey=myApiKey&countryCode=DK&size=200&page=0')
.then(response => {
const eventsToBeInserted = response.data._embedded.events.map(events => { // preparing events
const event = events._embedded.attractions[0]
return {
sourceID: event.id,
name: event.name,
slug: slugify(event.name).toLowerCase(),
tags: !!event.classifications ? [event.classifications[0].genre.name, event.classifications[0].subGenre.nam] : [], // duplicate genres occur
// possible tags from ticketmaster: type and subtype
}
})
// Create all events at once
Event.create(eventsToBeInserted).then(events => {
console.log("events inserted")
const showsToBeInserted = response.data._embedded.events.map(show => {
const event = events.find(event => event.sourceID == show._embedded.attractions[0].id);
const venue = venues.find(venue => venue.sourceID == show._embedded.venues[0].id);
if (!!event && !!venue) {
return {
event: event._id,
venue: venue._id,
timezone: show.dates.timezone,
dateStart: !!show.dates.start.dateTime ? show.dates.start.dateTime : show.dates.start.localDate,
tickets: !!show.priceRanges ? {
minPrice: show.priceRanges[0].min,
maxPrice: show.priceRanges[0].max,
currency: show.priceRanges[0].currency
}: {}
}
}
})
// Let's see what we have created in the database
Venue.find({}).select({
name: 1,
slug: -1
}).limit(10).populate('event').populate('venue').then(events => {
console.log(util.inspect(events));
}).catch(err => {
console.error(err);
});
}).catch(err => {
console.error(err)
})
}).catch(err => {
console.error(err)
})
}).catch(err => {
console.error(err)
});
}).catch(err => {
console.error(err)
})
})
编辑
使用杰克建议给了我一个错误(方法错误:请求失败状态码为401)。我试图在网上搜索它,但我无法弄清楚为什么会发生错误。在我的console.log中查看部分错误消息的图片。
感谢您的帮助杰克。但是我收到一条错误消息。请参阅我在上面的帖子中的编辑。我不知道错误是什么意思.. –
401意味着你是未经授权的,它看起来像错误消息说你的MongoDB是安全的,并需要用户名/密码来建立与Mongoose的连接。 –
看起来您并未在请求URL中设置真实的API密钥,该值在响应中为'apiKey',您需要发送在请求URL中提供给您的API密钥。 –