2017-08-23 8 views
4

実際には、これを達成するためのベストプラクティスの要求として、質問をよりよく言い表すことができます。これは簡単でなければならないので、イライラしています。python 3とフラスコで使用するurllib2を置き換えるpythonモジュールはありますか?

私はFlask by Exampleのチュートリアルに従っています。私はpython 3の最新バージョンを使用しています。テキストに使用されているurllib2はpython 3では見つかりません。テキストから、データをダウンロードするurllib2と、パラメータを正しくエンコードするurllibが必要です。ちょうど1つの関数、get_weather私は動作する更新されたアプローチを見つけることができません。

私が達成しようとしていることを示すために、関連するコード行を示します。私はPython 3のフラスコの最新バージョンを使用しています.Json APIをダウンロードしようとするまで問題が表示されなかったので、テンプレートファイルのリストは表示しません。

したがって、ファイルへの最初の変更には、urllibとjsonのインポートが含まれます。この本はurllib2が利用可能になった2015年のものです。私たちはopenwheathermap.orgからWeatherを取得しようとしています。 urllib2が見つからなかったので、私は本のコードを少し修正しました。

私は何かアドバイスをいただければ幸いです

WEATHER_URL = "http://api.openweathermap.org/data/2.5/weather?q={}&APPID=myappid" 

def get_weather(query): 
    query = urllib.parse.quote(query) 
    url = WEATHER_URL.format(query) 
    data = urllib.request.urlopen(url).read() 
    parsed = json.loads(str(data)) 
    weather = None 
    if parsed.get('weather'): 
    weather = {'description': parsed['weather'][0]['description'], 
       'temperature': parsed['main']['temp'], 
       'city': parsed['name'], 
       'country': parsed['sys']['country'] 
       } 
    return weather 

を持っています。
おかげで、 ブルース

+2

私がリクエストライブラリーは非常に人気があると思います。 – Vasif

+0

urllib2のドキュメントに記載されているとおり: urllib2モジュールは、urllib.requestとurllib.errorという名前のPython 3のいくつかのモジュールに分割されています。 2to3ツールは、ソースをPython 3に変換する際に、自動的にインポートを適合させます。 –

+0

あなたが話しているこの問題は何ですか?もちろん、これは標準ライブラリ 'urllib'パッケージで行うことができます。モジュールを正しい方法でインポートするだけです。 – Abdou

答えて

5

あなたはHTTP操作を行うには俗にきれいなインターフェースを持っているrequestsライブラリを使用することができます。

ライブラリのURL。 http://www.python-requests.org/en/master/

あなたはインストールするには、シェル/ cmdの上

pip install requests 

を行うことができます。コードで

import requests 
response = requests.get(WEATHER_URL.format(query)) 
weather = response.json() # or something as easy as this. 
+0

urllib.parse.quote ) 行う?リクエストを行う前にフォームからデータを取得するときに、どの文字もエスケープする必要がありますか? –

関連する問題