PARTAGE prévisions nombres d'heures de soleil sur 7 jours Script Python3

le site fonctionne , pas de soucis de ce coté , j’ai vérifié

Idem chez moi :

Erreur sur /var/www/html/plugins/script/data/soupe 0 Météo Lohéac - meteoblue 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File « /var/www/html/plugins/script/data/soupe », line 7, in print(int(soupe.find_all(class_ = « tab_sun »)[int(argv[1])].text[62:64]), end = ‹  ›) ValueError: invalid literal for int() with base 10: ’ ’

Salut,
A priori ils ont rajouté un ‹ h › derrière le digit, donc ça foire le cast en integer… [Edit] je dirais plutôt que la quantité d’espace à changé, donc la selection de texte foire pour n’avoir que le nombre [/edit]

dans mon script j’ai ajouter
import re

et remplacer
subData['soleil']=int(soupe.find_all(class_ = "tab_sun")[i].text[62:64].strip())
par
subData['soleil']=int(re.findall(r'\d+',soupe.find_all(class_ = "tab_sun")[i].text[0:200].strip())[0])

…à adapter of course.

Note : d’autre champs sont arrivé hors focus dans les sous selection de texte (.text[x,y]) !

Bonjour,

Si vous avez suivi exactement la doc d’Olive (je suis pas très expert en python :frowning: ), le nouveau script est…

#! /usr/bin/env python3
import requests
import re
from sys import argv
from bs4 import BeautifulSoup
res = requests.get(argv[2])
soupe=BeautifulSoup(res.content, "html.parser")
print(int(re.findall(r'\d+',soupe.find_all(class_ = "tab_sun")[int(argv[1])].text[0:200].strip())[0]), end = '')

Dans mon cas, ça remarche.

Merci,

Laurent.

1 « J'aime »

Merci ça marche mieux :ok_hand:

Bravo @LaurentP il faut juste apprendre a te servir de la balise </> pour mettre du code dans community :wink:
tutoriel cliquez ici

Ou envoyer un message privé à @sheldon-bot démarrer tutoriel avancé pour apprendre à utiliser les menus :wink:

un badge a gagner pour la 2ième option :wink:

ps: j’ai éditer le 1er post avec ce code pour ceux qui ne sont pas adepte de lecture …

2 « J'aime »

effectivement ca remarche pour moi aussi , merci beaucoup

hello,
voila des mois et des mois que je me bats avec ces scripts et rien ne fonctionnait .
Aujourd’hui ; j’ai lu la dernière phrase …

Au cas ou la librairie ne soit pas présente dans votre environnement python3.
passez en console ssh

sudo pip3 install beautifulsoup4

image
De suite ça fonctionne beaucoup mieux :crazy_face:

1 « J'aime »

C’est top
Je n’y arrive pas faire un truc aussi propre

Voilà j’ai une erreur le script ne ce mets plus à jour

Voici le message




[2021-05-19 03:00:33][ERROR] : Erreur pour [meteo][Durée soleil sainte maure ][j+6] : Erreur sur /var/www/html/core/php/…/…/plugins/script/data/soupe 6 https://www.meteoblue.com/fr/meteo/semaine/sainte-maure-de-touraine_france_2980403 1 2>&1 valeur retournée : 1. Détails : Traceback (most recent call last): File « /var/www/html/core/php/…/…/plugins/script/data/soupe », line 7, in print(int(soupe.find_all(class_ = « tab_sun »)[int(argv[1])].text[62:64])) ValueError: invalid literal for int() with base 10: ’ ’


Bonjour,

Merci de modifier votre message en utilisant le code </> pour encadrer vos codes ou logs.
tutoriel cliquez ici
Ou vous pouvez envoyer un message privé à @sheldon-bot démarrer tutoriel avancé pour apprendre à utiliser les menus :wink:

bonne journée

Voilà c fait

Bonjour, super boulot, j’aimerai adapter le code pour l’utiliser sur un autre site mais j’aimerai le comprendre pour voir ce qu’il faut que j’adapte, tu peux m’expliquer stp?
merci

Bonsoir,

Je ne peut pas faire un cour complet ici car ce serait trop long

un petit coup de google beautifulsoup4

et tu trouvera pleins d’exemples

un parmi d’autre beautifulsoup4

et la documentation

https://www.crummy.com/software/BeautifulSoup/bs4/doc/

Bonne soirée

Chez moi le script plantait depuis hier, il faut remplacer tab_sun par tab-sun :

#! /usr/bin/env python3
import requests
import re
from sys import argv
from bs4 import BeautifulSoup
res = requests.get(argv[2])
soupe=BeautifulSoup(res.content, "html.parser")
print(int(re.findall(r'\d+',soupe.find_all(class_ = "tab-sun")[int(argv[1])].text[0:200].strip())[0]), end = '')
2 « J'aime »

