【问题标题】:Weather API, Python or JavaScript天气 API、Python 或 JavaScript
【发布时间】:2013-04-21 05:25:24
【问题描述】:

我正在尝试让天气 API 正常工作。但是我怎样才能得到 C° 和天气图标?没有别的吗?

【问题讨论】:

标签: python django weather-api


【解决方案1】:

使用 pip 安装 pywapi 后,打开 ipython shell 并探索 pywapi 可以做什么。这是一个实际为您提供所需内容的示例:-

In [1]: import pywapi

In [2]: pywapi.
pywapi.GOOGLE_CITIES_URL                   pywapi.YAHOO_WEATHER_URL                   pywapi.get_weather_from_weather_com        pywapi.urlopen
pywapi.GOOGLE_COUNTRIES_URL                pywapi.getText                             pywapi.get_weather_from_yahoo              pywapi.wind_beaufort_scale
pywapi.NOAA_WEATHER_URL                    pywapi.get_cities_from_google              pywapi.minidom                             pywapi.wind_direction
pywapi.URLError                            pywapi.get_countries_from_google           pywapi.quote                               pywapi.xml_get_attrs
pywapi.WEATHER_COM_URL                     pywapi.get_everything_from_yahoo           pywapi.re                                  pywapi.xml_get_ns_yahoo_tag
pywapi.YAHOO_WEATHER_NS                    pywapi.get_weather_from_noaa               pywapi.sys                                 pywapi.yield_all_country_city_codes_yahoo

In [2]: pywapi.get_weather_from_yahoo?
Type:       function
String Form:<function get_weather_from_yahoo at 0x10daeb9b0>
File:       /Users/calvin/.virtualenvs/myweather/lib/python2.7/site-packages/pywapi.py
Definition: pywapi.get_weather_from_yahoo(location_id, units='metric')
Docstring:
Fetches weather report from Yahoo! Weather

