作者 主題: 可不可以把maillist導入phpbb  (閱讀 6958 次)

0 會員 與 1 訪客 正在閱讀本文。

天線

  • 榮譽博士
  • 憂鬱的高中生
  • ***
  • 文章數: 155
    • 檢視個人資料
可不可以把maillist導入phpbb
« 於: 2003-02-22 20:42 »
可不可以像http://openbazaar.net/

把新聞導入phpbb....這樣有點方便,不用兩邊跑

看起來也眼睛也舒服多了

如果可以....把幾個國外重點的討論群組像iptables,samba,postfix,.....也抓進來
那就真的太棒了

如果主機負荷太大,,,那就當小弟沒說了 :D  :D

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17480
    • 檢視個人資料
    • http://www.study-area.org
re: 可不可以把maillist導入phpbb
« 回覆 #1 於: 2003-02-22 22:00 »
嗯,duncan 兄曾有嘗試過,不過似乎不是 phpBB 。

duncanlo

  • SA 苦力組
  • 俺是博士!
  • *****
  • 文章數: 7312
    • 檢視個人資料
re: 可不可以把maillist導入phpbb
« 回覆 #2 於: 2003-02-23 23:52 »
是資料交換的問題...

天線

  • 榮譽博士
  • 憂鬱的高中生
  • ***
  • 文章數: 155
    • 檢視個人資料
re: 可不可以把maillist導入phpbb
« 回覆 #3 於: 2003-02-24 22:37 »
下午摸魚,找了一下phpbb

有找到這個mods,不過還在開發中http://www.m2f.netclectic.com/

我試了其中一個
http://www.phpbb.com/phpBB/viewtopic.php?t=60260&postdays=0&postorder=asc&start=20

結果還是不行,裝好之後完全看不出變化,找不到要去哪裡設定news server

duncanlo前輩談到資料交換的問題,
http://www.phpbb.com/phpBB/viewtopic.php?t=12414&postdays=0&postorder=asc&start=0

這裡有提到一個mail2sql,不知可否解決問題

現在用的的webmail有news-reader,可是如果可以用sql來整理和純檔,就真是太棒了,不用每次看到好文章還要另存新檔,而且還不知道存哪裡,想找還找不到...
天ㄚ....

問了http://openbazaar.net/可是沒有回應,可能那邊站長太忙了
看來又要在google中死纏濫打找答案

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17480
    • 檢視個人資料
    • http://www.study-area.org
re: 可不可以把maillist導入phpbb
« 回覆 #4 於: 2003-02-24 23:24 »
加油啊天線兄~~~ !

statue

  • 憂鬱的高中生
  • ***
  • 文章數: 157
    • 檢視個人資料
    • http://netlab.cse.yzu.edu.tw/~statue/
re: 可不可以把maillist導入phpbb
« 回覆 #5 於: 2003-02-24 23:53 »
我也很有興趣 QQ..找到通知我一聲...
ttp://netlab.cse.yzu.edu.tw/~statue/

statue

  • 憂鬱的高中生
  • ***
  • 文章數: 157
    • 檢視個人資料
    • http://netlab.cse.yzu.edu.tw/~statue/
re: 可不可以把maillist導入phpbb
« 回覆 #6 於: 2003-02-25 03:24 »
剛花了一點時間,已經寫好了 QQ......
還在整合中,等我明天上課完在放出來............
ttp://netlab.cse.yzu.edu.tw/~statue/

statue

  • 憂鬱的高中生
  • ***
  • 文章數: 157
    • 檢視個人資料
    • http://netlab.cse.yzu.edu.tw/~statue/
re: 可不可以把maillist導入phpbb
« 回覆 #7 於: 2003-02-25 04:31 »
我說一下我的做法,主要是參考 rfc977, rfc1036 做掉跟 news 溝通的部分
其實可以直接使用 pear 的 net::nntp,就可以省掉做溝通的部分
Pear Net::NNTP:
  http://pear.php.net/manual/en/packages.networking.net_nntp.php
  http://pear.php.net/package-info.php?pacid=11
只要能溝通後,紀錄一個號碼,這個號碼就是你抓到第幾筆的號碼,然後每次跟進到最新的號碼就好了
然後透過 insert_port 這個 mod 來將文章輸入資料庫
insert_post:
  http://www.phpbb.com/phpBB/viewtopic.php?t=45535&highlight=insertpost
這樣子就做完了最基本的功能了,不知道有沒有錯誤的地方?..

進階的部分就是做:
1. 色彩控制
2. 特殊字元進出資料庫
3. 相同文章串成一串

