nsi:tds:flux_rss
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| nsi:tds:flux_rss [2024/04/24 21:59] – goupillwiki | nsi:tds:flux_rss [2024/04/29 14:18] (Version actuelle) – goupillwiki | ||
|---|---|---|---|
| Ligne 99: | Ligne 99: | ||
| <code python> | <code python> | ||
| + | # root.getElementByTagName(' | ||
| for article in root.getElementsByTagName(' | for article in root.getElementsByTagName(' | ||
| - | # article correspond à un noeud < | + | # article correspond à un des noeuds |
| - | | + | |
| # dans le flux, l' | # dans le flux, l' | ||
| - | textnode = child0.childNodes[0] | + | |
| - | # textnode est l'unique enfant du noeud < | + | |
| - | print(textNode.data ) # affiche le contenu | + | # titlenode a un unique enfant, c'est un noeud de texte |
| + | # textnode est donc le noeud contenant le texte du noeud < | ||
| + | print(textNode.data) # par exemple, on affiche le contenu | ||
| </ | </ | ||
| Ligne 115: | Ligne 118: | ||
| - affichage des titres (//à faire//) | - affichage des titres (//à faire//) | ||
| - | > **Remarque :** La plupart des sites sont aujourd' | + | <WRAP tip> |
| <code python linenums> | <code python linenums> | ||
| Ligne 124: | Ligne 126: | ||
| import socket | import socket | ||
| 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 = " | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | # création d'un contexte sécurisé avec ssl | + | |
| - | context = ssl.SSLContext() | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | # Dans certains cas on utilise une ressource. Il faut demander au système d' | + | |
| - | # 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): | + | |
| """ | """ | ||
| - | | + | |
| - | """ | + | |
| - | if "<? | + | |
| - | return "" | + | |
| - | i = text.index("<? | + | |
| - | return text[i:] | + | |
| - | + | ||
| - | def get_xml(hostname, | + | |
| - | """ | + | |
| - | hostname: nom du domaine hébergeant le flux | + | |
| - | address: adresse du flux rss | + | |
| renvoie le contenu du fichier xml | renvoie le contenu du fichier xml | ||
| """ | """ | ||
| - | | + | |
| - | with socket.create_connection((hostname, 443)) as sock: | + | with req.urlopen(url, context=context) as reponse: |
| - | # sock est " | + | |
| - | | + | |
| - | # lancement la requête GET en précisant l' | + | |
| - | ssock.send("GET {} HTTP/{} {}" | + | |
| - | # la taille de la réponse est inconnue. | + | |
| - | # on réceptionne par morceaux de 1024 octets. | + | |
| - | reponse_xml = "" | + | |
| - | + | ||
| - | 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(" | + | |
| - | return cut_xml_part(reponse_xml) | + | |
| def get_titles(texte_xml): | def get_titles(texte_xml): | ||
| ''' | ''' | ||
| Ligne 185: | Ligne 147: | ||
| pass | pass | ||
| </ | </ | ||
| + | |||
| + | <WRAP important> | ||
| <code python linenums> | <code python linenums> | ||
| + | # main.py | ||
| + | |||
| from rss import get_xml, get_titles | from rss import get_xml, get_titles | ||
| - | # le flux qui nous sert d' | ||
| - | # on donne l' | ||
| - | hostname = ' | ||
| - | |||
| # adresse du flux lui-même | # adresse du flux lui-même | ||
| - | address | + | url = ' |
| - | xml = get_xml(hostname, address) | + | xml = get_xml(url) |
| titles = get_titles(xml) | titles = get_titles(xml) | ||
| Ligne 202: | Ligne 164: | ||
| print(titles[: | print(titles[: | ||
| </ | </ | ||
| - | |||
| - | |||
| - | |||
| - | <WRAP important> | ||
| - | |||
| - | <WRAP tip>Tout le bloc des lignes 1 à 49 permet de comprendre le principe de l' | ||
| - | |||
| - | <code python linenums> | ||
| - | import ssl | ||
| - | import urllib.request as req | ||
| - | url = " | ||
| - | context = ssl.SSLContext() | ||
| - | reponseXML = req.urlopen(url, | ||
| - | </ | ||
| - | </ | ||
nsi/tds/flux_rss.1713988746.txt.gz · Dernière modification : de goupillwiki
