|
在接受到命令“GROUP alt.test”,新闻服务器返回了“211232 222996 223235 alt.test”。其中211是RFC标识码(简单的解释说命令已经成功的执行—查看RFC你可以获取更加详细的资料),返回信息说明其中有232篇文章,其中最旧的新闻的索引号是222996,而最新的新闻索引号是223235。现在让我们计算下:222996+232并不等于232235。这丢失的文章或者从这服务器移除出去了,或者被他的作者取消了(是的,这是可能的,也是很容易实现的),或者是删除了。 小心起见,在选择新闻分组之前,服务器可能需要认证,当然这是由服务器是否公开或者私有来决定的。一般是允许任何人获取新闻,但发表新闻需要通过认证。
<?php //$cfgUser = "xxxxxx"; //$cfgPasswd = "yyyyyy"; $cfgNewsGroup = "alt.php"; // identification required on private server if($cfgUser) { fputs($usenet_handle, "AUTHINFO USER".$cfgUser."\n"); $tmp = fgets($usenet_handle, 1024); fputs($usenet_handle, "AUTHINFO PASS ".$cfgPasswd."\n"); $tmp = fgets($usenet_handle, 1024); // check error if($tmp != "281Ok\r\n") { echo "502Authentication error\n"; exit(); } } // select newsgroup fputs($usenet_handle, "GROUP ".$cfgNewsGroup."\n"); $tmp = fgets($usenet_handle, 1024); if($tmp == "480 Authentication required for command\r\n") { echo "$tmp\n"; exit(); } $info = split(" ", $tmp); $first = $info[2]; $last = $info[3]; print "First : $first\n"; print "Last : $last\n"; ?>
获取一些文章 现在我们已经有最新文章的A索引号,那就能很容易的获取最新的十篇文章。RFC977指出使用ARTICLE命令可以和文章的索引号或者消息的ID一起使用。为了小心起见,在这里,文章的索引号和消息ID是不同的,因为每个新闻服务器定义不同,所以在不同的新闻服务器上相同文章的索引号都会不一样的,但是消息ID好是唯一的(包含在文章的头部中) <?php $cfgLimit = 10; // upload last articles $boucle=$last-$cfgLimit; while ($boucle <= $last) { set_time_limit(0); fputs($usenet_handle, "ARTICLE$boucle\n"); $article=""; $tmp = fgets($usenet_handle, 4096); if(substr($tmp,0,3) != "220") { echo "+----------------------+\n"; echo "Error onarticle $boucle\n"; echo "+----------------------+\n"; } else { while($tmp!=".\r\n") { $tmp = fgets($usenet_handle, 4096); $article = $article.$tmp; } echo "+----------------------+\n"; echo "Article$boucle\n"; echo "+----------------------+\n"; echo "$article\n"; } $boucle++; } ?> 我们仅仅从这个服务器的这个分组上获取了十条最新的新闻。你也可以使用HEAD命令来至获取文章的头部信息,或者使用BODY命令来获取新闻的正文。 关闭连接 使用fclose()函数你就可以结束与NNTP服务器之间的会话,当然你可以些一个新的文件,如下: <?php // close connexion fclose($usenet_handle); ?> 更多关于fclose()的信息,请看:http://www.php.net/manual/function.fclose.php 结论 本文中,我们只说明了在确定的情况下如何打开、使用和关闭一个socket连接:连接上一个NNTP服务器然后从新闻分组中取回一些文章。使用POST命令在NNTP服务器上发表一篇文章并不复杂多少。 因此,下一步就是编写一个新闻客户端(并去掉一些Netscape),它需要能很容易的保存文章,并使用一些搜索引擎(比如htgid, http://www.htdig.org/)来索引这些文章,而且要有一个WEB应用程序能进行新闻分组下的关键字搜索。这里有一个例子,你可以访问http://www.phpindex.com/ng/去下载。
(阅读次数:)
共2页: 上一页 [1] 2 下一页
|