Самый эффективный метод получения данных о погоде для нескольких мест

Я работаю над метеорологическим мобильным приложением, которое отображает информацию о местных достопримечательностях, и одна из вещей, которую я хочу показать, это погода в каждом месте. В настоящее время мои местоположения хранятся с латентными координатами, и их можно искать по радиусу. Я хотел бы использовать http://openweathermap.org/API, чтобы получить некоторую полезную информацию о "текущих условиях", чтобы, когда пользователь просматривает запись, он мог видеть основные данные о погоде. В идеале я хотел бы ограничить количество исходящих запросов, чтобы страницы были быстрыми (и запросы API не работали)

Мне интересно, могу ли я создать серверную коллекцию погодных данных, которые я регулярно обновляю, на серверной (ежечасно?) Информации, которые затем запрашивают мои клиенты (возможно, с помощью mongo $near lookup?) - таким образом, все мои данные обрабатываются обрабатывается в метеоре, а не каждый клиент собирается получить последние данные из API. Я не хочу перебирать все места в моем списке и делать отдельные вызовы API для каждого, поскольку у меня есть прибл. 400 локаций (!). Боюсь, я новичок в запросах API (и сам метеор), поэтому извиняюсь, если это плохо сформулированный вопрос.

Я не совсем уверен, если это выполнимо, или если это даже лучший подход - любые советы (и ссылки на любые полезные фрагменты кода!) Будут с благодарностью!

РЕДАКТИРОВАТЬ / ОБНОВИТЬ!

Хорошо, мне пока не удалось заставить это работать, но у меня есть еще несколько полезных деталей о данных! Если я сделаю запрос к API openweather, я смогу вернуть данные для всех их местоположений (которые я хотел бы добавить / обновить в коллекцию). Затем я мог бы выполнять обычный поиск, вместо того, чтобы направлять клиентский запрос прямо к ним каждый раз, когда пользователь просматривает местоположение. Данные JSON выглядят так:

{ "message":"accurate", "cod":"200", "count":50, "list":[ { "id":2643076, "name":"Marazion", "coord":{ "lon":-5.47505, "lat":50.125561 }, "main":{ "temp":292.15, "pressure":1016, "humidity":68, "temp_min":292.15, "temp_max":292.15 }, "dt":1403707800, "wind":{ "speed":8.7, "deg":110, "gust":13.9 }, "sys":{ "country":"" }, "clouds":{ "all":75 }, "weather":[ { "id":721, "main":"Haze", "description":"haze", "icon":"50d" } ] }, ... В идеале я хотел бы создать свою собственную локальную коллекцию 'weather', которую я могу искать, используя $ near $ mongo (чтобы сократить исходящие запросы и ускорить работу), но я не знаю, будет ли это возможно, потому что формат, который данные возвращаются - я думаю, что мне нужно структурировать данные о моем местоположении, чтобы использовать гео-поиск:

"location": { "type": "Point", "coordinates": [-5.47505,50.125561] } Мои вопросы:

  1. Как я могу создать эту коллекцию (я видел это - могу ли я сделать что-то подобное и регулярно обновлять существующие записи в коллекции?)
  2. Нужно ли просто жить на сервере или на клиенте тоже?
  3. Нужно ли манипулировать данными, чтобы заставить работать гео поиск?
  4. Это даже правильный способ приблизиться к этому?

EDIT / UPDATE2

Этот вопрос слишком длинный / много? Такое ощущение, что это так. Может быть, я должен разделить это.

1 ответ

Да, легко возможно. Поскольку ваш вопрос настолько велик, я дам вам объяснение высокого уровня того, что я думаю, что вам нужно сделать.

Вам нужно создать коллекцию, в которую вы хотите сохранить данные о погоде. Работник, который запрашивает новые данные и обновляет коллекцию с заданным интервалом. Используйте что-то вроде cron-tick для планирования интервала. Запрос данных должен происходить только на стороне сервера, и я могу рекомендовать для этого пакет npm запроса.

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

Теперь вы должны получать данные о погоде на своем клиенте и быть в состоянии с ним сойти с ума.

Другие вопросы по тегам