Не удается извлечь города страны OpenWeather

#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 включает названия стран, и они не различаются в данных…