0

urllib2に渡されるはずのURLをリストに保存しました。ただし、urllibはこれをあまり好まないようで、理由がわかりません。

これが私が持っているものです:

url = list[1]
response = urllib2.urlopen(url)
html = response.read()

URLは、次のようなGoogleマップのDirections WebAPIURLです。

http://maps.googleapis.com/maps/api/directions/json?origin=[origin]&destination=[destination]&waypoints=optimize:true|[waypoint1]|[waypoint2]&sensor=false

これを実行しようとすると、取得されたhtmlは常に次のようになります。

{
"routes" : [],
"status" : "INVALID_REQUEST"
}

渡されたURLに問題があることを示します。ただし、次のように、URLを取得して直接割り当てます。

url = "http://maps.googleapis.com/maps/api/directions/json?origin=[origin]&destination=[destination]&waypoints=optimize:true|[waypoint1]|[waypoint2]&sensor=false"
response = urllib2.urlopen(url)
html = response.read()

結果は、(私にとっては)次のような重要な最終部分でうまくいきます。

         "warnings" : [],
         "waypoint_order" : [ 2, 0, 7, 5, 6, 4, 3, 1 ]
      }
   ],
   "status" : "OK"
}

したがって、私の(うまくいけばそれほど愚かではない)質問は、URLが直接割り当てられているのに、リストからのものではないのに、なぜurllibがその仕事をするのですか?

助けてくれてありがとう、J

PS:フォーラムソフトウェアがいつも私の「こんにちは」の挨拶を断ち切る理由はありますか?

4

1 に答える 1

0

私はついに問題を解決しました!

少し戻ってもう一度考えてみると、とても簡単でした。グーグルのWeb APIから回答を得ました。つまり、urllib2は何かを渡しました。ただし、APIバックエンドに意味のないものを送信していたに違いありません。私が幸運にもドイツ語のアドレスを含むURLは、ウムラウトによって引き起こされている問題を推測しました。

そのため、各ウムラウトを非ウムラウトの代替関数に置き換える関数にURLを渡すだけで、突然すべてが正常に機能しているように見えました。

誰かが同様の問題に遭遇した場合、これが私がそれを解決した方法です:

# Function for replacing all umlauts
def replaceUmlauts(text):
    dic = {'Ä':'Ae', 'ä':'ae', 'Ö':'Oe', 'ö':'oe', 'Ü':'Ue', 'ü':'ue', 'ß':'ss'}
    for i, j in dic.iteritems():
        text = text.replace(i, j)
    return text

次に、単に使用します

response = urllib2.urlopen(replaceUmlauts(url))
于 2012-08-28T14:11:41.003 に答える