petit lecteur de NEWSGROUP (NNTP,USENET)

Programmation d'applications complexes
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

petit lecteur de NEWSGROUP (NNTP,USENET)

Message par Backup »

voici les premices d'un lecteur de newsgroup

je suis encore en train de voir comment afficher les images
(c'est pas gagné, car je tatonne grave a l'aide de TELNET :lol: )

mais deja on peux recuperer la listes des news group (sur un serveur libre)

et afficher le premier message du newsgroup choisi
et son contenu text , pour l'exemple j'ai choisi le group
"fr.comp.sys.atari" (nostalgie oblige), je fait afficher le contenu du premier article (format text) :D

pour changer le message il suffit d'ajouter +1 a la variable Val(premier_art$)

voila en esperant que cela mette sur la piste pour les images
ça pourrai etre le debut d'une petit lib NNTP pour faire un lecteur d'images cochone en purebasic :lol:

ps: vous pouvez lancer le programme tel quel mais en mode DEBUGGER
car l'affichage se fait par DEBUG !! :D
pour l'interface utilisateur, ben debrouillez vous :lol:
j'en ferai une , l'essentiel, etant les commandes de base...


voici le code :

Code : Tout sélectionner


; Par Dobro

Buffer.d = AllocateMemory(100000) 
If InitNetwork() = 0 
  MessageRequester("Error", "peux pas initializer le reseau", 0) 
  End 
EndIf 