Parameters:
  location_id: A five digit US zip code or location ID. To find your location ID,
  browse or search for your city from the Yahoo! Weather home page (http://weather.yahoo.com/)
  The weather ID is in the URL for the forecast page for that city. You can also get
  the location ID by entering your zip code on the home page. For example, if you
  search for Los Angeles on the Weather home page, the forecast page for that city
  is http://weather.yahoo.com/forecast/USCA0638.html. The location ID is USCA0638.

  units: type of units. 'metric' for metric and '' for non-metric
  Note that choosing metric units changes all the weather units to metric,
  for example, wind speed will be reported as kilometers per hour and
  barometric pressure as millibars.

Returns:
  weather_data: a dictionary of weather data that exists in XML feed.
  See http://developer.yahoo.com/weather/#channel

In [3]: pywapi.get_weather_from_yahoo('USCA0638')
Out[3]:
{'astronomy': {'sunrise': u'6:16 am', 'sunset': u'7:28 pm'},
 'atmosphere': {'humidity': u'67',
  'pressure': u'1013.7',
  'rising': u'1',
  'visibility': u'16.09'},
 'condition': {'code': u'33',
  'date': u'Sat, 20 Apr 2013 9:46 pm PDT',
  'temp': u'18',
  'text': u'Fair',
  'title': u'Conditions for Los Angeles, CA at 9:46 pm PDT'},
 'forecasts': [{'code': u'31',
   'date': u'20 Apr 2013',
   'day': u'Sat',
   'high': u'26',
   'low': u'15',
   'text': u'Clear'},
  {'code': u'32',
   'date': u'21 Apr 2013',
   'day': u'Sun',
   'high': u'26',
   'low': u'14',
   'text': u'Sunny'},
  {'code': u'34',
   'date': u'22 Apr 2013',
   'day': u'Mon',
   'high': u'22',
   'low': u'13',
   'text': u'Mostly Sunny'},
  {'code': u'30',
   'date': u'23 Apr 2013',
   'day': u'Tue',
   'high': u'21',
   'low': u'14',
   'text': u'Partly Cloudy'},
  {'code': u'30',
   'date': u'24 Apr 2013',
   'day': u'Wed',
   'high': u'19',
   'low': u'13',
   'text': u'Partly Cloudy'}],
 'geo': {'lat': u'34.05', 'long': u'-118.23'},
 'html_description': u'\n[![][5]][5]<br />\n<b>Current Conditions:</b><br />\nFair, 18 C<BR />\n<BR /><b>Forecast:</b><BR />\nSat - Clear. High: 26 Low: 15<br />\nSun - Sunny. High: 26 Low: 14<br />\nMon - Mostly Sunny. High: 22 Low: 13<br />\nTue - Partly Cloudy. High: 21 Low: 14<br />\nWed - Partly Cloudy. High: 19 Low: 13<br />\n<br />\n<a href="http://us.rd.yahoo.com/dailynews/rss/weather/Los_Angeles__CA/*http://weather.yahoo.com/forecast/USCA0638_c.html">Full Forecast at Yahoo! Weather</a><BR/><BR/>\n(provided by <a href="http://www.weather.com" >The Weather Channel</a>)<br/>\n',
 'link': u'http://us.rd.yahoo.com/dailynews/rss/weather/Los_Angeles__CA/*http://weather.yahoo.com/forecast/USCA0638_c.html',
 'location': {'city': u'Los Angeles', 'country': u'US', 'region': u'CA'},
 'title': u'Yahoo! Weather - Los Angeles, CA',
 'units': {'distance': u'km',
  'pressure': u'mb',
  'speed': u'km/h',
  'temperature': u'C'},
 'wind': {'chill': u'18', 'direction': u'0', 'speed': u'0'}}

正如您在结果中看到的,您可以在html_description (http://l.yimg.com/a/i/us/we/52/33.gif) 和temp 中获得天气图标。由于返回给您的结果就是一切,因此您需要像使用 python 字典一样提取/访问它。

更新

  1. 转到http://weather.yahoo.com/ 并输入您的邮政编码(或您所在的城市)。
  2. 如果有多个选择,请选择您想要的。
  3. 在“6-10 天”栏下找到“扩展预报”链接。点击它。
  4. 查看 URL 地址栏和数字是您所在城市的邮政编码。

所有城市代码

这里是帮助您获取所有国家、城市代码的功能

In [4]: pywapi.yield_all_country_city_codes_yahoo?
Type:       function
String Form:<function yield_all_country_city_codes_yahoo at 0x10daebaa0>
File:       /Users/calvin/.virtualenvs/myweather/lib/python2.7/site-packages/pywapi.py
Definition: pywapi.yield_all_country_city_codes_yahoo(country_code, cities)
Docstring:
Yield all cities codes for a specific country.

Parameters:
  country_code: A four letter code of the necessary country. For example 'GMXX' or 'FRXX'.
  cities: The number of cities to yield

Returns:
  country_city_codes: A generator containing the city codes

【讨论】:

  • 非常好,让我试试这个。
  • 我也可以使用德国城市的德国邮政编码从雅虎获取数据吗?
  • 我安装了 pywapi 并将其放在 settings.py 中,但是一旦我导入到我的 views.py 中,它就会显示错误,说 pywapi 无法解析导入。可能是什么问题?
  • settings.pyviews.py? pywapi 不是 django 应用程序。一旦您将它安装在您的virtualenv 或您的全局站点包中(如果您不使用virtualenv),它将在您的views.py 中可用。 (你不应该把它放在settings.py,因为它不是一个django app). If you views.py`不能导入它,这意味着你的python路径设置错误。
  • 很酷,谢谢。但还有一个问题。我想动态获取数据,而不是固定城市名称。雅虎也可以吗?
【解决方案2】:

您可以使用 Metwit weather api
如果您可以在客户端实现它们:每天 200 个请求(基于 ip 的限制)不需要身份验证。覆盖全球,符合 JSON 和 REST 标准。您可以免费注册额外的 API 调用,如果您仍然需要在服务器端调用它们,基本计划非常便宜。

这里有一个 jQuery 中的小例子:http://jsbin.com/isukam/1 使用我们的 weather resource

完全披露:我拥有这个可爱的 API。

【讨论】:

  • 哇,太酷了。它非常轻巧且易于使用。谢谢你的提及,我可能正在使用这个版本
猜你喜欢
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 2013-07-06
  • 2019-05-28
  • 1970-01-01
  • 2012-04-15
相关资源
最近更新 更多