Pregunta

Estoy tratando de pasar un texto a esto API de legibilidad al igual que:

text = 'this reminds me of the Dutch 2001a caravan full of smoky people Auld Lang Syne'
# construct Readability Metrics API url
request_url = 'http://ipeirotis.appspot.com/readability/GetReadabilityScores?format=json&text=%s' % text
request_url = urllib.quote_plus(request_url.encode('utf-8'))
# make request
j = json.load(urllib.urlopen(request_url))

Sin embargo, recibo este error en la última línea:

Errno 2] No hay dicho archivo o directorio: 'http://ipeirotis.appspot.com/readability/getreadabilityscores?format=json&text=this+reminds+Me+Of+The+Dutch+2001a+caravan+FulL+F+Smoky +personas+auld+lang+syne '

Sin embargo, la URL en el error es válida y devuelve una respuesta cuando la visita. ¿Cómo codifico la URL para que pueda usar URLOPEN? Muchas gracias.

¿Fue útil?

Solución

Está citando la URL completa, incluido el http: // y qué no. Si intenta imprimir el valor realmente de request_url, obtiene

>>> print request_url
http%3A%2F%2Fipeirotis.appspot.com%2Freadability%2FGetReadabilityScores%3Fformat
%3Djson%26text%3Dthis+reminds+me+of+the+Dutch+2001a+caravan+full+of+smoky+people
+Auld+Lang+Syne

Que no es lo que quieres. Solo desea citar las partes que desea ser un solo argumento en el sitio web. Intenté lo siguiente y parecía funcionar:

text = 'this reminds me of the Dutch 2001a caravan full of smoky people Auld Lang Syne'
# construct Readability Metrics API url
request_url = 'http://ipeirotis.appspot.com/readability/GetReadabilityScores?format=json&text=%s' % urllib.quote_plus(text.encode('utf-8'))
# make request
j = json.load(urllib.urlopen(request_url))

Otros consejos

Use urllib.urlencode para codificar solo la cadena de consulta, como así:

request_url = 'http://ipeirotis.appspot.com/readability/GetReadabilityScores?%s' % urllib.urlencode({'format': 'json', 'text': text})

La codificación de la URL completa codificará las cortes y las colons, y desea que permanezcan sin codificación para que se analizará correctamente como una URL (y no se confunde con un archivo local).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top