Самый эффективный метод получения данных о погоде для нескольких мест
Я работаю над метеорологическим мобильным приложением, которое отображает информацию о местных достопримечательностях, и одна из вещей, которую я хочу показать, это погода в каждом месте. В настоящее время мои местоположения хранятся с латентными координатами, и их можно искать по радиусу. Я хотел бы использовать 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]
}
Мои вопросы:
- Как я могу создать эту коллекцию (я видел это - могу ли я сделать что-то подобное и регулярно обновлять существующие записи в коллекции?)
- Нужно ли просто жить на сервере или на клиенте тоже?
- Нужно ли манипулировать данными, чтобы заставить работать гео поиск?
- Это даже правильный способ приблизиться к этому?
EDIT / UPDATE2
Этот вопрос слишком длинный / много? Такое ощущение, что это так. Может быть, я должен разделить это.
1 ответ
Да, легко возможно. Поскольку ваш вопрос настолько велик, я дам вам объяснение высокого уровня того, что я думаю, что вам нужно сделать.
Вам нужно создать коллекцию, в которую вы хотите сохранить данные о погоде. Работник, который запрашивает новые данные и обновляет коллекцию с заданным интервалом. Используйте что-то вроде cron-tick для планирования интервала. Запрос данных должен происходить только на стороне сервера, и я могу рекомендовать для этого пакет npm запроса.
Meteor.публикуйте коллекцию погоды и сделайте так, чтобы клиент подписался на нее, при желании можно указать фильтр для ее местоположения.
Теперь вы должны получать данные о погоде на своем клиенте и быть в состоянии с ним сойти с ума.