一、Usenet與新聞組
Usenet新聞系統是一個全球存檔的“電子公告板”,各種主題的新聞組一應俱全。新聞組可以是面向全球泛泛而談,也可以是只面向某一個地區區域。
整個系統是由一個大量計算機組成的一個龐大的全球網絡,計算機之間共享Usenet上的帖子。
如果某一個用戶發了一個帖子到本地的Usenet計算機上,這個帖子會傳播到其它相連的計算機上,並再由這些計算機傳到與它們相連的計算機上,直到這個帖子傳播到了全世界。
每個系統都有一個它已經“訂閱”的新聞組的列表,它只接收它感興趣的新聞組里的帖子——而不是服務器上所有新聞組的帖子。
Usenet新聞組服務內容取決於服務提供者,很多都是可供公眾訪問的,也有一些只允許特定的用戶使用。
如果Usenet系統管理員設置了的話,有可能要求輸入用戶名和密碼。管理員也可以設置是否只允許上傳或只允許下載。
二、網絡新聞傳輸協議(NNTP)
供用戶在新聞組中下載或發表帖子的方法叫網絡新聞傳輸協議(NNTP)。
作為客戶端/服務器架構的另一個例子,NNTP與FTP的操作方式很像,而且簡單的多。
FTP需要不同的端口來做登錄、數據傳輸和控制,而NNTP只使用一個標准端口119來做通訊。你給服務器一個請求,它做出相應的反饋。
三、python和NNTP
與FTP協議一樣,NNTP也有個專屬的類nntplib來施展它的才能。
方法 | 描述 |
group(name) | 選擇一個組的名字,返回一個元組(rsp,ct,fst,lst,group):服務器的返回信息文章的數量、第一個和最后一個文章的號碼以及組名,所有數據都是字符串(返回的group與我們傳進去的那么應該是相同的) |
xhdr(hdr,artrg, [ofile]) | 返回文章范圍artrg(“頭-尾”的格式)內文章hdr頭的列表,或輸出到文件ofile中 |
body(id[,ofile]) | 給定文章的id,id可以是消息的ID(放在尖括號里),或一個文章號(是一個字符串),返回一個元祖(rsp,anum,mid,data):服務器的返回信息、文章號(是一個字符串)、消息的ID(放在尖括號里)和文章所有行的列表或把數據輸出到文件ofile中 |
head(id) | 與body()相似,只是返回的元祖中那個行的列表中只包含了文章的標題 |
article(id) | 也跟body()一樣,只是返回的元祖中哪個行的列表中包含了文章的標題和內容 |
stat(id) | 讓文章的“指針”指向id(同上,是一個消息的ID或是文章的號碼)。返回一個跟body一樣的元祖(rsp,anum,mid),但不包含文章的數據 |
next() | 用法和stat()類似,把文章指針移到下一篇文章,返回與stat()相似的元祖 |
last() | 用法和stat()類似,把文章指針轉移到最后一篇文章,返回與stat()相似的元祖 |
post(ufile) | 上傳ufile文件對象里的內容(使用ufile.readlines()),並在當前新聞組發表 |
quit() | 關閉連接,然后退出。 |