火车采集器软件交流官方论坛

 找回密码
 加入会员
搜索
火车采集器V9版免费下载火车浏览器 - 可视采集,万能群发,全自动脚本工具
查看: 7899|回复: 8

supesite 采集 思路【请大家一起完成】

[复制链接]
发表于 2007-5-25 13:58:05 | 显示全部楼层 |阅读模式
相信诸位用supesite 的不少吧,为什么不包含supesite模块我不清楚,好像是必须要有两个cookies,没办法,官方没有我们自己搞一个,但是我不是搞php的,代码方面不行,说一下我的思路吧,代码和模块设计方面请有能力的朋友搞一下,搞出来的朋友分享一下

思路:
1,首先制作一个新闻发布页面,包含字段和supesite新闻发布字段相同,但不要加任何权限和验证。
2,然后用火车头对我们自己制作的新闻页面post数据。

这样的话就不存在cookie的问题了,自己做的发布页面可以随时改名以便安全起见,第一步已经完成了

<?
class dbstuff {
        var $querynum = 0;
        function connect($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0) {
                if($pconnect) {
                        if([email=!@mysql_pconnect($dbhost]!@mysql_pconnect($dbhost[/email], $dbuser, $dbpw)) {
                                $this->halt('Can not connect to MySQL server');
                        }
                } else {
                        if([email=!@mysql_connect($dbhost]!@mysql_connect($dbhost[/email], $dbuser, $dbpw)) {
                                $this->halt('Can not connect to MySQL server');
                        }
                }
                if($this->version() > '4.1') {
                        global $charset, $dbcharset;
                        if(!$dbcharset && in_array(strtolower($charset), array('gbk', 'big5', 'utf-8'))) {
                                $dbcharset = str_replace('-', '', $charset);
                        }
                        if($dbcharset) {
                                mysql_query("SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary");
                        }
                        if($this->version() > '5.0.1') {
                                mysql_query("SET sql_mode=''");
                        }
                }
                if($dbname) {
                        mysql_select_db($dbname);
                }
        }
        function select_db($dbname) {
                return mysql_select_db($dbname);
        }
        function fetch_array($query, $result_type = MYSQL_ASSOC) {
                return mysql_fetch_array($query, $result_type);
        }
        function query($sql, $type = '') {
                global $debug, $discuz_starttime, $sqldebug;

                $func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?
                        'mysql_unbuffered_query' : 'mysql_query';
                if(!($query = $func($sql)) && $type != 'SILENT') {
                        $this->halt('MySQL Query Error', $sql);
                }

                $this->querynum++;
                return $query;
        }
        function affected_rows() {
                return mysql_affected_rows();
        }
        function error() {
                return mysql_error();
        }
        function errno() {
                return intval(mysql_errno());
        }
        function result($query, $row) {
                $query = @mysql_result($query, $row);
                return $query;
        }
        function num_rows($query) {
                $query = mysql_num_rows($query);
                return $query;
        }
        function num_fields($query) {
                return mysql_num_fields($query);
        }
        function free_result($query) {
                return mysql_free_result($query);
        }
        function insert_id() {
                $id = mysql_insert_id();
                return $id;
        }
        function fetch_row($query) {
                $query = mysql_fetch_row($query);
                return $query;
        }
        function fetch_fields($query) {
                return mysql_fetch_field($query);
        }
        function version() {
                return mysql_get_server_info();
        }
        function close() {
                return mysql_close();
        }
        function halt($message = '', $sql = '') {
                return "db halt";
        }
}
$dbhost = 'localhost';                        // database server
                                        // 数据库服务器
$dbuser = 'root';                        // database username
                                        // 数据库用户名
$dbpw = 'xxx';                        // database password
                                        // 数据库密码
$dbname = 'xxx';                        // database name
                                        // 数据库名
$adminemail = '';                // admin email
                                        // 论坛系统 Email
$dbreport = 0;                                // send db error report? 1=yes
                                        // 是否发送数据库错误报告? 0=否, 1=是
//上面其实就是dz里抄的代码
$returnMessage = "";
$db = new dbstuff;
$db->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
unset($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
if ($_POST['message'] && $_POST['subject'] && $_POST['catid']){
        $query = $db->query("SELECT subject FROM supe_spaceitems WHERE subject='".$_POST['subject']."'");
        if ($data = $db->fetch_array($query)) {
                $returnMessage = "重复采集";
        } else {
                //$_POST['message'] = strip_tags($_POST['message'],"<img>,<br>,<p>");
                $messageArray = explode("你定义的分页i符号",$_POST['message']);//5.0的分页和论坛的回复处理差不多。不知道5.5的分页处理是否还和5.0的一样。
                $catid = $_POST['catid'];
                $subject = $_POST['subject'];
                $from = $_POST['from']?$_POST['from']:"";
                $dateline = time();
                $uid = "";
               
                $query = $db->query("INSERT INTO supe_spaceitems (catid,subject,uid,type,dateline,lastpost) VALUES ('$catid','$subject','$uid','news','$dateline','$dateline')");
                $itemid = $db->insert_id();
                foreach ($messageArray as $newMessage) {
                        $query = $db->query("INSERT INTO supe_spacenews (itemid,message,newsfrom) VALUES ('$itemid','$newMessage','$from')");
                }
                $returnMessage = "成功";
        }
} else {
        $returnMessage = "信息不全";
}
setcookie("user", "test", time() + 3600);
setcookie("password", "test", time() + 3600);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="
http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" c />
<title>无标题文档</title>
</head>
<body>
欢迎您回来
<?=$returnMessage?>
</body>
</html>


但是第二步模块怎么制作???希望群策群力,造福supesite站长:handshake

发表于 2007-5-25 14:43:21 | 显示全部楼层
上次做了一个没成功:L
发表于 2007-5-25 20:25:50 | 显示全部楼层
:L   把我的5.0发布页抄过来了

发布页都有了 模块居然还不能写出来  你到底还需要什么信息建立一个模块呢

上面 这个作为提交发布页

是需要刷列表么 ----分类不复杂的话  用网站地图吧

要刷列表写个读分类数据库的sql也可以    其实 SS虽然没开源 但数据字典倒是满详细的 需要什么字段和意义都写的很清楚了
表supe_categories   如果你没有改前缀的话
  1. <?
  2. echo "新闻类列表开始<br>";
  3. $query = $db->query("SELECT catid,name FROM supe_categories  WHERE type='news' ORDER BY upid,displayorder");
  4. while ($data = $db->fetch_array($query)) {
  5. echo "ID:<b>$data[catid]<b>-$data[name] <br>\n";
  6. }
  7. echo "新闻类列表结束";
  8. ?>
复制代码


把这个放到上面发布页
  1. </body>
  2. </html>
复制代码

前就可以刷列表了

登陆页也可以用这个发布页 或者就选不需要登陆得了   可以看见上面设置了cook 和 显示信息“欢迎您回来”  用这个作为成功标志就可以了---因为自己使用 所以没有设安全监察机制  自己需要的话最简单的做法就是把用户名和密码写道这个php页中做个简单判断,复杂点可以自己把用户名和密码和用户数据库比较就是了  只是密码肯定是编过码的 不知道是不是md5  可以自己试一下

还需要什么?post数据么
提交的参数 其实都是使用的字段名
  1. if ($_POST['message'] && $_POST['subject'] && $_POST['catid']){
复制代码

看出来了吧  这是需要的最基本的3个数据
message 对应内容
subject 对应标题

catid 对应分类

其他
  1. $from = $_POST['from']?$_POST['from']:"";
复制代码

from 对应的 出处  这个和字段名不一样 对应的字段名newsfrom
发布时间和更新时间都直接取用了服务器的时间戳,如果你愿意 也可以添加到post中

还有2个字段常用(我没用)可选 可以自己比照添加
uid username ----用户ID  作者


5.5的表肯定和5.0有所不同 但基础字段应该不会改变  因为这涉及到版本顺利平稳过渡的问题
下面是5.0的其中3张表(大半年没用ss了  5.5没下来看过)
附基础表

supe_spaceitems        信息表        
itemid        mediumint        信息id
catid        smallint        信息分类id
uid        mediumint        用户uid
tid        mediumint        导入论坛帖子id
username        char        用户名
itemtypeid        mediumint        自定义分类id
type        char        信息类型
subtype        char        子类型
subject        char        信息标题
dateline        int        添加时间
lastpost        int        最后回复时间
viewnum        mediumint        查看数
replynum        mediumint        回复数
trackbacknum        mediumint        TrackBack数
goodrate        int        正的评分
badrate        int        负的评分
digest        tinyint        精华等级
top        tinyint        置顶等级
allowreply        tinyint        是否允许回复
hash        char        附件键值
folder        tinyint        所在的文件夹
haveattach        tinyint        是否含有附件
grade        tinyint        审核等级

新闻表
supe_spacenews        资讯表        
nid        mediumint        资讯id
itemid        mediumint        资讯信息id
message        text        资讯内容
relativetags        text        相关TAG
postip        varchar        发布时的IP地址
relativeitemids        varchar        相关信息id
customfieldid        smallint        自定义字段id
customfieldtext        text        自定义字段信息
includetags        text        资讯TAG
newsauthor        varchar        资讯作者
newsfrom        varchar        资讯来源
newsurl        varchar        资讯链接


分类表
supe_categories        分类表        
catid        smallint        信息分类id
upid        smallint        分类父id
name        varchar        分类名称
note        text        分类说明
type        varchar        分类所属类型
ischannel        tinyint        分类是否为专题
displayorder        mediumint        分类显示顺序
tpl        varchar        分类使用的模版文件
thumb        varchar        分类的封面图片缩略图
image        varchar        分类的封面图片
haveattach        tinyint        是否有封面图片
bbsmodel        tinyint        是否直接读取BBS相应板块
bbsurltype        varchar        BBS板块
blockmodel        tinyint        读取BBS板块使用模块类型
blockparameter        text        使用的模块参数
blocktext        text        使用的模块参数设置字符串
url        varchar        分类跳转URL
subcatid        varchar        分类子id

[ 本帖最后由 play528 于 2007-5-25 21:28 编辑 ]

评分

1

查看全部评分

发表于 2007-5-26 00:06:36 | 显示全部楼层

回复 #3 play528 的帖子

强!搞个完整的出来吧
发表于 2007-5-26 09:17:14 | 显示全部楼层
首先表示一下歉意  因为大半年没用ss 我原来的是直接连接DZ的sql类库 后来发表时为了方便直接将该库代码合进去 但基础信细却未抄完 所以可能让有些朋友作了无用功

刚才看了管理员回复,还是决定重新整理一下 结果发现问题 予以刚正


  1. <?
  2. define('IN_DISCUZ', TRUE);

  3. //下面其实就是链接dz论坛的设置和类 具体位置你可能需要改一下(../bbs/ 即论坛目录需自己更改指定 ) ,这样做可以无需重新设定参数---调用DZ的,但如果你SS和DZ非同数据库 则需要单独设置
  4. require_once '../bbs/config.inc.php';
  5. require_once '../bbs/include/db_'.$database.'.class.php';
  6. $returnMessage = "";
  7. $db = new dbstuff;
  8. $db->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
  9. unset($dbhost, $dbuser, $dbpw, $dbname, $pconnect);
  10. if ($_POST['message'] && $_POST['subject'] && $_POST['catid']){
  11.         $_POST['catid'] = trim($_POST['autocatid'])?trim($_POST['autocatid']):$_POST['catid'];
  12.         $query = $db->query("SELECT subject FROM supe_spaceitems WHERE subject='".$_POST['subject']."'");
  13.         if ($data = $db->fetch_array($query)) {
  14.                 $returnMessage = "重复采集";
  15.         } else {
  16.                 $_POST['message'] = strip_tags($_POST['message'],"<img>,<br>,<p>");
  17.                 $messageArray = explode("cutpage",$_POST['message']);
  18.                 $catid = $_POST['catid'];
  19.                 $subject = $_POST['subject'];
  20.                 $from = $_POST['from']?$_POST['from']:"";
  21.                 $dateline = $_POST['dateline']?$_POST['dateline']:time();
  22.                 $uid = $_POST['uid']?$_POST['uid']:"1";
  23.                 $newsauthor  = $_POST['newsauthor']?$_POST['newsauthor']:"1";
  24.                
  25.                 $query = $db->query("INSERT INTO supe_spaceitems (catid,subject,uid,type,dateline,lastpost) VALUES ('$catid','$subject','$uid','news','$dateline','$dateline')");
  26.                 $itemid = $db->insert_id();
  27.                 foreach ($messageArray as $newMessage) {
  28.                         $query = $db->query("INSERT INTO supe_spacenews (itemid,message,newsfrom,newsauthor) VALUES ('$itemid','$newMessage','$from','$newsauthor')");
  29.                 }
  30.                 $returnMessage = "成功";
  31.         }
  32. } else {
  33.         $returnMessage = "信息不全";
  34. }
  35. setcookie("user", "admin", time() + 3600);
  36. setcookie("password", "111111", time() + 3600);
  37. ?>
  38. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  39. <html xmlns="http://www.w3.org/1999/xhtml">
  40. <head>
  41. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  42. <title>ss5.0模拟提交</title>
  43. </head>

  44. <body>
  45. 这是欢迎信息:
  46. 欢迎您回来<br>
  47. 下面是页面栏目刷新部分
  48. <!--fenlei-->
  49. <?
  50. $query = $db->query("SELECT catid,name FROM supe_categories WHERE type='news' ORDER BY upid,displayorder");
  51. while ($data = $db->fetch_array($query)) {
  52. echo "ID:[$data[catid]]-[$data[name]] <br>\n";
  53. }
  54. ?>
  55. <!--/fenlei-->
  56. <?=$returnMessage?>
  57. </body>
  58. </html>

复制代码


这个页面作为模块的所有页面  
存为任意文件名 在 任意目录下  (注意修改require_once '../bbs/config.inc.php';
require_once '../bbs/include/db_'.$database.'.class.php'; 论坛的相对路径)

如果因各种原因不想调用DZ设置 将下面代码

  1. require_once '../bbs/config.inc.php';
  2. require_once '../bbs/include/db_'.$database.'.class.php';
复制代码

换为下面代码

  1.         $dbhost = 'localhost';                        // database server
  2.                                                 // 数据库服务器

  3.         $dbuser = '你的数据库管理员名';                        // database username
  4.                                                 // 数据库用户名

  5.         $dbpw = '管理员密码';                        // database password
  6.                                                 // 数据库密码

  7.         $dbname = 'SS数据库名字';                        // database name
  8.                                                 // 数据库名

  9.         $adminemail = 'admin@your.com';                // admin email
  10.                                                 // 论坛系统 Email

  11.         $dbreport = 0;                                // send db error report? 1=yes
  12.                                                 // 是否发送数据库错误报告? 0=否, 1=是
  13.         $pconnect = 0;                                // persistent database connection, 0=off, 1=on
  14.                                                 // 数据库持久连接 0=关闭, 1=打开
  15.         $database = 'mysql';                        // 'mysql' for MySQL version and 'pgsql' for PostgreSQL version
  16.                                                 // MySQL 版本请设置 'mysql', PgSQL 版本请设置 'pgsql'

  17.         $charset = 'gbk';                        // default character set, 'gbk', 'big5', 'utf-8' are available
  18.                                                 // 论坛默认字符集, 可选 'gbk', 'big5', 'utf-8'

  19.         $dbcharset = '';                        // default database character set, 'gbk', 'big5', 'utf8', 'latin1' and blank are available
  20.                                                 // MySQL 字符集, 可选 'gbk', 'big5', 'utf8', 'latin1', 留空为按照论坛字符集设定

  21. class dbstuff {
  22.         var $querynum = 0;

  23.         function connect($dbhost, $dbuser, $dbpw, $dbname = '', $pconnect = 0) {
  24.                 if($pconnect) {
  25.                         if(!@mysql_pconnect($dbhost, $dbuser, $dbpw)) {
  26.                                 $this->halt('Can not connect to MySQL server');
  27.                         }
  28.                 } else {
  29.                         if(!@mysql_connect($dbhost, $dbuser, $dbpw)) {
  30.                                 $this->halt('Can not connect to MySQL server');
  31.                         }
  32.                 }

  33.                 if($this->version() > '4.1') {
  34.                         global $charset, $dbcharset;
  35.                         if(!$dbcharset && in_array(strtolower($charset), array('gbk', 'big5', 'utf-8'))) {
  36.                                 $dbcharset = str_replace('-', '', $charset);
  37.                         }

  38.                         if($dbcharset) {
  39.                                 mysql_query("SET character_set_connection=$dbcharset, character_set_results=$dbcharset, character_set_client=binary");
  40.                         }

  41.                         if($this->version() > '5.0.1') {
  42.                                 mysql_query("SET sql_mode=''");
  43.                         }
  44.                 }

  45.                 if($dbname) {
  46.                         mysql_select_db($dbname);
  47.                 }

  48.         }

  49.         function select_db($dbname) {
  50.                 return mysql_select_db($dbname);
  51.         }

  52.         function fetch_array($query, $result_type = MYSQL_ASSOC) {
  53.                 return mysql_fetch_array($query, $result_type);
  54.         }

  55.         function query($sql, $type = '') {
  56.                 global $debug, $discuz_starttime, $sqldebug;


  57.                 $func = $type == 'UNBUFFERED' && @function_exists('mysql_unbuffered_query') ?
  58.                         'mysql_unbuffered_query' : 'mysql_query';
  59.                 if(!($query = $func($sql)) && $type != 'SILENT') {
  60.                         $this->halt('MySQL Query Error', $sql);
  61.                 }


  62.                 $this->querynum++;
  63.                 return $query;
  64.         }

  65.         function affected_rows() {
  66.                 return mysql_affected_rows();
  67.         }

  68.         function error() {
  69.                 return mysql_error();
  70.         }

  71.         function errno() {
  72.                 return intval(mysql_errno());
  73.         }

  74.         function result($query, $row) {
  75.                 $query = @mysql_result($query, $row);
  76.                 return $query;
  77.         }

  78.         function num_rows($query) {
  79.                 $query = mysql_num_rows($query);
  80.                 return $query;
  81.         }

  82.         function num_fields($query) {
  83.                 return mysql_num_fields($query);
  84.         }

  85.         function free_result($query) {
  86.                 return mysql_free_result($query);
  87.         }

  88.         function insert_id() {
  89.                 $id = mysql_insert_id();
  90.                 return $id;
  91.         }

  92.         function fetch_row($query) {
  93.                 $query = mysql_fetch_row($query);
  94.                 return $query;
  95.         }

  96.         function fetch_fields($query) {
  97.                 return mysql_fetch_field($query);
  98.         }

  99.         function version() {
  100.                 return mysql_get_server_info();
  101.         }

  102.         function close() {
  103.                 return mysql_close();
  104.         }

  105.         function halt($message = '', $sql = '') {
  106.                 return "";
  107.         }
  108. }
复制代码


页面写好了  下面介绍 写 模板  我没有采用上传现成的原因 主要是 这个页面出于安全原因 大家会自定义这个提交页名字 我只讲步骤好了

1----------------登陆

登陆页和来源页 都填写这个提交文件 比如 /plugins/SSadd.php

成功标志:欢迎您回来
不需要失败标志  因为不存在登陆检查

2---------------刷新列表设置

刷新页面和来源业  同上
页面区域
  1. <!--fenlei-->
复制代码
  1. <!--/fenlei-->
复制代码


名称和ID规则
  1. ID:[[分类ID]]-[[分类名称]]
复制代码


3------发表参数

发表和来源页  同上
POST数据
  1. message=[标签:内容]&subject=[标签:标题]&catid=[分类ID]&dateline=[标签:时间]&from=[标签:出处]&newsauthor=[标签:作者]
复制代码


失败标志:
信息不全
重复采集

成功标志:
成功



注意时间采集用---系统时间戳  

4----保存为模板

评分

1

查看全部评分

发表于 2007-5-26 22:23:49 | 显示全部楼层
看不明白....呵呵~~~

以前5.0b2 的时候 ss 没有2重验证可以使用火车
5.0正式版到5.5正式版都有了2重验证,其实这里有5.0b2 的登陆模块下载,但是不能用在5.5上。

2重cookie 不能很难搞。

或许改动ss的代码有用。。。
 楼主| 发表于 2007-5-30 11:18:07 | 显示全部楼层
非常感谢play528 !!
按照你的方法,已经实验成功!

我是做美工的,以后如果有需要可以留言!!

太感谢了!!!:handshake
发表于 2007-5-30 23:43:28 | 显示全部楼层
原帖由 leovi 于 2007-5-30 11:18 发表
非常感谢play528 !!
按照你的方法,已经实验成功!

我是做美工的,以后如果有需要可以留言!!

太感谢了!!!:handshake



哥们,做好了分享一下啊

用ss的采集太痛苦了
发表于 2007-11-22 14:06:42 | 显示全部楼层
成功了没有啊?
您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

QQ|手机版|Archiver|火车采集器官方站 ( 皖ICP备06000549 )

GMT+8, 2026-4-3 14:51

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表