#1 Le 18/08/2014, à 22:43
- toutafai
aide python telecharger fichier dont le nom est partielement connu
Bonsoir,
Je vais être appeler dans le cadre de mon travail à gérer des mises à jour logiciel, passionnant, non ???
La personne qui fait cela pour le moment fait cela "a l'ancienne" :
Il se connecte sur le site, regarde si une mise a jour est dispo, si oui, il télécharge le fichier dont le nom change régulièrement mais que partiellement (il est est toujours nommé trxxxxx7_64.exe). Puis il le sauvegarde dans un dossier réseau.
J'aimerais automatiser cela avec un script python car il faut que cela s’exécute dans un environnement microsoft :-(
Je connais pratiquement pas python. j'aurais donc besoin d'une (ou plusieurs ) bonne âmes pour me donner une bonne trame de départ ou pour me donner quelques ligne de code, cela me serait d'une grande aide.
mon petit cahier des charges correspondant a mon besoin :
Script en v1
- télécharger le fichier nommé trxxxx7_64.exe
- le renommer en 1_7_64.exe du le copier dans dans un dossier réseau (de la, il sera repris dans un bon vieux batch windows, ça je connais )
Script en v1.1
on vérifie avant de télécharger si on a pas déjà la version la plus récente du fichier (le fichier pesant tout de même dans les 400 Mo )
D'avance merci pour le temps que vous m'accorderez.
Tombé dans l'informatique étant petit, j'en ai fait mon métier. Utilisateur d'Ubuntu depuis novembre 2006, actuellement sous 20.04 x64 (Que d'évolution
depuis Dapper Drake ! Ça rajeunit pas ^^^).
Hors ligne
#2 Le 20/08/2014, à 23:38
- wido
Re : aide python telecharger fichier dont le nom est partielement connu
je m'abonne
Hors ligne
#3 Le 21/08/2014, à 21:35
- toutafai
Re : aide python telecharger fichier dont le nom est partielement connu
je progresse j'en suis au cours 3 de la serie pyhton FullCircle ...mais encore loin de l'objectif
Tombé dans l'informatique étant petit, j'en ai fait mon métier. Utilisateur d'Ubuntu depuis novembre 2006, actuellement sous 20.04 x64 (Que d'évolution
depuis Dapper Drake ! Ça rajeunit pas ^^^).
Hors ligne
#4 Le 22/08/2014, à 03:45
- nesthib
Re : aide python telecharger fichier dont le nom est partielement connu
Il manque une information primordiale dans ta question. Comment détermines-tu le nom de fichier exact ? Y a-t-il une page web ? Un partage FTP ? Selon le cas la réponse peut varier.
Une autre chose pour ta version avancée, comment sais-tu que tu as déjà téléchargé un fichier puisque tu le renommes ? Veux-tu aussi vérifier l'intégrité du fichier (ex. somme de contrôle) ?
Une solution pour le cas où tu connais l'URL :
#!/usr/bin/python
import os
import urllib
LAST_EXEC_FILE = '/tmp/last_exec'
DEST_FOLDER = '/tmp'
URL = 'http://lien.vers/le/fichier.exe' # à remplacer par une fonction qui détermine l'URL
exec_name = URL.rsplit('/', 1)[1] # on récupère le nom de l'exécutable
# fonction pour comparer avec le nom du dernier fichier téléchargé (dans LAST_EXEC_FILE)
def is_last(name):
with open(LAST_EXEC_FILE) as f:
last = f.read().rstrip()
return name == last
# s'il n'y a pas de fichier LAST_EXEC_FILE ou que le dernier fichier téléchargé n'est pas le plus récent, on lance le téléchargement
if not (os.path.exists(LAST_EXEC_FILE) and is_last(exec_name)):
urllib.urlretrieve (URL, os.path.join(DEST_FOLDER, '1_7_64.exe'))
# on garde en mémoire le nom d'origine du dernier fichier téléchargé
with open(LAST_EXEC_FILE, 'w') as f:
f.write(exec_name)
C'est vraiment tout simple, même pas une version 1 ou 1.1, plutôt 0.01
Si tu veux comprendre en détail ce code, installe ipython et lance le code ligne par ligne (ou bloc par bloc) et essaie de décomposer les différents éléments.
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#5 Le 22/08/2014, à 07:05
- melixgaro
Re : aide python telecharger fichier dont le nom est partielement connu
salut,
si tu testes dans ipython, tape
%autoindent
avant le copié-collé bloc par bloc
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#6 Le 22/08/2014, à 21:51
- toutafai
Re : aide python telecharger fichier dont le nom est partielement connu
Bonsoir a tous et merci pour vos réponses,
@nesthib : un grand Merci a toi pour ton travail ! wahoo, j'imagine qu'avec cela et tes conseils je pourrais moi aussi un jour "pondre" du code comme cela, mais pour l'instant le padawan que je suis devra attendre
Pour répondre a tes question judicieuses :
- il s'agit des mises a jour d'anti-virus symantec, je ne peux que les télécharger en http ou en ftp (sous réserve que le ftp me soit autorisé dans la boite) que l'on peut télécharger ici pour le fichier de definitions nommé en AAAAMMJJ*v5i64.exe et ici pour le fichier ips nommé AAAAMMJJ*IPS_IU_SEP.exe
pour savoir si le fichier a changé je pensais simplement récupéré dans une variable le nom du dernier fichier téléchargé (avant de le renommer), puis de faire une comparaison avec celui sur le site pour déclencher ou non le téléchargement
j'aurais pas le temps de tester ce week, mais je m'y met dès lundi. je vous tiens informé de la suite, encore merci et bon week !
@melixgaro : merci pour l'astuce !
Tombé dans l'informatique étant petit, j'en ai fait mon métier. Utilisateur d'Ubuntu depuis novembre 2006, actuellement sous 20.04 x64 (Que d'évolution
depuis Dapper Drake ! Ça rajeunit pas ^^^).
Hors ligne
#7 Le 24/08/2014, à 02:08
- nesthib
Re : aide python telecharger fichier dont le nom est partielement connu
Tu peux facilement extraire l'url de la page web avec le code suivant :
import re
import urllib
from bs4 import BeautifulSoup
# on récupère la page
page = urllib.urlopen('http://www.symantec.com/security_response/definitions/download/detail.jsp?gid=sep').read()
# on analyse le HTML avec BeautifulSoup et le parseur lxml (car la page est mal formatée…)
soup = BeautifulSoup(page, 'lxml')
# on récupère le premier lien qui corresponde à 00000000*v5i64.exe
url = soup.find(lambda tag: tag.name=='a' and 'href' in tag.attrs and re.match('http://.*\d{8}[^/]+v5i64.exe', tag.attrs['href']))['href']
Tu dois installer les paquets python-bs4 et python-lxml.
Une version plus simple (et qui ne requiert ni BeautifulSoup ni lxml) mais moins propre (ne se base pas sur les balises HTML) :
import re
import urllib
# on récupère la page
page = urllib.urlopen('http://www.symantec.com/security_response/definitions/download/detail.jsp?gid=sep').read()
# on cherche l'url
url = re.findall('(?<=href=")http://definitions.symantec.com/defs/\d{8}[^"/]+v5i64.exe(?=")', page)[0]
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#8 Le 24/08/2014, à 13:34
- toutafai
Re : aide python telecharger fichier dont le nom est partielement connu
ok, effectivement j'avais déjà croisé la solution "BeautifulSoup et le parser" mais j'étais loin de l'avoir compris, "padawanisme oblige"
Merci pour ton active participation et comme dit plus haut, je test cela dès la semaine prochaine, je te tiens au courant.
Bonne fin de week !
Tombé dans l'informatique étant petit, j'en ai fait mon métier. Utilisateur d'Ubuntu depuis novembre 2006, actuellement sous 20.04 x64 (Que d'évolution
depuis Dapper Drake ! Ça rajeunit pas ^^^).
Hors ligne