2017-10-20 16 views
0

気象データを取得するための簡単なCLIアプリケーションを作成しようとしています。残念ながら私は早い段階で立ち往生しているので、これではあまり遠くない。街のために尋ねられたとき、私は、例やロンドン、英国のロンドンに入ることができるpywapiでユーザ入力からロケーションIDを取得

import pywapi, string 

loc=input("What is the city you're closest to?") 
loc=loc.lower 

#this will give you a dictionary of all cities in the world with this city's name Be specific (city, country)! 
loc_id=pywapi.get_location_ids(loc) 
#apparently this is a needed workaround to access last item of dictionary 
for i in loc_id: 
    loc_id=i 

#before I go on to code anything further, I just want to use print to check that I've got the two variables I need 
print (loc,loc_id) 

が、両方のエラーを投げる:これは、これまでの私のコードです(これは私のローカルマシン上にある)

Traceback (most recent call last): 
    File "get_weather.py", line 7, in <module> 
    loc_id=pywapi.get_location_ids(loc) 
    File "/home/james/.local/lib/python3.4/site-packages/pywapi.py", line 825, in get_location_ids 
    loc_id_data = get_loc_id_from_weather_com(search_string) 
    File "/home/james/.local/lib/python3.4/site-packages/pywapi.py", line 856, in get_loc_id_from_weather_com 
    url = LOCID_SEARCH_URL % quote(search_string) 
    File "/usr/lib/python3.4/urllib/parse.py", line 694, in quote 
    return quote_from_bytes(string, safe) 
    File "/usr/lib/python3.4/urllib/parse.py", line 719, in quote_from_bytes 
    raise TypeError("quote_from_bytes() expected bytes") 
TypeError: quote_from_bytes() expected bytes 

そして異なっているこのエラーは、私がPythonanywhere

Traceback (most recent call last): 
    File "/home/pydavith/get_weather.py", line 7, in <module> 
    loc_id=pywapi.get_location_ids(loc) 
    File "/home/pydavith/.local/lib/python3.6/site-packages/pywapi.py", line 825, in get_location_ids 
    loc_id_data = get_loc_id_from_weather_com(search_string) 
    File "/home/pydavith/.local/lib/python3.6/site-packages/pywapi.py", line 852, in get_loc_id_from_weather_co 
m 
    search_string = unidecode(search_string) 
    File "/usr/local/lib/python3.6/dist-packages/unidecode/__init__.py", line 48, in unidecode_expect_ascii 
    bytestring = string.encode('ASCII') 
AttributeError: 'builtin_function_or_method' object has no attribute 'encode' 

を使用していされたときに誰もがここで間違っているものの任意のアイデアを持っていますか?私はduckduckgoedと広範囲にグーグルを持っているが、何も光に来ていない。助けていただければ幸いです!

+0

あなたは2つの異なるバージョンのPython(3.4と3.6)を使用しています。 – hwjp

答えて

0

さて、私は自分自身で実行可能な答えに来ました。このコードをここで共有しているのは、他の誰かを助ける場合です。

私がここで変更したことがたくさんあるので、どこから始めたらいいのか分かりません。つまり、最初に投稿したコードには多くのエラーと改善が必要でした。

import pywapi 

# getting input from the user regarding location 
#this will give a dictionary of all cities in the world with this city's name 
loc=str.title(input("What is the city you're closest to? ")) 
print("Searching for ", loc) 
loc_id=pywapi.get_location_ids(loc) 
#Now we have a dictionary (it seems as standard it returns a maximum of ten key:value pairs. Now to convert it to a list just so I can number the entries and ultimately allow the user select the correct entry easily. (Note, there may be a way to do this without converting the dictionary to a list, but I couldn't find it) 
loc_list = [ [k,v] for k, v in loc_id.items() ] 

#Now I am going to check if the length of the list is over 1 value (i.e. if there's more than one choice, and if there is, to run a for loop printing each entry with a number 

list_leng=len(loc_list) 
if list_leng >1: 
#fix some value for x and y to be used in the for loop 
    x=1 
    y = 0 
    for l in loc_id: 
     print (x,loc_list[y]) 
     x = x+1 
     y=y+1 
    index_choice=(int(input("Which city do you mean? Enter a choice from 1 to " + str(list_leng) + ": ")))-1 
else: 
    index_choice=0 


loc_id=loc_list[index_choice] 
print("You selected ",loc_id[1]) 
loc_id=loc_id[0] 

print ("Location ID for "+loc+" is ",loc_id) 

def gettt_weather(loc_id): 
    """Fetches the weather information from Weather.com using a location stored under the variable loc_id""" 
    print("Looking up the weather for "+loc) 
    weather_com_result = pywapi.get_weather_from_weather_com(loc_id,units='metric') 
    print ("Weather.com says that it is "+ weather_com_result['current_conditions']['text'].lower()+" and", weather_com_result['current_conditions']['temperature']+"°C now in " + loc) 

gettt_weather(loc_id) 

とにかくこれは私が欲しかったとおりに機能するので、どこかの初心者には便利だと思います。誰かさらなる改善があれば教えてください。

関連する問題