MMOON commited on
Commit
dd18a20
·
verified ·
1 Parent(s): f413fe0

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +34 -26
src/streamlit_app.py CHANGED
@@ -1,4 +1,4 @@
1
- # streamlit_app_cxc_with_pdf.py
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
- # Récupérer les liens PDF du sous-tableau
72
- pdf_links = []
73
  if pdf_cell:
74
- # Trouver le sous-tableau dans cette cellule
75
- sub_table = pdf_cell.find('table')
76
- if sub_table:
77
- # Trouver toutes les lignes du sous-tableau
78
- sub_rows = sub_table.find_all('tr')
79
- for sub_row in sub_rows:
80
- # Trouver tous les liens <a> dans cette ligne
81
- links = sub_row.find_all('a')
82
- for link in links:
83
- href = link.get('href')
84
- if href and 'pdf' in href.lower():
85
- # Décoder l'URL encodée en %XX
86
- decoded_url = requests.utils.unquote(href)
87
- # Ajouter le lien au tableau
88
- pdf_links.append(decoded_url)
89
-
90
- # Si on a trouvé un lien, l'utiliser, sinon générer un lien plausible
91
- pdf_url = pdf_links[0] if pdf_links else generate_pdf_link_simple(full_code, year)
 
 
 
 
 
 
 
 
 
 
 
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]