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 22:06] – goupillwiki | nsi:tds:flux_rss [2024/04/29 14:18] (Version actuelle) – goupillwiki | ||
|---|---|---|---|
| Ligne 105: | Ligne 105: | ||
| # dans le flux, l' | # dans le flux, l' | ||
| # donc titlenode est un noeud < | # donc titlenode est un noeud < | ||
| - | 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 < | # textnode est donc le noeud contenant le texte du noeud < | ||
| Ligne 126: | 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 = " | + | |
| - | + | ||
| - | # 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: | + | |
| - | """ | + | |
| - | Renvoie le contenu de text à partir de "<? | + | |
| - | """ | + | |
| - | if "<? | + | |
| - | return "" | + | |
| - | i = text.index("<? | + | |
| - | return text[i:] | + | |
| - | + | ||
| - | def get_xml(hostname, address): | + | |
| """ | """ | ||
| - | | + | |
| - | 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() | ||
| - | | + | with req.urlopen(url, context=context) as reponse: |
| - | | + | |
| - | # sock est " | + | |
| - | with context.wrap_socket(sock, | + | |
| - | # 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 183: | Ligne 148: | ||
| </ | </ | ||
| - | <WRAP important> | + | <WRAP important> |
| - | + | ||
| - | <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' | + | |
| - | + | ||
| - | <code python linenums> | + | |
| - | import ssl | + | |
| - | import urllib.request as req | + | |
| - | url = " | + | |
| - | context = ssl.SSLContext() | + | |
| - | reponseXML = req.urlopen(url, | + | |
| - | </ | + | |
| - | </ | + | |
| <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' | ||
| - | # 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) | ||
nsi/tds/flux_rss.1713989216.txt.gz · Dernière modification : de goupillwiki
