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

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)

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

ps: vous pouvez lancer le programme tel quel mais en mode DEBUGGER
car l'affichage se fait par DEBUG !!

pour l'interface utilisateur, ben debrouillez vous

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 *****************************