Bonjour j'ai codé un bot discord voila le code :
import discord
from discord import Intents
import requests
from bs4 import BeautifulSoup
import time
TOKEN = 'MTA3NjYxMDMxNzkzODg1NTk0Ng.G274_J.pHx52fIL4gIpo3i31kKkdWN_Yp0Xgb3-GqbE5o'
CHANNEL_ID = 'https://discord.com/channels/1076616314862456953/1079388821667446864'
VINTED_URL = 'https://www.vinted.fr/vetements?search_text=&brand_id[]=53&brand_id[]=5977&brand_id[]=2703&brand_id[]=283953&brand_id[]=370427&brand_id[]=14491&brand_id[]=5774166&brand_id[]=687713&brand_id[]=5750136&size_id[]=207&size_id[]=208&size_id[]=209&status_ids[]=6&status_ids[]=1&status_ids[]=2&status_ids[]=3&catalog[]=79&catalog[]=1206&catalog[]=76¤cy=EUR&search_id=8292877209&order=newest_first'
intents = discord.Intents.default()
intents.members = True
client = discord.Client(intents=intents)
@client.event
async def on_ready():
print('Logged in as {0.user}'.format(client))
async def check_vinted():
response = requests.get(VINTED_URL)
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.select('.c-box')
if items:
for item in items:
title = item.select_one('.c-box__title').text.strip()
price = item.select_one('.c-box__price').text.strip()
image = item.select_one('.c-box__image img')['src']
link = 'https://www.vinted.fr' + item.select_one('.c-box__overlay')['href']
message = f'Nouvelle annonce Vinted : {title} - {price}\n{link}'
embed = discord.Embed(title=title, url=link, description=price)
embed.set_image(url=image)
channel = client.get_channel(CHANNEL_ID)
await channel.send(message, embed=embed)
@client.event
async def on_message(message):
if message.content.startswith('!start'):
last_announcements = set()
while True:
response = requests.get(VINTED_URL)
soup = BeautifulSoup(response.text, 'html.parser')
items = soup.select('.c-box')
if items:
new_announcements = set()
for item in items:
link = 'https://www.vinted.fr' + item.select_one('.c-box__overlay')['href']
new_announcements.add(link)
diff_announcements = new_announcements - last_announcements
for link in diff_announcements:
title = soup.select_one(f"a[href='{link}']").text.strip()
price = soup.select_one(f"a[href='{link}'] + .c-box__details .c-box__price").text.strip()
image = soup.select_one(f"a[href='{link}'] + .c-box__image img")['src']
message = f'Nouvelle annonce Vinted : {title} - {price}\n{link}'
embed = discord.Embed(title=title, url=link, description=price)
embed.set_image(url=image)
channel = client.get_channel(CHANNEL_ID)
await channel.send(message, embed=embed)
last_announcements = new_announcements
time.sleep(5) # Attendre 5 secondes avant de vérifier à nouveau
client.run(TOKEN)
Mais après bien vérifier qu'il soit en ligne et lui avoir mis les permissions administrateur ainsi qu'avoir dit !start dans le bon canal rien ne se passe le bot ne dit rien comment je peux faire ?
Trop de choses qui ne vont pas dans ton programme. Déjà tu ne peux pas juste te pointer et faire une requête sur le site sans lui passer au minimum des headers légitimes sinon le site te bloque et tu n'as aucun résultat.
Ensuite vinted est ce qu'on appelle une SPA, le backend est codé en Ruby on rails et le frontend en React. Le frontend communique avec le backend via une API Rest donc deux solutions dans ton cas:
- soit tu scrapes directement l'API Rest de vinted
- soit tu interroges le frontend pour voir si certaines données ne sont pas déjà présentes dans le html de la réponse au moment du chargement du DOM.
Pour la deuxième solution, c'est le cas, les données sont en JSON dans la dernière balise script application/json de la page.
Comme toi tu veux uniquement les articles les plus récents pour les republier sur un discord, prendre une commission et devenir riche (ce qui ne sera jamais le vas Valentin), tu peux passer par la deuxième solution pour avoir les articles les plus récents.
Voici comment faire en Python :
from __future__ import annotations
import json
from pprint import pprint
from typing import Any
from typing import Iterator
import requests
from bs4 import BeautifulSoup
HEADERS = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-User': '?1',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/110.0',
}
def get_items(url: str) -> Iterator[dict[str, Any]]:
response = requests.get(url, headers=HEADERS)
soup = BeautifulSoup(response.text, 'html.parser')
script = soup.select('script[type="application/json"]')[-1]
json_payload = json.loads(script.text)
items = json_payload['items']['catalogItems']['byId']
scraped_item = {}
for _, item in items.items():
scraped_item['id'] = item['id']
scraped_item['title'] = item['title']
scraped_item['price'] = float(item['price'])
scraped_item['total_price'] = float(item['total_item_price'])
scraped_item['brand'] = item['brand_title']
scraped_item['url'] = item['url']
scraped_item['size'] = item['size_title']
scraped_item['image'] = item['photo']['url']
yield scraped_item
def main() -> int:
url = 'https://www.vinted.fr/vetements?search_text=&brand_id[]=53&brand_id[]=5977&brand_id[]=2703&brand_id[]=283953&brand_id[]=370427&brand_id[]=14491&brand_id[]=5774166&brand_id[]=687713&brand_id[]=5750136&size_id[]=207&size_id[]=208&size_id[]=209&status_ids[]=6&status_ids[]=1&status_ids[]=2&status_ids[]=3&catalog[]=79&catalog[]=1206&catalog[]=76¤cy=EUR&search_id=8292877209&order=newest_first''
for item in get_items(url):
pprint(item)
return 0
if __name__ == "__main__":
raise SystemExit(main())
Le 26 février 2023 à 18:58:12 :
Trop de choses qui ne vont pas dans ton programme. Déjà tu ne peux pas juste te pointer et faire une requête sur le site sans lui passer au minimum des headers légitimes sinon le site te bloque et tu n'as aucun résultat.Ensuite vinted est ce qu'on appelle une SPA, le backend est codé en Ruby on rails et le frontend en React. Le frontend communique avec le backend via une API Rest donc deux solutions dans ton cas:
- soit tu scrapes directement l'API Rest de vinted
- soit tu interroges le frontend pour voir si certaines données ne sont pas déjà présentes dans le html de la réponse au moment du chargement du DOM.Pour la deuxième solution, c'est le cas, les données sont en JSON dans la dernière balise script application/json de la page.
Comme toi tu veux uniquement les articles les plus récents pour les republier sur un discord, prendre une commission et devenir riche (ce qui ne sera jamais le vas Valentin), tu peux passer par la deuxième solution pour avoir les articles les plus récents.
Voici comment faire en Python :
from __future__ import annotations import json from pprint import pprint from typing import Any from typing import Iterator import requests from bs4 import BeautifulSoup HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive', 'Pragma': 'no-cache', 'Sec-Fetch-Dest': 'document', 'Sec-Fetch-Mode': 'navigate', 'Sec-Fetch-Site': 'none', 'Sec-Fetch-User': '?1', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/110.0', } def get_items(url: str) -> Iterator[dict[str, Any]]: response = requests.get(url, headers=HEADERS) soup = BeautifulSoup(response.text, 'html.parser') script = soup.select('script[type="application/json"]')[-1] json_payload = json.loads(script.text) items = json_payload['items']['catalogItems']['byId'] scraped_item = {} for _, item in items.items(): scraped_item['id'] = item['id'] scraped_item['title'] = item['title'] scraped_item['price'] = float(item['price']) scraped_item['total_price'] = float(item['total_item_price']) scraped_item['brand'] = item['brand_title'] scraped_item['url'] = item['url'] scraped_item['size'] = item['size_title'] scraped_item['image'] = item['photo']['url'] yield scraped_item def main() -> int: url = 'https://www.vinted.fr/vetements?search_text=&brand_id[]=53&brand_id[]=5977&brand_id[]=2703&brand_id[]=283953&brand_id[]=370427&brand_id[]=14491&brand_id[]=5774166&brand_id[]=687713&brand_id[]=5750136&size_id[]=207&size_id[]=208&size_id[]=209&status_ids[]=6&status_ids[]=1&status_ids[]=2&status_ids[]=3&catalog[]=79&catalog[]=1206&catalog[]=76¤cy=EUR&search_id=8292877209&order=newest_first'' for item in get_items(url): pprint(item) return 0 if __name__ == "__main__": raise SystemExit(main())
Bonsoir je veux juste crée un bot discord pour qu'il m'envoie les dernières annonces avec un filtre précis et comme je ne m'y connais absolument pas je suis passer par chat gpt.
Donc je n'ai pas trop compris ce que vous avez dit je dois remplacer tout le code que j'ai par le votre ?
Bonjour j'ai codé un bot discord voila le code :
Donc tu n'as pas codé un bot discord.
Ça serait interessant je pense de préciser si les questions viennent de Chat GPT, Azerban a pris de son temps pour répondre sur un code qu'il pensait que t'avais produit, c'est pas cool pour lui.
Si le bot ne fonctionne pas ce serait bien de préciser le message d'erreur également
chatPGT va vraiment etre la plaie des forums j'air l'impression.
"J''ai demande a chatGPT de resoudre mon probleme, mais ca marche pas. AIDEZ MOI!!"
j'ai codé un bot discord
comme je ne m'y connais absolument pas je suis passer par chat gpt.
euh... ![]()
Le 27 février 2023 à 03:27:41 :
chatPGT va vraiment etre la plaie des forums j'air l'impression."J''ai demande a chatGPT de resoudre mon probleme, mais ca marche pas. AIDEZ MOI!!"
c'est comme les "AI artists"
remplir un prompt c'est pas faire de l'art ![]()
demander à un bot de pisser du code c'est pas programmer ![]()
Le 27 février 2023 à 03:27:41 :
chatPGT va vraiment etre la plaie des forums j'air l'impression."J''ai demande a chatGPT de resoudre mon probleme, mais ca marche pas. AIDEZ MOI!!"
non c'est la naissance d'un nouveau délire :
-j'ai un problème
-demande a chat GPT 
bientôt des faux utilisateurs bots directement relié a chatGPT pour répondre automatiquement, même glander sur le forum ça sera remplacer par l'IA
Bon alors je m'en prend plein la tête du coup.
J'aurais pu préciser en effet que ce n'est donc pas moi qui ai codé le bot mais bien chatgpt.
Cependant j'aimerai bien de l'aide s'il vous plait pour le code.
Est-ce que je dois remplacer tout le code par celui de Azerban ?
Je ne m'y connais pas du tout donc désolé si j'ai du mal pour la compréhension.
Le 27 février 2023 à 00:40:51 :
Si le bot ne fonctionne pas ce serait bien de préciser le message d'erreur également
Il n'y a pas de message d'erreur tout semble fonctionner, le bot est bien connecté sur mon serveur discord et j'ai tout vérifier (comme chatgpt me l'a dit) mais lorsque j'écrit "!start" , ce qui devrait faire que le bot commence a envoyer des annonces de ce que j'ai compris, dans le bon channel le bot ne répond absolument rien et il n'y a pas de message d'erreur.
Azerban as pris le temps de te construire une réponse détaillée, tu peux faire l'éffort de chercher par toi même pour comprendre.
Bon eh bien tant pis si vous ne voulez pas me donner plus d'indication. Mais merci Azerban d'avoir donner de ton temps pour le code malheureusement je ne sais pas quoi faire avec...
En fait le probleme vient du fait qu'il est impossible de t'aider : n'importe quel element de reponse pour te debloquer sera necessairement incomplet, puisque tu dis toi-meme ne rien y connaitre, et ne saura donc pas quoi en faire pour avancer.
Á partir de lá, la seule facon d'avancer serait soit de tout t'expliquer en detail pour que tu deviennes autonome, soit de tout faire á ta place pour te fournir une solution clef-en-main prete á l'emploi ; deux options bcp trop consommatrice en temps et qui relevent bcp plus du service pour lequel on paye un professionel.
L'entraide marche á partir du moment oú les intervenants savent au moins un peu ce qu'ils font et peuvent progresser avec des pistes ou des elements partiels.
J'ai essaye chatGPT recement pour voir comment il fait un tas de probleme. Et en vrai chatGPT est super fort a pondre un code qui a l'air raisonnable mais qui ne marche pas.
Donc j'imagine que dans les mois a venir on va voir plein de "j'ai ecrit ca avec chat GPT mais ca marche pas, aidez moi"
C'est un peu comme si c'est IA n'aidait pas vraiment les gens...
Le 01 mars 2023 à 04:08:49 :
J'ai essaye chatGPT recement pour voir comment il fait un tas de probleme. Et en vrai chatGPT est super fort a pondre un code qui a l'air raisonnable mais qui ne marche pas.
Donc j'imagine que dans les mois a venir on va voir plein de "j'ai ecrit ca avec chat GPT mais ca marche pas, aidez moi"
C'est un peu comme si c'est IA n'aidait pas vraiment les gens...
"L'IA va remplacer les devs", qu'ils disaient ![]()