Port = 119
envoi$=Chr(13)+Chr(10) 
; ============CHANGE HERE =================== 
IP$   = "news.readfreenews.net"
login$=""
pass$=""
; ============CHANGE HERE =================== 
ConnectionID = OpenNetworkConnection(IP$, Port) 
If ConnectionID  
  ab.d= ReceiveNetworkData(ConnectionID, Buffer.d , 100000)
  a$ = PeekS(Buffer.d,ab.d)  
  
  ; ************************************************************************************
  ; ************************************************************************************
  ;                    LOGIN sur compte privé !!
  SendNetworkString(ConnectionID, "AUTHINFO USER "+login$+envoi$)  
  ab.d= ReceiveNetworkData(ConnectionID, Buffer.d , 100000)
  b.s = PeekS(Buffer.d,ab.d)   
  code_erreur$ = (StringField(b.s, 1, " ") ) 
  Debug code_erreur$
  
  SendNetworkString(ConnectionID, "AUTHINFO PASS "+pass$+envoi$) 
  ab.d= ReceiveNetworkData(ConnectionID, Buffer.d , 100000)
  b.s = PeekS(Buffer.d,ab.d)   
  code_erreur$ = (StringField(b.s, 1, " ") )
  Debug code_erreur$
  
  
  
  ; ************************************************************************************
  ; ************************************************************************************
  ; ; *** recupere la liste des groupes ***
  ; 
  ; SendNetworkString(ConnectionID, "LIST"+envoi$) 
  ; ab.d= ReceiveNetworkData(ConnectionID, Buffer.d  , 100000)
  ; b.s = PeekS(Buffer.d ,ab.d)  
  ; nbr_ligne = CountString( b.s, Chr(13))  
  ; For i=1 To nbr_ligne
  ; liste$ = (StringField(b.s, i, Chr(13)) ):liste$=Mid(liste$,2,Len(liste$))
  ; Debug liste$
  ; Next i  
  
  
  
  
  
  
  
  
  ;************************************************************************************
  ;************************************************************************************
  ; permet de sélectionner le groupe de discussion désiré,
  ; par exemple « alt.pictures.monsters »,
  ; la commande retourne « 211 » (en cas de réussite) 
  ; suivi du nombre d'articles dans le groupe 
  ; et les indices du premier et du dernier article.
 ; nom_group$=" alt.binaries.pictures.animals "
  nom_group$=" fr.comp.sys.atari "
  SendNetworkString(ConnectionID, "GROUP"+nom_group$+envoi$) 
  ab.d= ReceiveNetworkData(ConnectionID, Buffer.d , 100000)
  b.s = PeekS(Buffer.d,ab.d)  
  
  
  code_erreur$ = (StringField(b.s, 1, " ") )
  nbr_article$ = (StringField(b.s, 2, " ") )
  premier_art$ = (StringField(b.s, 3, " ") )
  dernier_art$ = (StringField(b.s, 4, " ") )
  
  Debug  nom_group$
  Debug "code erreur "+code_erreur$ ; si 211 tout vas bien sinon erreur si code = 
  Debug "nombre d'article dans le groupe "+ nbr_article$
  Debug  "index du premier article "+premier_art$
  Debug "index du dernier article "+dernier_art$ 
  ; ************************************************************************************
  ; ************************************************************************************
  
  
  ; AFFICHE l'ENTETE DU MESSAGE
  corp=0
  ;premier_art$="92873"
  premier_art$="92167"
  
  numero_article=Val(premier_art$)+1 ; c'est le numero du premier article renvoyé par la commande ci-dessus
  SendNetworkString(ConnectionID, "ARTICLE "+Str(numero_article)+envoi$) 
  recomence:
  ab.d= ReceiveNetworkData(ConnectionID, Buffer.d , 100000) 
  If ab.d>0 ; il reste des données a lire
    b.s = PeekS(Buffer.d,-1,#PB_Ascii )   
    nbr_ligne = CountString( b.s, Chr(10))  
    
    For i=1 To nbr_ligne
      message$ = (StringField(b.s, i, Chr(10)) ):; entete_message$=Mid(corp_message$,2,Len( entete_message$))
     ; CallDebugger
     ; Debug  message$
      
      If message$ =Chr(13)
        corp=1 
      EndIf  
      
      If corp=0
        Debug "ENTETE MESSAGE "+ message$
      EndIf
      
      If corp=1
        Debug "CORP MESSAGE "+ message$
      EndIf  
      
      If Left (message$,5)="begin"
        corp=2 
      EndIf 
      
      If corp=2
        Debug "BINAIRE MESSAGE "+ message$
      EndIf  
      
      
    Next i 
    
    Goto recomence
  Else; ont a tout lu !!
    
    b.s = PeekS(Buffer.d,-1,#PB_Ascii )   
    nbr_ligne = CountString( b.s, Chr(10))  
   
    
    For i=1 To nbr_ligne
      message$ = (StringField(b.s, i, Chr(10)) )
      
      If message$ =Chr(13)
        corp=1 
      EndIf  
      
      If corp=0
        Debug "ENTETE MESSAGE "+ message$
      EndIf
      
      If corp=1
        Debug "CORP MESSAGE "+ message$
      EndIf  
      
      If Left (message$,5)="begin"
        corp=2 
      EndIf 
      
      If corp=2
        Debug "BINAIRE MESSAGE "+ message$
      EndIf  
      
    Next i
    
    
  EndIf
  
  
  
  
  
  
  
  CloseNetworkConnection(ConnectionID) 
Else 
  MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0) 
EndIf 

End   

; ExecutableFormat=Windows
; FirstLine=1
; EOF


; ************* Procedures *****************************


Dernière modification par Backup le sam. 15/juil./2006 16:27, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

ajout de la possibilité de se connecter a un compte privé

genre (news.free.fr) , qui demande un login et un mot de pass :D
je continu mes recherches :D
wolfjeremy
Messages : 1202
Inscription : sam. 31/déc./2005 23:52

Message par wolfjeremy »

Cool !

Moi j'attend une premiere version compiler :wink:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

wolfjeremy a écrit :Cool !

Moi j'attend une premiere version compiler :wink:
t'es un malin toi :lol:


bon refait, avec isolation des données binaire (ça prends forme)
restera a gerer les compressions, et la c'est pas encore gagné !

mais pour le text je peut dire que le lecteur fonctionne plutot bien :D
j'ai modifié le listing plus haut :D
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Je crois que LeCyb travaillais sur le protocole NNTP et qu'il est bien avancé donc avant d'aller plus loin je te suggère de voir avec lui ^^

Dri ;)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

haaa? tout ce temps perdu pour rien :?

j'ai pourtant cherché sur le forum avec les mots

usenet, Newsgroups, nntp, j'avais rien trouvé :?
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

pas sûr qu'il aie postésur le forum, pas même sûr que ce soit lui
mais comme c'est son pseudo qui m'est venu en voyant les initiales NNTP je ne pense pas me tromper...

Dri
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

non tu a raison, il parlait de ça dans ses projets en cours
il attendais la V4 pour continuer ... :?

ben en tout cas je vais continuer mon petit bonhomme de chemin
on verra bien ou ça me mene :D
Répondre