我是一个Python新手,我一直试图让一些代码工作。
以下是代码,以及我不断得到的令人讨厌的错误。
import pywapi import string google_result = pywapi.get_weather_from_google('Brisbane') print google_result def getCurrentWather(): city = google_result['forecast_information']['city'].split(',')[0] print "It is " + string.lower(google_result['current_conditions']['condition']) + " and " + google_result['current_conditions']['temp_c'] + " degree centigrade now in "+ city+".\n\n" return "It is " + string.lower(google_result['current_conditions']['condition']) + " and " + google_result['current_conditions']['temp_c'] + " degree centigrade now in "+ city def getDayOfWeek(dayOfWk): #dayOfWk = dayOfWk.encode('ascii', 'ignore') return dayOfWk.lower() def getWeatherForecast(): #need to translate from sun/mon to sunday/monday dayName = {'sun': 'Sunday', 'mon': 'Monday', 'tue': 'Tuesday', 'wed': 'Wednesday', ' thu': 'Thursday', 'fri': 'Friday', 'sat': 'Saturday', 'sun': 'Sunday'} forcastall = [] for forecast in google_result['forecasts']: dayOfWeek = getDayOfWeek(forecast['day_of_week']); print " Highest is " + forecast['high'] + " and "+ "Lowest is " + forecast['low'] + " on " + dayName[dayOfWeek] forcastall.append(" Highest is " + forecast['high'] + " and "+ "Lowest is " + forecast['low'] + " on " + dayName[dayOfWeek]) return forcastall
现在是错误:
Traceback (most recent call last): File "C:\Users\Alex\Desktop\JAVIS\JAISS-master\first.py", line 5, in <module> import Weather File "C:\Users\Alex\Desktop\JAVIS\JAISS-master\Weather.py", line 4, in <module> google_result = pywapi.get_weather_from_google('Brisbane') File "C:\Python27\lib\site-packages\pywapi.py", line 51, in get_weather_from_google handler = urllib2.urlopen(url) File "C:\Python27\lib\urllib2.py", line 126, in urlopen return _opener.open(url, data, timeout) File "C:\Python27\lib\urllib2.py", line 400, in open response = meth(req, response) File "C:\Python27\lib\urllib2.py", line 513, in http_response 'http', request, response, code, msg, hdrs) File "C:\Python27\lib\urllib2.py", line 438, in error return self._call_chain(*args) File "C:\Python27\lib\urllib2.py", line 372, in _call_chain result = func(*args) File "C:\Python27\lib\urllib2.py", line 521, in http_error_default raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) HTTPError: HTTP Error 403: Forbidden
感谢您的帮助!
答案 0 :(得分:4)
403错误不是来自您的代码,而是来自Google。谷歌让你知道你没有权限访问你请求的资源,在这种情况下是天气API,因为它已经停止(403技术上代表禁止,他们也可能已经去了404 Not Found或410 Gone )。
有关详情,请参阅http://thenextweb.com/google/2012/08/28/did-google-just-quietly-kill-private-weather-api/
除此之外,您的代码是正确的。
答案 1 :(得分:3)
这不是你的错误。谷歌不久前停止了它的天气API。
如果您需要免费天气API,我建议您使用我正在构建的服务Metwit weather API。这是使用metwit-weather:
的最简单的工作示例from metwit import Metwit
weather = Metwit.weather.get(location_lat=45.45, location_lng=9.18)
此处可以找到更多示例:http://soup.metwit.com/post/45997437810/python-weather-by-metwit
答案 2 :(得分:0)
我正在使用Python3并遇到同样的问题。我发现Google会阻止不会覆盖User-Agent和Accept-Encoding标头的urllib。
用于测试搜索的标题:
GET /search?q=f1+2015 HTTP/1.1
Accept-Encoding: identity
Connection: close
User-Agent: Python-urllib/3.4
Host: 127.0.0.1:8076
我把&#39; Accept-Encoding&#39;到&#39;&#39;和&#39;用户代理&#39;去测试&#39;并且403错误停止了。