为多个位置提取天气数据的最有效方法

时间:2014-05-22 09:57:57

标签: meteor weather-api

我正在制作一个流星移动应用程序,该应用程序显示有关当地景点的信息,我要展示的其中一项是每个地点的天气。我目前使用latlng坐标存储我的位置,并且可以通过半径进行搜索。我想使用openweathermap api来提取一些有用的“当前条件”信息,以便当用户查看条目时他们可以看到基本的天气数据。理想情况下,我想限制传出请求的数量,以保持页面的快节奏(以及API请求下降)

我想知道我是否可以创建我定期更新的天气数据的服务器集合,服务器端(每小时?)我的客户端然后查询(可能使用mongo $ near lookup?) - 这样我的所有数据正在流星内处理,而不是每个客户都要从API中获取最新数据。我不想迭代遍历列表中的所有位置,并为每个位置单独调用api,因为我有大约。 400个地点(!)。我担心我不熟悉API请求(以及流星本身),如果这是一个措辞不好的问题,那么道歉。

我不完全确定这是否可行,或者它是否是最好的方法 - 任何建议(以及任何有用的代码片段的链接!)将不胜感激!

编辑/更新!

好的,我还没有设法让这个工作,但我有一些更有用的数据细节! 如果我向openweather API发出请求,我可以获取所有位置的数据(我想添加/更新到集合)。然后我可以定期查找,而不是每次用户查看某个位置时直接向他们发出客户端请求。 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" } ] }, ... 理想情况下,我想构建我自己的本地“天气”集合,我可以使用mongo的$ near(以保持出站请求,并加快速度)进行搜索,但我不知道这是否可行,因为格式是数据重新出现 - 我想我需要像这样构建我的位置数据才能使用地理搜索:

"location": { "type": "Point", "coordinates": [-5.47505,50.125561] } 我的问题是:

  1. 我如何构建该集合(我见过this - 我可以做类似的事情并定期更新集合中的现有条目吗?)
  2. 是否只需要在服务器或客户端上生活?
  3. 我是否需要操作数据才能使地理搜索工作?
  4. 这是否是接近它的正确方法?
  5. EDIT / UPDATE2

    这个问题太长/太多了吗?感觉就像这样。也许我应该把它分开。

1 个答案:

答案 0 :(得分:0)

很容易就可以了。因为你的问题太大了,我会给你一个关于我认为你需要做的事情的高级解释。

您需要创建一个集合,以便保存天气数据。 请求工作程序,它请求新数据并按设定的时间间隔更新集合。使用类似cron-tick的内容来安排间隔。 请求数据应该只发生在服务器端,我可以推荐request npm包。

Meteor.publish天气集合,并让客户订阅该天气集合,并可选择对其进行过滤。

您现在应该在您的客户端获取天气数据,并且应该能够变得非常奇怪。