以上的部分是 pahud 和 duncan 討論的結果,我只是整理一下..QQ..
ttp://netlab.cse.yzu.edu.tw/~statue/

statue

  • 憂鬱的高中生
  • ***
  • 文章數: 157
    • 檢視個人資料
    • http://netlab.cse.yzu.edu.tw/~statue/
re: 可不可以把maillist導入phpbb
« 回覆 #8 於: 2003-02-25 07:26 »
SAMPLE:
  http://freebsd.sinica.edu.tw/phpBB2/
INSTALL:
  1. 到 http://www.phpbb.com/phpBB/viewtopic.php?t=45535&highlight=insertpost
  抓 insert_post_example.zip 後,在 phpBB2/ 目錄下解壓縮.
  並修改 mods/netclectic/functions_insert_post.php
130c130
<     $newpostsql = ($mode == 'newtopic') ? ',forum_topics = forum_topics + 1' : '';
---
>     $newpostsql = ($mode == 'newtopic') ? 'forum_topics = forum_topics + 1' : '';
  2. 將下面的 code 拷貝到 phpBB2/ 底下,自己命名.
  3. 在跟 phpBB2 同資料庫內,建立表格如下:
  CREATE TABLE phpbb_nntpactive (
    forum_id smallint(5) unsigned NOT NULL default '1',
    user_id smallint(5) unsigned NOT NULL default '2',
    newsserver varchar(64) NOT NULL default '',
    newsgroup varchar(64) NOT NULL default '',
    article varchar(7) NOT NULL default '',
    PRIMARY KEY  (forum_id)
  ) TYPE=MyISAM COMMENT='nntp to phpBB active list table';
  4. 輸入資料項目如下,可建立多筆:
  INSERT INTO phpbb_nntpactive VALUES ('1','2','news.ncu.edu.tw',
    'tw.bbs.comp.386bsd','');
  forum_id: phpbb 的 forum id
  user_id: phpbb 的 user id
  newsserver: 你要抓的 news 名稱
  newsgroup: 你要抓的 group 名稱
  article: 最後一篇你抓過的 id

PS. 注意事項同 news 抓信.
      如果有 PEAR 可以裝 Net::NNTP 就可以不需要下面的 nntp class
*/

代碼: [選擇]

<?php
/** maximum number of articles received for a group each time */
$max_art 50;

define&#40;'IN_PHPBB', true&#41;;

/**
 * modify this to point to your phpbb directory, relevent to this file.
 * e.g. './phpBB2/'
 */
$phpbb_root_path './';

include&
#40;$phpbb_root_path . 'extension.inc'&#41;;
include&#40;$phpbb_root_path . 'common.'.$phpEx&#41;;
include&#40;$phpbb_root_path . 'mods/netclectic/functions_insert_post.'.$phpEx&#41;;

$sql "SELECT * FROM phpbb_nntpactive";
if &
#40; !&#40;$result = $db->sql_query&#40;$sql&#41;&#41; &#41;
&#123;
  
message_die&#40;CRITICAL_ERROR, 'Could not obtain phpbb_nntpactive data',
    
''__LINE____FILE__$sql&#41;;
&#125;

while&#40;$nntpdata = $db->sql_fetchrow&#40;$result&#41;&#41;
&#123;
  
$sql "SELECT * FROM " USERS_TABLE " WHERE user_id = ".
    
