#android #ios #react-native #openweathermap
#Android #iOS #react-native #openweathermap
Вопрос:
Я хочу использовать open-weather API для своего приложения. для этого я подумал, что смогу сохранять города и их идентификаторы в моем собственном приложении в файле json, и всякий раз, когда пользователь хочет узнать погоду в местоположении, приложение выбирает идентификатор города из json и вызывает API.
для этого я скачал файл Json размером 30 МБ, предоставленный Openweather, он содержит все страны и все их города. очевидно, что поместить 30 МБ в мое приложение — не очень хорошая идея. поэтому я решил извлечь только города моей страны. но дело в том, что эта идея не могла быть реализована. так много городов из разных стран имеют одинаковые названия. и извлеченный json снова был огромным. даже некоторые коды страны являются городами в других странах.
интересно, есть ли способ лучшей реализации. или любая идея или способ извлечь только города страны.
буду признателен за любую помощь по реализации вызова погоды в моем приложении для разных городов
Ответ №1:
Я знаю, что этот вопрос устарел, но недавно я тоже столкнулся с этой проблемой. В итоге я сделал это, создав city.list.json
экспортированный по умолчанию объект JSON и написав скрипт узла, чтобы затем выделить города по коду страны:
var fs = require('fs');
var cityList = require('./city.list.js');
let output = {};
let countryCodes = [];
cityList.forEach((city) => {
const country = city.country;
if (country) {
if (!countryCodes.includes(country)) {
countryCodes.push(country);
}
if (!output[country]) {
output[country] = [];
}
output[country].push({
id: city.id,
name: city.name,
});
}
});
for (const [key, value] of Object.entries(output)) {
const fileName = 'city.' key.toLowerCase() '.json';
fs.writeFile(fileName, JSON.stringify(value), function (err) {
if (err) console.error(err.message);
console.log(fileName ' - saved!');
});
}
fs.writeFile('countrycodes.json', JSON.stringify(countryCodes), function (err) {
if (err) console.error(err.message);
console.log('countrycodes.json' ' - saved!');
});
Это полностью сработало! Единственная проблема, с которой я тогда столкнулся, city.list.json
включает названия стран, и они не различаются в данных…