Mensajes: 4
Temas: 1
Registro en: Jul 2020
Reputación:
0
Hola a todos.
Antes de comenzar a explicar el problema con el que me encuentro, quiero informar que soy nuevo en programación, llevo tan solo tres semanas en esto, y los conocimientos adquiridos han sido de forma autodidacta, de esta manera, pido que sean comprensibles con mi desconocimiento.
Hace dos días, hablando con un chico me paso un código que el mismo había creado, a partir del cual se puede monitorear productos de paginas web, para observar cuando vuelven a estar disponibles, teniendo como finalidad alojarlo en un servidor de discord. Una vez me paso este código, intenté configurarlo sin ningún tipo de éxito, debido en parte al desconocimiento que he comentado anteriormente. Me gustaria saber si hay alguien que ha tratado con codigo utilizado para este tipo de finalidad que estaría dispuesto a ayudarme a resolver ciertas dudas.
Aclarar que quiero esto para poder comprar ciertos articulos excluivos para uso propio, sin buscar ningun tipo de benificio economico a partir de reventar o actividades similares.
Un saludo y gracias de antemano.
Mensajes: 1.160
Temas: 3
Registro en: Feb 2016
Reputación:
66
Hola Pablo, bienvenido.
Sí, no hay problema en darte una mano con eso, pero la única forma es que pegues el código o la parte del código que te genera conflictos acá, porque esa es la dinámica de un foro.
No obstante, si recién estás empezando en programación, tal vez no sea lo más conveniente ir de lleno a cosas muy avanzadas.
Saludos!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!
Mensajes: 4
Temas: 1
Registro en: Jul 2020
Reputación:
0
06-07-2020, 07:18 AM
(Última modificación: 06-07-2020, 01:47 PM por Francisco.)
(04-07-2020, 01:13 PM)Francisco escribió: Hola Pablo, bienvenido.
Sí, no hay problema en darte una mano con eso, pero la única forma es que pegues el código o la parte del código que te genera conflictos acá, porque esa es la dinámica de un foro.
No obstante, si recién estás empezando en programación, tal vez no sea lo más conveniente ir de lleno a cosas muy avanzadas.
Saludos! Hola Francisco, muchísimas gracias por explicarme la mecánica del foro. Me dispongo a adjuntar el código, ademas de este, el chico que te comenté me adjunto otro archivo (discord_hooks.py) del cual, en teoria, y tal y cómo me comentó no tiene ningun problema, ademas de dos archivos de texto (proxies.txt y other_sites.txt) necesarios para el correcto funcionamiento.
Destacar que la primera linea de codigo que adjunto, es la linea 37, con el fin de que puedan relacionar estas lineas de codigo con las que adjunto en la screenshoot. A lado del codigo he escrito la linea que es, referente a la screenshoot, con el fin de poder facilitarles la visualización
Código
import requests from bs4 import BeautifulSoup as soup import requests from log import log as log import time from datetime import datetime import random import sqlite3 from bs4 import BeautifulSoup as soup from discord_hooks import Webhook from threading import Thread class Product(): def __init__(self, title, link, stock, keyword): ''' (str, str, bool, str) -> None Creates an instance of the Product class. ''' # Setup product attributes self.title = title self.stock = stock self.link = link self.keyword = keyword def read_from_txt(path): ''' (None) -> list of str Loads up all sites from the sitelist.txt file in the root directory. Returns the sites as a list ''' # Initialize variables raw_lines = [] lines = [] # Load data from the txt file try: f = open(path, "r") raw_lines = f.readlines() f.close() # Raise an error if the file couldn't be found except: log('e', "Couldn't locate <" + path + ">.") raise FileNotFound() if(len(raw_lines) == 0): raise NoDataLoaded() # Parse the data for line in raw_lines: lines.append(line.strip("\n")) # Return the data return lines def add_to_db(product): ''' (Product) -> bool Given a product <product>, the product is added to a database <products.db> and whether or not a Discord alert should be sent out is returned. Discord alerts are sent out based on whether or not a new product matching keywords is found. ''' # Initialize variables title = product.title stock = str(product.stock) link = product.link keyword = product.keyword alert = False # Create database conn = sqlite3.connect('products.db') c = conn.cursor() c.execute("""CREATE TABLE IF NOT EXISTS products(title TEXT, link TEXT UNIQUE, stock TEXT, keywords TEXT)""") # Add product to database if it's unique try: c.execute("""INSERT INTO products (title, link, stock, keywords) VALUES (?, ?, ?, ?)""", (title, link, stock, keyword)) log('s', "Found new product with keyword " + keyword + ". Link = " + link) alert = True except: # Product already exists pass #log('i', "Product at URL <" + link + "> already exists in the database.") # Close connection to the database conn.commit() c.close() conn.close() # Return whether or not it's a new product return alert def send_embed(product): ''' (Product) -> None Sends a discord alert based on info provided. ''' url = 'https://discordapp.com/api/webhooks/728519194660044840/67DY4NDad2AsYqsPXuSuX9CbMS7g4nbj0pCmpfdXnbTT6fymwDVDvsx0BpdUNfBjRBXQ' embed = Webhook(url, color=123123) embed.set_author(name='NERYS', icon='https://static.zerochan.net/Daenerys.Targaryen.full.2190849.jpg') embed.set_desc("Found product based on keyword " + product.keyword) embed.add_field(name="Link", value=product.link) embed.set_footer(text='NERYS by @snivynGOD', icon='https://static.zerochan.net/Daenerys.Targaryen.full.2190849.jpg', ts=True) embed.post() def monitor(link, keywords): ''' (str, list of str) -> None Given a URL <link> and keywords <keywords>, the URL is scanned and alerts are sent via Discord when a new product containing a keyword is detected. ''' log('i', "Checking site <" + link + ">...") # Parse the site from the link pos_https = link.find("https://") pos_http = link.find("http://") if(pos_https == 0): site = link[8:] end = site.find("/") if(end != -1): site = site[:end] site = "https://" + site else: site = link[7:] end = site.find("/") if(end != -1): site = site[:end] site = "http://" + site # Get all the links on the "New Arrivals" page try: r = requests.get(link, timeout=5, verify=False) except: log('e', "Connection to URL <" + link + "> failed. Retrying...") time.sleep(5) try: r = requests.get(link, timeout=8, verify=False) except: log('e', "Connection to URL <" + link + "> failed.") return page = soup(r.text, "html.parser") raw_links = page.findAll("a") hrefs = [] for raw_link in raw_links: try: hrefs.append(raw_link["href"]) except: pass # Check for links matching keywords for href in hrefs: found = False for keyword in keywords: if(keyword.upper() in href.upper()): found = True if("http" in href): product_page = href else: product_page = site + href product = Product("N/A", product_page, True, keyword) alert = add_to_db(product) if(alert): send_embed(product) if(__name__ == "__main__"): # Ignore insecure messages requests.packages.urllib3.disable_warnings() # Keywords (seperated by -) keywords = [ "monedero-con-llavero-monogram-000941", "gold-toe", "pharrell", "free-throw-line", "kendrick", "tinker", "game-royal", "yeezy", "human-race", "big-bang", "dont-trip", "kung-fu-kenny", "playstation", "valentine", "ovo-air-jordan", "ovo-jordan", "air-jordan-1", "wotherspoon" ] # Load sites from file sites = read_from_txt("other-sites.txt") # Start monitoring sites while(True): threads = [] for site in sites: t = Thread(target=monitor, args=(site, keywords)) threads.append(t) t.start() time.sleep(2) # 2 second delay before going to the next site
A continuación adjunto un screenshoot con los problemas que me aparecieron.
https://gyazo.com/6b9af685d094dffc1381b2a7de990939
Muchas gracias por la ayuda ofrecida.
Mensajes: 1.160
Temas: 3
Registro en: Feb 2016
Reputación:
66
Hola Pablo. Bien, por los errores que indica tu editor, parece que te falta instalar Requests. Tenés que ejecutar este comando en la consola:
Código: pip install requests
Después te está marcando que hay dos clases que no existen: FileNotFound y NoDataLoaded. O te falta ahí una parte del código, o te faltan importarlas de otro archivo.
Como sea, para saber exactamente qué errores está tirando el programa, es mejor ejecutarlo y ver lo que se imprime en la consola, el editor de código no siempre es muy preciso con los errores.
Saludos!
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!
Mensajes: 4
Temas: 1
Registro en: Jul 2020
Reputación:
0
07-07-2020, 04:25 AM
(Última modificación: 07-07-2020, 05:25 AM por PaabloFdeez.)
(06-07-2020, 01:49 PM)Francisco escribió: Hola Pablo. Bien, por los errores que indica tu editor, parece que te falta instalar Requests. Tenés que ejecutar este comando en la consola:
Código: pip install requests
Después te está marcando que hay dos clases que no existen: FileNotFound y NoDataLoaded. O te falta ahí una parte del código, o te faltan importarlas de otro archivo.
Como sea, para saber exactamente qué errores está tirando el programa, es mejor ejecutarlo y ver lo que se imprime en la consola, el editor de código no siempre es muy preciso con los errores.
Saludos! Hola de nuevo Francisco.
Como bien me comentaste, el problema de los requests era por un error en la instalación, que ya solucioné.
He probado a ejecutar el código, y esto es lo que aparece
https://gyazo.com/db0b70cd4545d7ba81e697bff0acaced
A su vez, en el editor de código siguen apareciendo estos errores, hablé con el creador, y me comento que el código estaba un poco anticuado, y era posible que ciertas lineas tendrian que ser modificadas, o incluso eliminadas. No sé si sabes de que se pueda tratar, de cualquier modo, gracias por la ayuda ofrecida.
https://gyazo.com/da6dfa1fb3e37b48558a7797af4dd3a6
Un saludo.
Mensajes: 1.160
Temas: 3
Registro en: Feb 2016
Reputación:
66
Hola Pablo.
Por los errores que muestra el editor, diría que falta alguna parte de ese código (hay dos excepciones que no están definidas). Yo te recomendaría que continúes con tus estudios del lenguaje para que en un tiempo te puedas apropiar del programa y modifcarlo a tu gusto (no es un código muy complejo).
Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!
Mensajes: 4
Temas: 1
Registro en: Jul 2020
Reputación:
0
07-07-2020, 04:48 PM
(Última modificación: 08-07-2020, 04:12 AM por PaabloFdeez.)
(07-07-2020, 12:27 PM)Francisco escribió: Hola Pablo.
Por los errores que muestra el editor, diría que falta alguna parte de ese código (hay dos excepciones que no están definidas). Yo te recomendaría que continúes con tus estudios del lenguaje para que en un tiempo te puedas apropiar del programa y modifcarlo a tu gusto (no es un código muy complejo).
Saludos Muchas gracias por todo Francisco, eso haré, de todos modos, se te ocurre algo que se pueda hacer para corregir esos errores?
Un saludo.
Como última cuestion, me gustaria saber si es posible que me dijeses, segun tu opinion, cuales son los mejores lugares para aprender python, de manera gratuita
Mensajes: 1.160
Temas: 3
Registro en: Feb 2016
Reputación:
66
Hola Pablo.
Para los errores de las excepciones, podrías agregar esto al comienzo del archivo:
class FileNotFound(Exception): pass class NoDataLoaded(Exception): pass
En cuanto a los tutoriales, cualquier libro introductorio de Python te va a servir. Te dejo también nuestro tutorial: https://tutorial.recursospython.com/introduccion/.
Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!
|