2018年1月3日更新:由于百度翻译的规则改变,新增了随机的sign和token两个参数进行验证,这个插件已经失效,无法使用。
最近在逛火车头官方论坛的时候,发现有人分享了个php的火车头采集器百度翻译插件,看代码这个插件是通过直接请求百度翻译,然后获取百度翻译的结果来实现的。这样的好处是不需要申请百度翻译API,因此也没有翻译的次数限制(百度翻译API是有免费字符限制的,超过免费字符需要收费)。
而且这个php翻译插件使用灵活,只要结合火车头采集软件的采集规则简单的在代码里修改一下需要翻译的参数即可,剩下的就是直接启动火车头网站采集软件就可以了。
插件代码
<?php
/**
* 插件代码由四座网搜集整理
* 网站名称:四座网
* 网址:http://www.sizuo.org
* 转载请保留本信息
*/
error_reporting(E_ERROR | E_WARNING | E_PARSE);
class Translate {
/**
* 支持的语种
* @var ArrayAccess
*/
static $Lang = Array (
'auto' => '自动检测',
'ara' => '阿拉伯语',
'de' => '德语',
'ru' => '俄语',
'fra' => '法语',
'kor' => '韩语',
'nl' => '荷兰语',
'pt' => '葡萄牙语',
'jp' => '日语',
'th' => '泰语',
'wyw' => '文言文',
'spa' => '西班牙语',
'el' => '希腊语',
'it' => '意大利语',
'en' => '英语',
'yue' => '粤语',
'zh' => '中文'
);
/**
* 获取支持的语种
* @return array 返回支持的语种
*/
static function getLang() {
return self::$Lang;
}
/**
* 执行文本翻译
* @param string $text 要翻译的文本
* @param string $from 原语言语种 默认:英文
* @param string $to 目标语种 默认:中文
* @return boolean string 翻译失败:false 翻译成功:翻译结果
*/
static function exec($text, $from = 'zh', $to = 'en') { //这里修改需要翻译的语种和翻译后的语种,“$from”后面代表的是原语种,“$to”后面代表的是翻译后的语种。
$url = "http://fanyi.baidu.com/v2transapi";
$data = array (
'from' => $from,
'to' => $to,
'query' => $text
);
$data = http_build_query ( $data );
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_REFERER, "http://fanyi.baidu.com" );
curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:37.0) Gecko/20100101 Firefox/37.0' );
curl_setopt ( $ch, CURLOPT_HEADER, 0 );
curl_setopt ( $ch, CURLOPT_POST, 1 );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt ( $ch, CURLOPT_TIMEOUT, 10 );
$result = curl_exec ( $ch );
curl_close ( $ch );
$result = json_decode ( $result, true );
if (!isset($result ['trans_result'] ['data'] ['0'] ['dst'])){
return false;
}
return $result ['trans_result'] ['data'] ['0'] ['dst'];
}
}
if($LabelArray['PageType']=="Save")
{
/**
* 下面的内容需要按需要进行修改,一行为一个需要翻译的标签。
* 后面的为采集到的原始标签,前面的为翻译后的标签。
* 这里的标签名必须和采集规则里的标签名一致,否则无法翻译。
*/
$LabelArray['翻译的标题'] = Translate::exec($LabelArray['标题']);
$LabelArray['翻译的关键词'] = Translate::exec($LabelArray['关键词']);
$LabelArray['翻译的内容'] = Translate::exec($LabelArray['内容']);
}
echo serialize($LabelArray);
?>
以上代码保存为PHP文件后放到火车头数据采集器的插件目录即可,文末有插件下载地址,也可以直接下载使用。
使用方法
使用方法很简单,首先将插件的PHP文件放到火车头数据采集软件安装目录的Plugins文件夹下,然后根据采集规则和需要翻译的标签修改PHP代码即可。
修改的方法如下:
1、在代码的第50行修改需要翻译的语种,按注释的说明进行修改即可,默认是将中文翻译成英文,其他语种的代码标识查看第18行到34行的代码说明。
2、在第86行到88行修改需要翻译的标签,默认的是将“标题”、“关键词”、“内容”三个采集标签进行翻译,一行代表一个翻译的标签,如果需要增加或删除翻译的标签,按注释的说明进行增减即可。
3、翻译后的标签名只要创建一个相应的标签名,规则留空即可。例如上图中,“标题”这个标签是采集的内容,“翻译的标题”则为翻译后的内容,则只需要在采集规则里创建一个标签名为“翻译的标题”的标签,这个标签不需要填写任何的规则。
注意事项
由于火车头采集工具自身的PHP环境有问题,直接运行插件的话可以或报错或无法翻译,因此我们需要对火车头网站采集软件的PHP修改一下。
修改火车头网站数据抓取软件的PHP环境也很简单,打开火车头网站采集软件的安装目录“System/PHP”,找到php.ini文件打开,并找到如下代码。
;extension=php_curl.dll
将最前面的分号“;”删除,再保存即可。
这样火车头数据采集器就可以正常运行这个PHP翻译插件了。