Outils pour utilisateurs

Outils du site


nsi:tds:flux_rss

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
nsi:tds:flux_rss [2024/04/24 22:06] goupillwikinsi:tds:flux_rss [2024/04/29 14:18] (Version actuelle) goupillwiki
Ligne 105: Ligne 105:
     # dans le flux, l'enfant [0] est toujours un noeud <title>     # dans le flux, l'enfant [0] est toujours un noeud <title>
     # donc titlenode est un noeud <title>     # donc titlenode est un noeud <title>
-    textnode = child0.childNodes[0]+    textnode = titlenode.childNodes[0]
     # titlenode a un unique enfant, c'est un noeud de texte     # titlenode a un unique enfant, c'est un noeud de texte
     # textnode est donc le noeud contenant le texte du noeud <item> titlenode     # textnode est donc le noeud contenant le texte du noeud <item> titlenode
Ligne 126: Ligne 126:
 import socket       # pour création socket TCP-IP import socket       # pour création socket TCP-IP
 import ssl          # gestion chiffrement pages https import ssl          # gestion chiffrement pages https
 +import urllib.request as req
 import xml.dom.minidom as xml import xml.dom.minidom as xml
  
-HTTP_VERSION = 1.0 +def get_xml(url):
-CRLF = "\r\n\r\n" +
- +
-# Dans certains cas on utilise une ressource. Il faut demander au système d'exploitation +
-# de nous donner accès à cette ressource puis il faut lui dire quand on libère cette ressource. +
-# ex : ouverture / fermeture de fichier ; ouverture / fermeture de connexion +
-# avec le mot clé with, on crée un bloc qui réserve la ressource +
-# puis la libère dès qu'on sort du bloc. +
- +
-def cut_xml_part(text:str): +
-    """ +
-    Renvoie le contenu de text à partir de "<?xml" +
-    """ +
-    if "<?xml" not in text: +
-        return "" +
-    i = text.index("<?xml"+
-    return text[i:] +
- +
-def get_xml(hostname, address):+
     """     """
-    hostname: nom du domaine hébergeant le flux +    url: adresse du flux rss
-    address: adresse du flux rss+
     renvoie le contenu du fichier xml     renvoie le contenu du fichier xml
     """     """
-    # création d'un contexte sécurisé avec ssl 
     context = ssl.SSLContext()     context = ssl.SSLContext()
-    # 443 est le port habituel pour https +    with req.urlopen(url, context=context) as reponse
-    with socket.create_connection((hostname443)) as sock: +        return reponse.read().decode('utf8'
-        # sock est "emballé" dans le contexte sécurisé (donnée cryptée) avec ssl +    
-        with context.wrap_socket(sock, server_hostname=hostname) as ssock+
-            # lancement la requête GET en précisant l'adresse +
-            ssock.send("GET {} HTTP/{} {}".format(address, HTTP_VERSION, CRLF).encode()) +
-            # la taille de la réponse est inconnue. +
-            # on réceptionne par morceaux de 1024 octets. +
-            reponse_xml = "" # au début la réponse est vide. +
- +
-            while True: +
-                block = ssock.recv(1024) +
-                if not block: +
-                    # block est vide, il n'y a plus rien à récupérer +
-                    # sortie de la boucle +
-                    break +
-                reponse_xml += block.decode("utf-8"+
-            return cut_xml_part(reponse_xml+
 def get_titles(texte_xml): def get_titles(texte_xml):
     '''     '''
Ligne 183: Ligne 148:
 </code> </code>
  
-<WRAP important>En ligne 33 j'ai changé l'ancien ''context = ssl.create_default_context()'' qui ne fonctionnait plus pour ''ssl.SSLContext()''. Ce n'est pas idéal car ce choix fait qu'on ne vérifie pas le certificat ssl du site. Cela nous évite les erreurs mais est potentiellement dangereux (les certificats sont là pour la sécurité). Toutefois, dans le cadre de ce TP on échange aucune donnée sensible et on ne risque rien.</WRAP> +<WRAP important>En ligne 14 j'ai changé l'ancien ''context = ssl.create_default_context()'' qui ne fonctionnait plus pour ''ssl.SSLContext()''. Ce n'est pas idéal car ce choix fait qu'on ne vérifie pas le certificat ssl du site. Cela nous évite les erreurs mais est potentiellement dangereux (les certificats sont là pour la sécurité). Toutefois, dans le cadre de ce TP on échange aucune donnée sensible et on ne risque rien.</WRAP>
- +
-<WRAP tip>La fonction get_xml est un peu compliquée. Je l'ai détaillée pour qu'on comprenne le principe de l'échange. Python fournit des fonctions toutes faites qui font l'essentiel du travail. +
- +
-<code python linenums> +
-import ssl +
-import urllib.request as req +
-url = "https://www.francetvinfo.fr/titres.rss" +
-context = ssl.SSLContext()  # supprime la vérification du ssl +
-reponseXML = req.urlopen(url, context=context).read() +
-</code> +
-</WRAP>+
  
 <code python linenums> <code python linenums>
Ligne 201: Ligne 155:
 from  rss import get_xml, get_titles from  rss import get_xml, get_titles
  
-# le flux qui nous sert d'exemple est un flux d'actualité sur wwww.francetvinfo.fr 
-# on donne l'adresse du serveur (domaine) 
-hostname = 'www.francetvinfo.fr' 
-  
 # adresse du flux lui-même # adresse du flux lui-même
-address = 'https://www.francetvinfo.fr/titres.rss'+url = 'https://www.francetvinfo.fr/titres.rss'
    
-xml = get_xml(hostname, address)+xml = get_xml(url)
 titles = get_titles(xml) titles = get_titles(xml)
  
nsi/tds/flux_rss.1713989216.txt.gz · Dernière modification : de goupillwiki