News2JSON v2.0.4

Le
Gérald Niel
(suivi sur fr.comp.reseaux.jntp)
Vous pouvez répondre sur fr.comp.lang.perl pour les remarques sur le
code.

Bonjour,

Je viens de finaliser la version Perl du connecteur N->J qui
s'installe coté serveur NNTP pour envoyer Usenet à un serveur JNTP et
qui remplace le script en PHP.

C'est mon premier programme en Perl, donc il y a probablement des
erreurs de débutants. Mais il est fonctionnel. Ça envoit le
Datatype::Article actuel.
En attendant d'évoluer vers le Datatype::Netnews.

Je suis preneur de toutes remarques pour améliorer le code ainsi que
l'interfaçage avec Inn.
Notament, pour pouvoir gérer un spool pour représenter les articles si
le serveur d'en face est indisponible.
Pour l'instant on ne fait rien.

<https://github.com/gegeweb/News2JSON/tree/v0.2.4>
<https://github.com/gegeweb/News2JSON/>

Il y a une erreur dans le POD et le Readme au chapitre SYNOPSIS.
Dans le fichier news2json.cf c'est le fqdn du feed configuré dans
newsfeeds qu'il faut mettre en premier paramètre.
Je vais corriger ça !…

Ça ne gère que le multipart/alternative qui comporte une partie en
text/plain. C'est cette partie qui est conservé et transmise au
serveur JNTP. Le reste n'est pas traité.

La transformation des checgroups en ListGroup non plus pour le moment.

@+
--
On ne le dira jamais assez, l'anarchisme, c'est l'ordre sans le
gouvernement ; c'est la paix sans la violence. C'est le contraire
précisément de tout ce qu'on lui reproche, soit par ignorance, soit
par mauvaise foi. -+- Hem Day -+-
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gérald Niel
Le #26326581
(suivi fr.comp.lang.perl)

Le Lundi 01 décembre 2014 à 21:57 UTC, yamo' écrivait sur
fr.comp.reseaux.jntp :

D'après ce que j'ai compris sm ne renvoie que O OK ou 1 et pas d'autres
codes d'erreur.

Et là ce devrait être juste un warning, <MID> introuvable.
Après peut-être que sm peut avoir d'autres plus grave et renvoyer 1.



En fait si tu regarde comment est construit le code (fonction
open_article) que j'ai récupéré des scripts controlchan et news2mail
(ligne 211 à 225)

Tu vas voir qu'on commence par vérifier que le format de la chaîne de
caractère correspond bien au format du token qui doit être renvoyé par
Inn.
On ouvre le flux de données sur l'entrée standard et on envoie à sm
via un pipe.
Dans le cas présent, ces erreurs sont générés (et on a les même avec
le script PHP) parce que quasi simultanément les articles sont annulés
(via nocem généralement). Donc quand on veut les lire ils n'existent
déjà plus.

La question que je me posais est est-ce que je ne devrais pas plutôt
utiliser readpipe() qui à priori fait la même chose.

D'ailleurs… en parlant des logs, ils sont vraiment bavards…
j'envisageais plutôt que syslog que je garderais pour les messages
critiques de journalisé le traffic dans un fichiers propre au script.

Pour en revenir à sm, il ne retourn 1 que si il n'a pas pu récupérer
l'article.
Est-ce qu'on doit vraiment quitter le script avec un die et
journaliser l'erreur (sauf pour déboguer éventuellement) ?

Est-ce qu'on ne pourrait se contenter d'un 'return undef' ?
Et journaliser l'erreur en debug ?

Sinon je fais tourner la pré 0.2.5. J'avais oublié de traité
injection-info dans la 0.2.4, et je supprime les guillements du From
lorsque nécéssaire.



OK.

Comme d'habitude, je te laisse affronter les bugs et après je mets à jour :P



C'est stable… les eternelles erreurs de syntaxe due à l'étourderie
sont corrigées. Et je peux plus tester en local… pas réussi à
installer Inn sur mon Mac OS X (pas d'utilisateurs news).
Et comme c'est pas mon ordi perso, je veux pas trop bidouiller
dessus, déjà que j'ai activé root, et installé un paquet de modules
paerl !… ;-)
Donc j'essuis les platres en lisant /var/log/news/errlog (où
malheureusement il n'y a pas la date).

Il y a juste un truc que je ne comprend pas…

