pythonhttpurllibweather-apigoogle-weather-api

Python HTTP Error 403 Forbidden


I am a bit of a Python Newbie, and I've just been trying to get some code working.

Below is the code, and also the nasty error I keep getting.

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

Now is the error:

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

Thanks for any help I can get!


Solution

  • The 403 error doesn't come from your code but from Google. Google lets you know that you don't have permission to access the resource you were requesting, in this case the weather API, because it has been discontinued (403 technically stands for Forbidden, they could also have gone for 404 Not Found or 410 Gone).

    For more information, read http://thenextweb.com/google/2012/08/28/did-google-just-quietly-kill-private-weather-api/

    Other than that, your code is correct.