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.299
Temas: 3
Registro en: Feb 2016
Reputación:
71
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!
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
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("
"))
# 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.299
Temas: 3
Registro en: Feb 2016
Reputación:
71
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!
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.299
Temas: 3
Registro en: Feb 2016
Reputación:
71
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
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.299
Temas: 3
Registro en: Feb 2016
Reputación:
71
Hola Pablo.
Para los errores de las excepciones, podrías agregar esto al comienzo del archivo:
Código: 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
|