Dans la fonction n2J, à partir de la ligne 436, je test si le type
mime existe et est egal à 'multipart/alternative' (pour l'instant je
ne traite pas autre chose) puis je ne garde que la partie text/plain.
Pour ça c'est OK.
En revanche si les contidtions ne sont pa remplies (else) je vide le
filer et retrourne undef au lieu du hash.

En fait j'ai :

if (!$ent->is_multipart) {
# je traite le body, ce n'est pas du multipart
}
elsif ( defined($mime_type) && $mime_type eq 'multipart/alternative') {
# je pasrse les différente partie et traite le body text.plain
# rien sinon
}
else {
$parser->filer->purge;
return undef;
}

$article{'Data'} = %data; # ça va faloir adapter quand on générera le
# hash pour le Jid il y a des données qu'on
# ne peut pas inclure à ce stade.

# purge tmp file
$parser->filer->purge;
return %article;

Et dans la boucle while, après avoir vérifié qu'au moins un feed,
Heuh… et là je crois que je suis en train de répondre à mon
interrogation car je teste la présence d'au moins une clef :
if ( scalar(keys %send_ok) )

Ligne 177 :
%article = n2j($article_string);
next if not %article;

Hors visiblement ça ne fait pas le next.
Car j'ai une réponse du serveur jntp qui renvoie une erreur PHP (ce
qui veut dire qu'il ne vérifie pas la validité du paquet envoyé…)
comme si j'avais envoyé un article vide (ce qui est le cas).

Peut être devrais-je faire :
next if ( !scalar(keys %article) );

Je vais tester ça plutôt que if not %article.

D'ailleurs en parlant du %article j'ai déplacé dans les variables
globales en tête de script. J'ai encore un peu de mal avec la portée
des variables au sein des boucles.
Car un my à cet endroit me générait des erreurs.

Je pense que je pourrais déplacer en tête du while.
Comme c'était dans un if c'est peut être pour ça que perl ralait à
cause de la non déclaration du hash ?

@+
--
On ne le dira jamais assez, l'anarchisme, c'est l'ordre sans le
gouvernement ; c'est la paix sans la violence. C'est le contraire
précisément de tout ce qu'on lui reproche, soit par ignorance, soit
par mauvaise foi. -+- Hem Day -+-
Nicolas George
Le #26326618
Gérald Niel , dans le message
En fait si tu regarde comment est construit le code (fonction
open_article) que j'ai récupéré des scripts controlchan et news2mail
(ligne 211 à 225)



L'original dit :

## Copyright 2001 by Marco d'Itri
## 1. Redistributions of source code must retain the above copyright
## notice, this list of conditions and the following disclaimer.

La copie ne contient pas de notice de copyright. Ça en dit long.
Gérald Niel
Le #26326643
Le 02/12/2014 09:44, Nicolas George a écrit :
Gérald Niel , dans le message
En fait si tu regarde comment est construit le code (fonction
open_article) que j'ai récupéré des scripts controlchan et news2mail
(ligne 211 à 225)



L'original dit :

## Copyright 2001 by Marco d'Itri
## 1. Redistributions of source code must retain the above copyright
## notice, this list of conditions and the following disclaimer.

La copie ne contient pas de notice de copyright. Ça en dit long.



Oui, je dois corriger ça, c'est un oubli.

Ou utiliser readpipe() à la place ?…
--
Gérald Niel
Gérald Niel
Le #26326896
Le Mardi 02 décembre 2014 à 08:44 UTC, Nicolas George écrivait sur
fr.comp.lang.perl :

## Copyright 2001 by Marco d'Itri
## 1. Redistributions of source code must retain the above copyright
## notice, this list of conditions and the following disclaimer.

La copie ne contient pas de notice de copyright. Ça en dit long.



Je viens de mettre à jour les sources, par contre je ne sais pas si
c'est la bonne méthode.
J'ai entouré les protions de codes originaire de controlchan de cette
mention.

Par contre, est-ce qu'il n'est pas plus simple d'utiliser readpipe() à
la place ?

@+
--
On ne le dira jamais assez, l'anarchisme, c'est l'ordre sans le
gouvernement ; c'est la paix sans la violence. C'est le contraire
précisément de tout ce qu'on lui reproche, soit par ignorance, soit
par mauvaise foi. -+- Hem Day -+-
Publicité
Poster une réponse
Anonyme