Merci de l’info je viens de corriger aussi chez moi
c’est aussi toutes les autres class avec des _ qui sont maintenant avec un -
:+1:

corrigé aussi le 1er post

1 « J'aime »

Bien vu!
Ils ont modifier tous les underscore par des tirets… et y’en a un paquet dans les noms de classe de leur table!
Et il ont également modifier l’affichage de la date pour chaque jours…!

Salut @olive

j’ai pas retrouvé le post sur celui ci :
image

Mais j’ai aussi une erreur du style :

Erreur pour [Extérieur][Soleil][test] : Erreur sur /var/www/html/plugins/script/data/Soleil01 https://www.meteoblue.com/fr/meteo/semaine/saint-genis-laval_france_2979985 2>&1 
valeur retournée : 1. Détails : Jours: Traceback (most recent call last): File "/var/www/html/plugins/script/data/Soleil01", line 13, in print(""+soupe.find_all(class_ = 'tab_day_short')[i].text.split()[0] +"", end = '') IndexError: list index out of range

Est-ce le même de cause ?

Oui c’est la même
tiens la version corrigé du script (je sais plus non plus dans quel sujet c’était)

#! /usr/bin/env python3
import requests
from sys import argv
from bs4 import BeautifulSoup
res = requests.get(argv[1])
soupe=BeautifulSoup(res.content, "html.parser")

print("<table>", end = '')
 
      
      
print("<tr>", end = '')  
print("<td  style='width: 80px;border: 1px; border-collapse: collapse; color:white;height:20px;text-align:right;'>Jours: </td>", end = '')
for i in range(7):
    print("<td style='width: 40px;border: 1px; border-collapse: collapse; color:red;height:20px;'>"+soupe.find_all(class_ = 'tab-day-short')[i].text.split()[0] +"</td>", end = '')
print("</tr>", end = '')      
  
  
print("<tr>", end = '')  
print("<td  style='width: 80px;border: 1px; border-collapse: collapse; color:white;height:20px;text-align:right;'>Vent: </td>", end = '')
for i in range(7):
    print("<td style='width: 25px;border: 1px; border-collapse: collapse; color:red;height:20px;'>"+soupe.find_all(class_ = 'wind')[i].text.split()[0] +"</td>", end = '')
print("</tr>", end = '')  
      
print("<tr>", end = '')  
print("<td  style='width: 80px;border: 1px; border-collapse: collapse; color:white;height:20px;text-align:right;'>Direction: </td>", end = '')
for i in range(7):
    print("<td style='width: 25px;border: 1px; border-collapse: collapse; color:red;height:20px;'>"+soupe.find_all(class_ = 'wind')[i].span['class'][2] +"</td>", end = '')
print("</tr>", end = '')     
      
print("<tr>", end = '')  
print("<td  style='width: 80px;border: 1px; border-collapse: collapse; color:white;height:20px;text-align:right;'>Tmax: </td>", end = '')
for i in range(7):
    print("<td style='width: 25px;border: 1px; border-collapse: collapse; color:red;height:20px;'>"+soupe.find_all(class_ = 'tab-temp-max')[i].text.split()[0] +"</td>", end = '')
print("</tr>", end = '')
      
print("<tr>", end = '')  
print("<td  style='width: 80px;border: 1px; border-collapse: collapse; color:white;height:20px;text-align:right;'>Tmin: </td>", end = '')
for i in range(7):
    print("<td style='width: 25px;border: 1px; border-collapse: collapse; color:red;height:20px;'>"+soupe.find_all(class_ = 'tab-temp-min')[i].text.split()[0] +"</td>", end = '')
print("</tr>", end = '')     
      
      
print("<tr>", end = '')  
print("<td  style='width: 80px;border: 1px; border-collapse: collapse; color:white;height:20px;text-align:right;'>Pluie: </td>", end = '')
for i in range(7):
    print("<td style='width: 25px;border: 1px; border-collapse: collapse; color:red;height:20px;'>"+soupe.find_all(class_ = 'tab-precip')[i].text.split()[0] +"</td>", end = '')
print("</tr>", end = '')
      

print("<tr>", end = '')  
print("<td  style='width: 80px;border: 1px; border-collapse: collapse; color:white;height:20px;text-align:right;'>Soleil: </td>", end = '')
for i in range(7):
    print("<td style='width: 25px;border: 1px; border-collapse: collapse; color:red;height:20px;'>"+soupe.find_all(class_ = 'tab-sun')[i].text.split()[0] +"</td>", end = '')
print("</tr>", end = '')      
      
print("</table>", end = '')

2 « J'aime »

Superbe et merci