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

Я хочу использовать открытый API для своего приложения. для этого я подумал, что смогу сохранить города и их идентификаторы в своем собственном приложении в файле json, и всякий раз, когда я хочу, чтобы пользователь знал погоду, приложение выбирает идентификатор города из json и выполняет вызов API.

для этого я загрузил файл Json размером 30 МБ, предоставленный Openweather, он содержит все страны и все их города. По-видимому, размещение 30 МБ в моем приложении - не очень хорошая идея. поэтому я решил извлечь только города моей страны. но дело в том, что эта идея не могла быть реализована. так много городов из разных стран имеют одинаковые названия. и извлеченный json снова был огромным. даже некоторые коды стран являются городами в других странах.

интересно, есть ли способ лучшей реализации. или любая идея или способ извлечь только города страны.

буду признательна за любую помощь в реализации прогноза погоды в моем приложении для разных городов.


person CTripleC    schedule 14.03.2019    source источник


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

person Mikey    schedule 22.05.2020