es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pasando un carácter no ASCII en la URL de Steam.

Estoy intentando obtener el precio de un artículo StatTrak™ Dual Berettas | Panther (Factory New). Sin embargo, el TM está causando un problema ya que urllib lo trata como un carácter no ASCII. He encontrado esto en https://stackoverflow.com/questions/4389572/how-to-fetch-a-non-ascii-url-with-urlopen pero por alguna razón Steam está devolviendo un error 500.

from urllib.parse import quote 

def get_price(item_name):
    base_url = 'http://steamcommunity.com/market/priceoverview/?appid=730¤cy=1&market_hash_name={}'
    print(base_url.format(quote(item_name)))
    request = urllib.request.urlopen(base_url.format(quote(item_name)))

URL de salida (después de analizar): http://steamcommunity.com/market/priceoverview/?appid=730&currency=1&markethashname=StatTrak%E2%84%A2%2520Dual%2520Berettas%2520%7C%2520Panther%2520%28Factory%2520New%29

URL de trabajo (realizado en el navegador): https://steamcommunity.com/market/priceoverview/?appid=730&currency=1&markethashname=StatTrak%E2%84%A2%20Dual%20Berettas%20|%20Panther%20(Factory%20New)

Parece que necesito pasar esto, pero urllib no me permite. ¿Qué puedo hacer?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la forma en que urllib está codificando la URL con el carácter TM. Una solución podría ser reemplazar manualmente el carácter TM por su código ASCII (“%E2%84%A2”) y luego codificar la URL utilizando urllib.

    Aquí está el código actualizado:

    from urllib.parse import quote
    
    def get_price(item_name):
        item_name = item_name.replace("™", "%E2%84%A2")
        base_url = 'http://steamcommunity.com/market/priceoverview/?appid=730&currency=1&market_hash_name={}'
        encoded_name = quote(item_name)
        url = base_url.format(encoded_name)
        print(url)
        request = urllib.request.urlopen(url)
    

    Este código reemplaza el carácter TM por su código ASCII (“%E2%84%A2”) y luego codifica la URL utilizando urllib. Ahora puedes intentar ejecutar el código nuevamente para ver si obtiene el precio del artículo sin errores.

Comments are closed.