火车头采集器v7版本插件是使用c#插件开发,开发时需要引用采集器System目录下的AppInerFace.dll类库。火车头采集器或是其它的采集器可以调用火车头数据采集平台的模块进行发布或完成其它任务。
开发插件时需要注意以下几个方法
A.程序集的目标Framework 为 .Net Framework 2.0
B.程序集的目标平台为x86
C.插件开发完成后,除插件文本本身外,其它引用的dll文件需要放在采集器的System目录下。
以下为各个模块插件的开发介绍
1.数据库入库模块
入库模块可以将火车头采集器传递过来的数据进行处理,并返回处理结果给采集器。插件需要实现接口 IDatabase。
以下是接口的原始代码及注释。如导入成功,需要返回bool值,采集器会根据返回值将发布的数据标记为已发或失败。需要注意的一点是,Import方法中只有字符串键值对,不包含已下载的文件信息。
using System;
using System.Collections.Generic;
using System.Text;
namespace LeWell.Api
{
/// <summary>
/// 数据库类型
/// </summary>
public enum DatabaseType {
/// <summary>
/// access数据库
/// </summary>
Access,
/// <summary>
/// mysql数据库
/// </summary>
MySql,
/// <summary>
/// sqlserver数据库
/// </summary>
SqlServer,
/// <summary>
/// sqlite数据库
/// </summary>
Sqlite,
/// <summary>
/// mogodb数据库
/// </summary>
MongoDb,
/// <summary>
/// oracle数据库
/// </summary>
Oracle }
/// <summary>
/// 数据库入库接口,因为入库这块比较简单,所以接口是接管了所有的数据处理
/// </summary>
public interface IDatabase : ICloneable, IDisposable
{
/// <summary>
/// 数据库类型
/// </summary>
DatabaseType DatabaseType { get; set; }
/// <summary>
/// 数据库链接字符串
/// </summary>
string ConnectStr { get; set; }
/// <summary>
/// 数据库表前缀
/// </summary>
string DatabasePrefix { get; set; }
/// <summary>
/// 入库模块中的字符串
/// </summary>
string ModuleData { get; set; }
/// <summary>
/// 导入数据
/// </summary>
/// <param name=”data”>键值对的数据</param>
/// <param name=”error”>错误信息</param>
/// <returns>是否入库成功</returns>
bool Import(Dictionary<string, string> data,ref string error);
}
}
2.web发布模块
Web发布模块插件相比较入库插件,可以实现对当前记录所有文件的操作处理。该插件需要实现接口IWebPost。该接口中可操作的方法较多,一般都有开关控制操作是否起作用。如UseLogin ,UseGetList 。
using System;
using System.Collections.Generic;
using System.Text;
namespace LeWell.Api
{
/// <summary>
/// web在线发布接口
/// </summary>
public interface IWebPost:ICloneable,IDisposable
{
/// <summary>
/// bool方法出错后的提示信息
/// </summary>
string Error { get; }
/// <summary>
/// 是否启用登陆网站
/// </summary>
bool UseLogin { get; }
/// <summary>
/// 登陆网站
/// </summary>
/// <param name=”loginUrl”>登陆地址</param>
/// <param name=”loginRefer”>来源页面</param>
/// <param name=”user_agent”>user-agent</param>
/// <param name=”loginImgUrl”>验证码地址</param>
/// <param name=”dicPost”>登陆post数据</param>
/// <param name=”failInfos”>失败信息,可能为null</param>
/// <param name=”sucessInfos”>成功信息,可能为null</param>
/// <param name=”errorHtml”>登陆失败后的html信息</param>
/// <param name=”cookies”>登陆成功后返回的cookie</param>
/// <returns>是否成功登陆</returns>
bool Login(string loginUrl, string loginRefer,string user_agent, string loginImgUrl, Dictionary<string, string> dicPost, string[] failInfos, string[] sucessInfos, ref string errorHtml,System.Net.CookieCollection cookies);
/// <summary>
/// 是否启用获取列表
/// </summary>
bool UseGetList { get; }
/// <summary>
/// 刷新列表
/// </summary>
/// <param name=”refreshUrl”>刷新列表页面</param>
/// <param name=”refreshRefer”>来源页面</param>
/// <param name=”user_agent”>user-agent</param>
/// <param name=”cookies”>访问需要的cookie</param>
/// <param name=”refreshStart”>页面开始区域</param>
/// <param name=”refreshEnd”>页面区域结束</param>
/// <param name=”refreshRegex”>分类列表名称及id格式</param>
/// <param name=”html”>返回的html代码</param>
/// <returns>字典,为分类id,分类名称</returns>
Dictionary<string, string> GetList(string refreshUrl, string refreshRefer, string user_agent, System.Net.CookieCollection cookies, string refreshStart, string refreshEnd, string refreshRegex, ref string html);
/// <summary>
/// 是否启用获取随机值,这个对所有的都有用
/// </summary>
bool UseGetFormHash { get; }
/// <summary>
/// 获取随机值
/// </summary>
/// <param name=”hashUrl”>随机值获取页面</param>
/// <param name=”hashRefer”>来源</param>
/// <param name=”user_agent”>user-agent</param>
/// <param name=”cookies”>网站cookie</param>
/// <param name=”hashStart”>随机值前字符串</param>
/// <param name=”hashEnd”>随机值后字符串</param>
/// <param name=”result”></param>
/// <returns>成功否</returns>
bool GetFormHash(string hashUrl, string hashRefer, string user_agent, System.Net.CookieCollection cookies, string hashStart, string hashEnd,ref string result);
/// <summary>
/// 是否启用发布数据
/// </summary>
bool UsePost { get; }
/// <summary>
/// 发布文章
/// </summary>
/// <param name=”PostUrl”>发表地址</param>
/// <param name=”PostRefer”>来源页</param>
/// <param name=”user_agent”>user-agent</param>
/// <param name=”cookies”>cookie</param>
/// <param name=”dic”>发布的字典值</param>
/// <param name=”uploadFiles”>上传文件信息,标签名,对应的多个文件</param>
/// <param name=”failInfos”>失败标识码</param>
/// <param name=”sucessInfos”>成功标识码</param>
/// <param name=”error”>出错信息,因为可能是几个线程同时发的,所以不用单个实例的出错信息</param>
/// <param name=”sucess”>成功标识码</param>
/// <param name=”html”>返回的html代码</param>
/// <returns>是否发布成功</returns>
bool Post(string PostUrl, string PostRefer, string user_agent, System.Net.CookieCollection cookies, List<KeyValuePair<string, string>> dic, Dictionary<string, List<string>> uploadFiles, string[] failInfos, string[] sucessInfos, ref string error,ref string sucess,ref string html);
}
}