$nntpdata[user_id&#93;;
  
if &#40; !&#40;$result2 = $db->sql_query&#40;$sql&#41;&#41; &#41;
  
&#123;
    
message_die&#40;CRITICAL_ERROR, 'Could not obtain lastvisit data from user
      
table', '', __LINE__, __FILE__, $sql&#41;;
  &#125;
  $userdata = $db->sql_fetchrow&#40;$result2&#41;;
  init_userprefs&#40;$userdata&#41;;

  $nntp = new NNTP;
  $nntp->setDebug&#40;&#41;;
  $nntp->connect&#40;$nntpdata[newsserver&#93;&#41;;
  $nntp->selectGroup&#40;$nntpdata[newsgroup&#93;&#41;;
  if&#40;$nntpdata[article&#93; < $nntp->min&#40;&#41;&#41;&#123;
    $sql = "UPDATE phpbb_nntpactive SET article = ".$nntp->min&#40;&#41;." WHERE
      forum_id = ".$nntpdata[forum_id&#93;;
    $db->sql_query&#40;$sql&#41;;
    $nntpdata[article&#93; = $nntp->min&#40;&#41;;
  &#125;
  $fetch_min = &#40;$nntpdata[article&#93; > $nntp->min&#40;&#41;&#41; ? $nntpdata[article&#93; &#58;
    $nntp->min&#40;&#41;;
  $fetch_max = &#40;$fetch_min + $max_art > $nntp->max&#40;&#41;&#41; ? $nntp->max&#40;&#41; &#58;
    $fetch_min + $max_art;
  for&#40;$article = $fetch_min+1; $article < $fetch_max; $article++&#41;
  &#123;
    $ret = $nntp->splitHeaders&#40;$article&#41;;
    $subject = $ret[Subject&#93;;
    $message = "作者:".$ret[From&#93;."\n";
    $message .= "標題:".$ret[Subject&#93;."\n";
    $message .= "時間:".$ret[Organization&#93;."\n";
    $message .= "路徑:".substr&#40;$ret[Path&#93;,0,74&#41;."\n";
    if&#40;$ret["NNTP-Posting-Host"&#93;&#41;
    $message .= "來源:".$ret["NNTP-Posting-Host"&#93;."\n";
    $message .= "\n";
    $message .= $nntp->getBody&#40;$article&#41;;
    // if subject, post it.
    if&#40;$subject&#41;
      $post_details = insert_post&#40;$message, $subject, $nntpdata[forum_id&#93;,
        $userdata['
user_id'&#93;, $userdata['username'&#93;,
        $userdata['
user_attachsig'&#93;&#41;;
    // update nntpactive.article when port.
    $sql = "UPDATE phpbb_nntpactive SET article = ".$article." WHERE
      forum_id = ".$nntpdata[forum_id&#93;;
    $db->sql_query&#40;$sql&#41;;
  &#125;
  $nntp->quit&#40;&#41;;
&#125;

/** Class NNTP */
class NNTP
&#123;
  var $max = '';
  var $min = '';
  /** File pointer of the nntp-cnnection */
  var $fp = null;
  /** Output or not debug information */
  var $_debug = false;

  function raiseError&#40;$errstr&#41;
  &#123;
    print "ERR&#58; $errstr\n";
  &#125;

  /** Issue a command to the NNTP server */
  function command&#40;$cmd&#41;
  &#123;
    if &#40;!@is_resource&#40;$this->fp&#41;&#41; &#123;
      return $this->raiseError&#40;'
Not connected'&#41;;
    &#125;
    fputs&#40;$this->fp, "$cmd\r\n"&#41;;
    if &#40;$this->_debug&#41; &#123;
      print ">> $cmd\n";
    &#125;
    $response = fgets&#40;$this->fp, 128&#41;;
    if &#40;$this->_debug&#41; &#123;
      print "<< $response";
    &#125;
    return $response;
  &#125;

  /** returns the response code of a newsserver command */
  function responseCode&#40;$response&#41;
  &#123;
    $parts = explode&#40;' ', ltrim&#40;$response&#41;&#41;;
    return &#40;int&#41; $parts[0&#93;;
  &#125;

  /** Get data until a line with only a '
.' in it is read and return data.*/
  function _getData&#40;&#41;
  &#123;
    $body = null;
    while&#40;!feof&#40;$this->fp&#41;&#41; &#123;
      $line = trim&#40;fgets&#40;$this->fp, 256&#41;&#41;;
      if &#40;$line == '
.'&#41; &#123;
        break;
      &#125; else &#123;
        $body .= $line;
      &#125;
    &#125;
    return $body;
  &#125;

  /** Connect to the newsserver */
  function connect&#40;$nntpserver, $port = 119&#41;
  &#123;
    $fp = @fsockopen&#40;$nntpserver, $port, $errno, $errstr, 15&#41;;
    if &#40;!is_resource&#40;$fp&#41;&#41; &#123;
      return $this->raiseError&#40;"Could not connect to NNTP-server $nntpserver"&#41;;
    &#125;
    socket_set_blocking&#40;$fp, true&#41;;
    if &#40;!$fp&#41; &#123;
      return $this->raiseError&#40;'
Not connected'&#41;;
    &#125;
    $response = fgets&#40;$fp, 128&#41;;
    $this->fp = $fp;
    return ture;
  &#125;

  /** issue a GROUP command */
  function selectGroup&#40;$newsgroup&#41;
  &#123;
    $r = $this->command&#40;"GROUP $newsgroup"&#41;;
    if&#40;$this->responseCode&#40;$r&#41; > 299&#41; &#123;
      return $this->raiseError&#40;$r&#41;;
    &#125;
    $response_arr = split&#40;' ', $r&#41;;
    $this->max = $response_arr[3&#93;;
    $this->min = $response_arr[2&#93;;
  &#125;

  /** Get the headers of an article from the currently open connection */
  function getHeaders&#40;$article&#41;
  &#123;
    $r = $this->command&#40;"HEAD $article"&#41;;
    if&#40;$this->responseCode&#40;$r&#41; > 299&#41; &#123;
      return $this->raiseError&#40;$r&#41;;
    &#125;
    $headers = '';
    while&#40;!feof&#40;$this->fp&#41;&#41; &#123;
      $line = trim&#40;fgets&#40;$this->fp, 256&#41;&#41;;
      if &#40;$line == '
.'&#41; &#123;
        break;
      &#125; else &#123;
        $headers .= $line . "\n";
      &#125;
    &#125;
    return $headers;
  &#125;

  /**
  * Returns the headers of a given article in the form of
  * an associative array. Ex&#58;
  * array&#40;
  *   '
From'      => 'foo@bar.com &#40;Foo Smith&#41;',
  
*   'Subject'   => 'Re&#58; Using NNTP class',
  *   ....
  *   &
#41;;
  
*/
  function 
splitHeaders&#40;$article&#41;
  
&#123;
    
$headers $this->getHeaders&#40;$article&#41;;
    
$lines explode&#40;"\n", $headers&#41;;
    
foreach &#40;$lines as $line&#41; &#123;
      
$line trim&#40;$line&#41;;
      
if &#40;&#40;$pos = strpos&#40;$line, '&#58;'&#41;&#41; !== false&#41; &#123;
        
$head substr&#40;$line, 0, $pos&#41;;
        
$ret[$head&#93; = ltrim&#40;substr&#40;$line, $pos+1&#41;&#41;;
      
&#125; else &#123;
        
$ret[$head&#93; .= $line;
      
&#125;
    
&#125;
    
if &#40;isset&#40;$ret['References'&#93;&#41;&#41; &#123;
      
$ret['References'&#93; = explode &#40;' ', $ret['References'&#93;&#41;;
    
&#125;
    
return $ret;
  &
#125;

  /** Get the body of an article from the currently open connection. */
  
function getBody&#40;$article&#41;
  
&#123;
    
$r $this->command&#40;"BODY $article"&#41;;
    
if &#40;$this->responseCode&#40;$r&#41; > 299&#41; &#123;
      
return $this->raiseError&#40;$r&#41;;
    
&#125;
    
$body null;
    while&
#40;!feof&#40;$this->fp&#41;&#41; &#123;
      
$line trim&#40;fgets&#40;$this->fp, 256&#41;&#41;;
      
if &#40;$line == '.'&#41; &#123;
        
break;
      &
#125; else &#123;
        
$body .= $line "\n";
      &
#125;
    
&#125;
    
return $body;
  &
#125;
  /** Maximum article number in current group */
  
function max&#40;&#41;
  
&#123;
    
if &#40;!@is_resource&#40;$this->fp&#41;&#41; &#123;
      
return $this->raiseError&#40;'Not connected'&#41;;
    
&#125;
    
return $this->max;
  &
#125;

  /** Minimum article number in current group */
  
function min&#40;&#41;
  
&#123;
    
if &#40;!@is_resource&#40;$this->fp&#41;&#41; &#123;
      
return $this->raiseError&#40;'Not connected'&#41;;
    
&#125;
    
return $this->min;
  &
#125;

  /** sets debug on or off */
  
function setDebug&#40;$on = true&#41;
  
&#123;
    
$this->_debug $on;
  &
#125;

  /** Close connection to the newsserver */
  
function quit&#40;&#41;
  
&#123;
    
$this->command&#40;"QUIT"&#41;;
    
fclose&#40;$this->fp&#41;;
  
&#125;
&#125;
/** Class NNTP */
?>

ttp://netlab.cse.yzu.edu.tw/~statue/

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17480
    • 檢視個人資料
    • http://www.study-area.org
re: 可不可以把maillist導入phpbb
« 回覆 #9 於: 2003-02-25 10:40 »
感謝 statue 大大的心得﹗

不知哪位學長有空來 try try 看?  ^_^

duncanlo

  • SA 苦力組
  • 俺是博士!
  • *****
  • 文章數: 7312
    • 檢視個人資料
re: 可不可以把maillist導入phpbb
« 回覆 #10 於: 2003-02-25 11:04 »
直接用phpbb的function_post_insert是比較好!

openbazaar的站長最近會作出一個mod,
可以把相關主題串在一起,
而不是每封mail就是一篇文章.

天線

  • 榮譽博士
  • 憂鬱的高中生
  • ***
  • 文章數: 155
    • 檢視個人資料
re: 可不可以把maillist導入phpbb
« 回覆 #11 於: 2003-02-25 14:19 »
疑.......這麼好........

謝謝學長..

擱來去..試試看