火车头通过php插件 处理jsonp 数据

0

最近在做一个把论文写在大地上的内容数据库,主要就是把乡土文化和县级融媒建设过程中的一些亮点,和优秀的县级融媒体的作品找出来,然后学习一些别人的生产建设经验,但是发现我们在掌握的内容基础上还是不好分析县级融媒体中心的工作重点,所以就想着找些地方爬一些数据来了分析一下,在地域特色,地域文化的宣传,本地化的县级融媒体中心建设的内容有哪些新意。

采集数据就是借助火车头,火车头采集数据应对现在的api接口不是很给力了,匹配规则什么的不好做通用的设置了,即便用上火车头的json匹配,采集到的数据因为比较零散在json里面,也没法精确匹配,加上数据来源又是不同的开发团队的作品,难以做到面面俱到。

看了一下火车头采集机支持通过自己写插件的方式对采集到的数据做二次清晰后再保存,特别学习测试了一下火车头插件的php模式清洗数据。

function jsonp_decode($jsonp, $assoc = false) {
    // PHP 5.3 adds depth as third parameter to json_decode 
    if($jsonp[0] !== '[' && $jsonp[0] !== '{') {
        // we have JSONP 
        $jsonp = substr($jsonp, strpos($jsonp, '(')); 
    } 
    return json_decode(trim($jsonp,'();'), $assoc);    
} 

火车头插件代码示例:

<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
/*
*外部编程接口处理标签内容示范文件                                                                                                           
*该文件内自动系统的三个参数$LabelArray ,$LabelUrl
*对任意采集的标签都适用请对标签内容处理后直接将该数组serialize($LabelArray)输出,
*采集器内部即可接收到该标签的内容,对比以前的接口规则,新规则可以实现标签之间的数据调用和处理                                                     
*参数说明:                                                                                                                                          
  *$LabelArray    -  标签名及标签内容集合 结构如:Array('栏目id' => 2,'出处'=>  '新浪微博','内容'=>'<center><b>暴笑短信')  ##           
  *$LabelUrl      -  当前采集的页面的Url地址 
  *$LabelCookie   -  当前采集页面,服务器返回的Cookie信息。
  * 特别注意:如果是处理列表页,默认页,多页时会有以下两个标签
    $LabelArray['Html']       网页的源代码,没有经过采集器处理的,直接下载后的数据.修改这里的数据,请将新值赋予$LabelArray['Html']
    $LabelArray['PageType']   值可能为 List, Content ,Pages, Save 分别代表处理列表页,默认页,多页,保存时                                                                      
*以上语句建议不更改,以下为用户操作区域  该区域只限对数组值进行操作,不得有打印输出产生,不得直接增加或删除相应标签名
*/
function jsonp_decode($jsonp, $assoc = false) {
    // PHP 5.3 adds depth as third parameter to json_decode 
    if($jsonp[0] !== '[' && $jsonp[0] !== '{') {
        // we have JSONP 
        $jsonp = substr($jsonp, strpos($jsonp, '(')); 
    } 
    return json_decode(trim($jsonp,'();'), $assoc);    
} 
if($LabelArray['PageType']=="List")
{
    $LabelArray['Html']='当前页面的网址为:'.$LabelUrl."rn页面类型为:".$LabelArray['PageType']."rn接收到的数据是:".$LabelArray['Html'];
}
else if($LabelArray['PageType']=="Content")
{
    $LabelArray['Html']='当前页面的网址为:'.$LabelUrl."rn页面类型为:".$LabelArray['PageType']."rn接收到的数据是:".$LabelArray['Html'];
}
else if($LabelArray['PageType']=="Save")
{
    //$LabelArray['内容'] = $LabelArray['标题'].$LabelArray['内容'];  //★★★★★★注意这句。V2009SP2版后可实现多标签之间的相互调用★★★★★★
    //$LabelArray['内容'] = str_replace('旧字符串','新字符串',$LabelArray['内容']); //简单替换一下
    //$LabelArray['标题'] =  '【给标题标签加个前缀】'.$LabelArray['标题'];
    $data = jsonp_decode($LabelArray['Html'],true);
    $LabelArray['videos'] = json_encode($data['videos']);
    //$LabelArray['时间'] =date('Y-m-d H:i:s',time()); //不用标签内容,直接获取time()函数得到的当前时间,用Y-m-d H:i:s格式输出,如2008-05-28 00:12:23
}
//#############以上为用户操作区域#############################################################################################################################
//#############以下语句必须保留,建议不更改###################################################################################################################
//ob_clean();
echo serialize($LabelArray);
?>

0

首先搞个php匹配jsonp 数据格式的函数,再写个对应的php的火车头插件,就可以根据自己的需要处理数据了。为了查看方便又特意把数据发布到了wordpress 系统里,但发现一旦采集数据错误了,想要成千上万的删除wordpress 的文章确实太累了。觉得还是通过sql来删除某个分类下的wordpress 文章比较好。

先检查搜索一下分类下的文章数量:

SELECT * FROM `wp_posts`,`wp_term_relationships` WHERE wp_posts.ID = wp_term_relationships.object_id AND wp_term_relationships.term_taxonomy_id = 128;

确认无误后执行删除语句:

DELETE `wp_posts` FROM `wp_posts`, `wp_term_relationships` WHERE wp_posts.ID = wp_term_relationships.object_id AND wp_term_relationships.term_taxonomy_id = 128