程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PinPHP後台批量采集的功能二次開發修改實現

PinPHP後台批量采集的功能二次開發修改實現

編輯:關於PHP編程

使用PinPHP有一段時間了,利用PinPHP在Sae上搭了個環境,運營一個月左右的《時尚美匯》,所以最近也一直在研究這套程序,順便做些二次開發,加入些自己的想法。例如之前寫過的博文:加入人人網帳號登錄(淘寶登錄其實也做了,只是在淘寶應用中心上用)、修改PinPHP采集。

好吧,今天來說說關於PinPHP後台批量采集的功能二次開發修改實現,本人一開始接解pinphp,使用的是2.1測試版,

到現在官方已經發布了2.2版,但遺憾的是,大家一值期待的批量采集功能並沒有如願發布,所以本人自己嘗試去修改修改,

其實程序早在半個月前就寫好了,只是自己在用,一方面工作有點忙,另一方面自己測試一段時間,順便完善一下。

實現原現很簡單,主要是修改采集界面,加了幾個checkbox,用於傳遞要采集的id、關鍵字等。

1、修改:admin\Tpl\default\items_collect\collect.html頁面,28行左右。

Copy to ClipboardLiehuo.Net Codes引用的內容:[www.bkjia.com] <input type="checkbox" id="subcb_{$sval.id}" class="cb_{$val.id} subcb" name="cate[]" value="{$sval.id}"/>
<input type="hidden" id="subname_{$sval.id}" class="cbname_{$val.id} subcb" name="subname[]" value="{$sval.name}"/>

官方應該是有嘗試去做批量采集,因為此頁面上有關於批量采集的代碼未完成,只是注釋了。

2、然後在\admin\Lib\Action\items_collectAction.class.php上增加了一個函數,以及略修改原采集函數

Copy to ClipboardLiehuo.Net Codes引用的內容:[www.bkjia.com] function ajaxCollect(){
set_time_limit(0);
$subname=$_REQUEST['subname'];
$arrUrls=array();
foreach($_REQUEST['cate'] as $k=>$v){
if(!empty($subname[$k])){
$arrUrls[]='http://mmlike.sinaapp.com/mlike_admin.php?a=taobao_collect_jump&m=items_collect&pages=1&cate_id='.$v.'&keywords='.$subname[$k];
}
}
$this->assign('url',json_encode($arrUrls));
$this->display('ajaxCollect');
}

這一句有一些信息要注意一下

Copy to ClipboardLiehuo.Net Codes引用的內容:[www.bkjia.com] $arrUrls[]='http://mmlike.sinaapp.com/mlike_admin.php?a=taobao_collect_jump&m=items_collect&pages=1&cate_id='.$v.'&keywords='.$subname[$k];

page=1是采集一頁,每頁40個商品,如果需要一次采集更多商品,可自行修改,但不建議填太大的值,一方面采集時間長,另一方面,淘寶api請求可能會太頻繁。

修改public function collect()函數,前半部分的if改成

Copy to ClipboardLiehuo.Net Codes引用的內容:[www.bkjia.com] if(isset($_REQUEST['dosubmit'])){
/******批量采集*******/
$cate=implode(',',$_REQUEST['cate']);
$this->ajaxCollect();
//header("location:".U('items_collect/taobao_batch_collect_jump?act=batch&cate='.$cate));
exit;
/******批量采集*******/
}

3、在模板裡增加一個,\admin\Tpl\default\items_collect\ajaxCollect.html

Copy to ClipboardLiehuo.Net Codes引用的內容:[www.bkjia.com] <!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" content="text/html; charset=utf-8" />
<title>ajax</title>
<script language="javascript" type="text/javascript" src="__ROOT__/statics/js/jquery/jquery-1.4.2.min.js"></script>
<script type="text/javascript">
var url={$url};
var i=0,j=0;
var len=url.length;
if(len>0){
bc=setInterval("getCollect()",1000);
}

function getCollect(){
var process=0;
if(i>len-1){
clearInterval(bc);
$('#state').html('<span style="color:#C00000">全部完成</span>,共'+i+'個,其中'+j+'個失敗<br />');
return false;
}
if(!!url[i])
{
$.ajax({
url:url[i],
dataType:'html',
cache:false,
async:true,
beforeSend: function(){
var str='<img src="__ROOT__/statics/admin/images/ajax_loading.gif" />';
$('#state').html(str+'采集中...');
},
success: function(data){
if(!!data){
process=Math.min(Math.round(i/(len-1)*100),100);
$('#process').text(process+'%');
}
},
error:function(){
j++;
process=Math.min(Math.round(i/(len-1)*100),100);
$('#process').text(process+'%');
}
});
}
i++;
}
</script>
</head>
<!--- Downloads By http://www.bkjia.com ---->
<body>
<div id="result">
<span id="state"></span>
<span id="process"></span>
</div>
</body>
</html>

      了解php和js的朋友應該看懂,將組裝好的采集url,以json形式放在js裡,利用setInterval定時器去定時執行ajax請求,遍歷所有的url

直到完成。一開始用setInterval而不是直接for遍歷是擔心分類多時,太頻繁請求淘寶api會導致部份采集不成功。

       上面的ajax使用異步請求,之前嘗試使用同步去獲取,是為了方便捕獲到那個采集成功,哪個不成功,以便手動去采集,

測試了一段時間,雖然效果是達到了,但由於分類太多一次采集的時候,浏覽器會卡,而已采集總時間也變長漫長。現還是使用

異步,不卡,縮短采集時間,雖然也可以實現失敗捕足,但要修改更多的代碼,這個有時間有研究。現在的效果如下



用%比顯示進度,最後會顯示完成度和有多少個失敗,至於失敗的再采集一次,又或者自己去檢查哪個未采集手動采集。

這個修改後,原采集功能也可正常使用。

重申一下,本人使用的是pinphp2.1測試版,其他版本若要修改,可作為參考,以下是修改文件的打包,不建議直接覆蓋,最好

對比一下代碼,如要覆蓋,請先備份原文件,以便恢復。

點擊下載:pinphp批量采集

教程來源:http://meego123.net/?post=140

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved