Spaces:
Sleeping
Sleeping
Update src/streamlit_app.py
Browse files- src/streamlit_app.py +34 -26
src/streamlit_app.py
CHANGED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
#
|
| 2 |
import streamlit as st
|
| 3 |
import requests
|
| 4 |
from bs4 import BeautifulSoup
|
|
@@ -21,7 +21,7 @@ st.set_page_config(page_title="Codex CXC Viewer", page_icon="📋", layout="wide
|
|
| 21 |
@st.cache_data(ttl=3600)
|
| 22 |
def extract_cxc_documents():
|
| 23 |
"""
|
| 24 |
-
Fonction pour extraire les Codes de Pratique (CXC) avec leurs liens PDF.
|
| 25 |
"""
|
| 26 |
st.info("Extraction des documents depuis le site Codex...")
|
| 27 |
documents = []
|
|
@@ -63,32 +63,41 @@ def extract_cxc_documents():
|
|
| 63 |
except ValueError:
|
| 64 |
year = 0
|
| 65 |
|
| 66 |
-
# --- EXTRACTION DES LIENS PDF ---
|
| 67 |
# Le lien PDF est dans la dernière cellule (<td class="alignCenter">)
|
| 68 |
-
# Cette cellule contient un sous-tableau avec les liens
|
| 69 |
pdf_cell = cells[4] if len(cells) > 4 else None
|
| 70 |
-
|
| 71 |
-
|
| 72 |
-
pdf_links = []
|
| 73 |
if pdf_cell:
|
| 74 |
-
# Trouver
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 92 |
|
| 93 |
documents.append({
|
| 94 |
'code': full_code,
|
|
@@ -109,7 +118,6 @@ def generate_pdf_link_simple(code, year):
|
|
| 109 |
Génère un lien PDF plausible basé sur le code et l'année.
|
| 110 |
Utilisé comme fallback si aucun lien n'est trouvé dans le HTML.
|
| 111 |
"""
|
| 112 |
-
# Ex: CXC 80-2020 -> CXC_080-2020
|
| 113 |
try:
|
| 114 |
parts = code.split()
|
| 115 |
prefix = parts[0]
|
|
|
|
| 1 |
+
# streamlit_app_cxc_with_pdf_fixed.py
|
| 2 |
import streamlit as st
|
| 3 |
import requests
|
| 4 |
from bs4 import BeautifulSoup
|
|
|
|
| 21 |
@st.cache_data(ttl=3600)
|
| 22 |
def extract_cxc_documents():
|
| 23 |
"""
|
| 24 |
+
Fonction pour extraire les Codes de Pratique (CXC) avec leurs liens PDF correctement décodés.
|
| 25 |
"""
|
| 26 |
st.info("Extraction des documents depuis le site Codex...")
|
| 27 |
documents = []
|
|
|
|
| 63 |
except ValueError:
|
| 64 |
year = 0
|
| 65 |
|
| 66 |
+
# --- EXTRACTION DES LIENS PDF CORRECTEMENT DECODÉS ---
|
| 67 |
# Le lien PDF est dans la dernière cellule (<td class="alignCenter">)
|
|
|
|
| 68 |
pdf_cell = cells[4] if len(cells) > 4 else None
|
| 69 |
+
pdf_url = None
|
| 70 |
+
|
|
|
|
| 71 |
if pdf_cell:
|
| 72 |
+
# Trouver tous les liens <a> dans cette cellule
|
| 73 |
+
links = pdf_cell.find_all('a')
|
| 74 |
+
for link in links:
|
| 75 |
+
href = link.get('href')
|
| 76 |
+
if href and 'pdf' in href.lower():
|
| 77 |
+
# Décoder l'URL encodée
|
| 78 |
+
decoded_href = requests.utils.unquote(href)
|
| 79 |
+
# L'URL décrite commence par /fao-who-codexalimentarius/sh-proxy/fr/?lnk=1&url=...
|
| 80 |
+
# On extrait la partie après url=
|
| 81 |
+
# Exemple: https://www.fao.org/fao-who-codexalimentarius/sh-proxy/fr/?lnk=1&url=https%3A%2F%2Fworkspace.fao.org%2Fsites%2Fcodex%2FStandards%2FCXC%2B1-1969%2FCXC_001c.pdf
|
| 82 |
+
# Il faut extraire: https://workspace.fao.org/sites/codex/Standards/CXC%2B1-1969/CXC_001c.pdf
|
| 83 |
+
# Puis décoder encore une fois si nécessaire
|
| 84 |
+
if 'url=' in decoded_href:
|
| 85 |
+
# Extraire la partie après 'url='
|
| 86 |
+
url_part = decoded_href.split('url=', 1)[1]
|
| 87 |
+
# Décoder à nouveau
|
| 88 |
+
final_pdf_url = requests.utils.unquote(url_part)
|
| 89 |
+
# Vérifier que c'est bien un lien HTTPS
|
| 90 |
+
if final_pdf_url.startswith('https://'):
|
| 91 |
+
pdf_url = final_pdf_url
|
| 92 |
+
break
|
| 93 |
+
else:
|
| 94 |
+
# Si pas de 'url=', on utilise directement le lien
|
| 95 |
+
pdf_url = decoded_href
|
| 96 |
+
break
|
| 97 |
+
|
| 98 |
+
# Si on n'a pas trouvé de lien PDF valide, générer un lien plausible
|
| 99 |
+
if not pdf_url:
|
| 100 |
+
pdf_url = generate_pdf_link_simple(full_code, year)
|
| 101 |
|
| 102 |
documents.append({
|
| 103 |
'code': full_code,
|
|
|
|
| 118 |
Génère un lien PDF plausible basé sur le code et l'année.
|
| 119 |
Utilisé comme fallback si aucun lien n'est trouvé dans le HTML.
|
| 120 |
"""
|
|
|
|
| 121 |
try:
|
| 122 |
parts = code.split()
|
| 123 |
prefix = parts[0]
|