|
fliaigre 913
| Posté : 15-03-2012 13:15 Avec ta nouvelle version ça ne fonctionne pas. Rien n'est décodé donc j'ai remis celle-ci :
<?php
// --------------------------------------------------------
// d'après parse_flux-2 pour lire des fichiers RSS/RDF/Atom
// Dominique WOJYLAC < http://wojylac.free.fr>
// Distribué sous GNU General Public License.
//
// Version 2.1c
// ---------------------------------------------------------
// fonction destinée à nettoyer le texte récupéré
// que l'on pourrait séparer de ce code&n bsp;en la mettant dans un fichier à in clure
// fonction destinée à nettoyer le texte récupéré
// que l'on pourrait séparer de ce code&n bsp;en la mettant dans un fichier à in clure
function clean_text($text, $encodage = '',$long) {
if ($encodage == 'utf-8') {
$text = utf8_decode($text);
}
$avant = array(
'<',
'>',
'"',
'&',
'|@|' // pour traitement correct& nbsp;des caractères spéciaux préalablement remplacés&nb sp;(voir plus bas)
);
$apres = array(
'<',
'>',
'"',
'&',
'&#'
);
$text = substr(str_replace($avant, $apres, $t ext),0,$long).' ...';
return $text;
}
function lit_RSS($flux,$delai,$nbnews,$affichage,$long,$block_title)&nbs p;{
// chemin relatif vers le dossier cache
// le répertoire "cache" doit être autorisé& nbsp;en écriture
// ne pas oublier / Ã la fin
$dir_cache = './cache/';
// nom du fichier mis en cache
//$file_cache = 'flux.html';
$url_explode = explode('/',$flux);
$file_cache = ($url_explode[2]).'.html';
if (!is_dir($dir_cache)) {
exit ('Répertoire cache "'.$dir_cache.'" inex istant !');
}
!include!_once('rss_read.inc.php');
$rss = new rss_read();
//$flux = ' http://npds.org/backend.php'; //adresse du flux passée par la fonction.
// voir la doc pour cette fonction
$date_modif = $rss -> get_last_modified($flux);
if ($date_modif > 0) {
// le serveur distant a retourné u ne date de dermière modification
// on remettra à jour immédiateme nt en cas de modification postérieure
// Ã la date du fichier en&nb sp;cache
$delai = 0;
}
else {
// on impose la mise à jour&n bsp;avec une certaine periodicité
$date_modif = time();
// le delai entre deux rafraichissements en secondes à régler suivant le type de fil ici 2 heures
//$delai = 600; //délai passé par  ;la fonction
}
// le fichier est-il en cache et suffisamm ent jeune
$file_cache = $dir_cache.$file_cache;
$en_cache = file_exists($file_cache);
if ($en_cache) {
$en_cache = ($date_modif < filemtime($file _cache) + $delai);
}
if (!$en_cache) {
// il est considéré comme n'étant&nbs p;pas en cache on le génére
$content = '';
// caractères parasites pouvant être c ontenus dans le fils rss et à remplace r par d'autres
// doit être invoqué avant parsefile
< br /> // cette fonction est optionnelle et&nbs p;ne doit être utilisée que pour certains fils.
$avant = array('&#','•');
$apres = array('|@|','-');
$rss -> to_replace_with($avant, $apres);
// parser le fichier news
$res = $rss -> parsefile($flux);
if ($res) {
$encode = $rss -> get_encoding ();
// recupération des données sur le channel
$channel = $rss -> get_channel ();
// nombre d'items
if ($nbnews > $rss -> get_num_items()) $nbnews = $rss -> get_num_it ems(); // nombre de news à afficher pa ssé par la fonction
// recup array des données
$items = $rss -> get_items();
if ($items) {
$content .= '<ul>';
for($i = 0; $i <&n bsp;$nbnews; $i++) {
if ($affichage ==&n bsp;'1') {
$content .=& nbsp;'<li> '.$items[$i]['link'].'</li>'."\n"; // pou r le RSS "bizarre" de PedigreeDataBase
} else {
$content .=& nbsp;'<li> <a href="'.$items[$i]['link'].'" target="_bl ank" class="noir" alt="'.$items[$i]['title'].'" title="'.$items[$i]['title '].'">'.clean_text($items[$i]['title'], $encode, $long).'</a> ;</li>'."\n";
}
}
$content .= '</ul>';
}
// affichage site, url, descripti on
$content .= '<div><a hr ef="'. $channel['link'].'" target="_blank" class="noir"> Lire la suite ...</a></div>';
} // fin if $rss
$fd = fopen($file_cache, "w");
fputs($fd, $content);
fclose($fd);
} else {
//Ouverture du fichier en lecture seule
$handle = fopen($file_cache, 'r');
//Si on a réussi à ou vrir le fichier
if ($handle)
{
$content = '';
//Tant que l'on est p as à la fin du fichier
while (!feof($handle))
{
//On lit la li gne courante
$content .= fgets($ handle);
}
//On ferme le fichier
fclose($handle);
} else {
$content = 'Erreur de  ;lecture du fichier en cache';
}
} // fin if !$en_cache
themesidebox($block_title,$content);
} // fin de fonction
?>
Celle-ci décode le texte mais pas la bulle.
Je suis sur REvolution 10.02 encodée en charset=ISO-8859-1.
Je te joins par mail.
|
|
PhilGuen 982
| Posté : 15-03-2012 07:52 ok c'est fait. Version 1.04 sur guenet.net ou guenet.org
J'ai laissé ta modif, mais ca ne fonctionne pas pour moi au niveau de l'encodage.
Faut que je me penche la dessus ... en fait, me semble-t-il, faut adapter l'encodage du fil à celui du site "lecteur" ... je sais comment avoir l'encodage d'une chaîne (donc du fil) ... mais je ne sais pas comment détecter celui utilisé par un site.
De toutes façons, comme déjà dit, faudrait que les "vrais" programmeurs se penchent dessus pour l'optimiser.
PS - Pour ne pas "polluer" le forum, peux-tu me joindre par mail (enlever les xx à l'adresse en lien dessous).
Peux-tu me faire un accès admin pour que je fasse des tests à partir de ton site car il ne semble pas que nos sites soient encodés de la même manière.
Message édité par : PhilGuen / 15-03-2012 11:12
|
|
fliaigre 913
| Posté : 15-03-2012 07:10 Super
|
|
PhilGuen 982
| Posté : 14-03-2012 22:44
Citation : fliaigre
Tu as une petite erreur au début du script :
function clean_text($text, $encode = '', $long) {
if ($encodage == 'utf-8') {
$text = utf8_decode($text);
}
au lieu de
function clean_text($text, $encodage = '',$long) {
if ($encodage == 'utf-8') {
$text = utf8_decode($text);
}
Après correction le lien est bien decodé mais pas le texte de la bulle. Sinon c'est super.
Désolé, j'étais abs pour la journée.
c'est ma faute, je me suis mélangé les pinceaux en effacant mes tests (j'avais mis d'autres tests avec la variable $encodage).
Demain, je te fais une version qui encodera aussi la bulle.
|
|
fliaigre 913
| Posté : 13-03-2012 21:07 Tu as une petite erreur au début du script :
function clean_text($text, $encode = '', $long)  ;{
if ($encodage == 'utf-8') {
$text = utf8_decode ($text);
}
au lieu de
function clean_text($text, $encodage = '',$long) {
< br /> if ($encodage == 'utf-8') {
$text = utf8_decode ($text);
}
Après correction le lien est bien decodé mais pas le texte de la bulle. Sinon c'est super.
|
|
PhilGuen 982
| Posté : 13-03-2012 18:52 C'est fait.
J'ai mis le "div" à la place du "p" (mauvaises habitudes de programmation)
Ce code n'est pas vraiment de moi mais c'est une adaptation de ceux fournis avec la librairie "fil_le". Faudrait que les "chefs" se penchent dessus car je ne suis qu'un bidouilleur et pas un programmeur. Sans doute à ajouter une gestion d'erreurs.
Enfin, pour l'instant, le principal est que ca fonctionne et que ca te serve autant qu'à moi.
@+
Message édité par : PhilGuen / 13-03-2012 19:36
|
|
fliaigre 913
| Posté : 13-03-2012 18:26 Tu peux le voir en fonctionnement ici : http://www.preparateur-en-pharmacie.com
AncisA c'est avec headline et AFSSAPS c'est avec ton module.
J'ai remplacé le balse p par un div pour afficher le lien "Lire la suite..."
|
|
fliaigre 913
| Posté : 13-03-2012 18:18 Tu me diras quand ce sera prêt.
Ceci me sera très utile pour relayer les alertes de l'AFSSAPS.
Vraiment merci.
|
|
PhilGuen 982
| Posté : 13-03-2012 14:29 Pour les caractères, problème d'encodage. Regarde ce que ca donne en commentant (//) la ligne 15 ou en supprimant carrément les lignes 14-15-16 du fichier lecteurRSS.php.
De mon côté, avec les sites en UTF8, ca a l'air de coller (guenet.net - guenet.org)
Pour la bulle, une balise title et alt doit faire l'affaire.
Je fais les modifs
Message édité par : PhilGuen / 13-03-2012 16:42
|
|
fliaigre 913
| Posté : 13-03-2012 13:57 OK ça marche, juste un pb avec l'affichage des caractères accentués avec le retour de NPDS
Pour l'AFSAPS ça marche. Le top serait d'avoir le texte complet dans une bulle comme avec headlines.
Vraiment bravo.
|
|