文章抓取
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

247 lines
5.0 KiB

<?php
$remoteUrl = 'https://article.kkxxkj.cn/api/getArticle';
$saveSrc = '/www/wwwroot/article.kkxxkj.cn/public/uploads';
try {
while (true) {
saveRemote($remoteUrl, $saveSrc);
sleep(60);
}
}catch(\Exception $e) {
echo $e->getMessage();
}
//保存远程附件
function saveRemote($remoteUrl, $saveSrc){
$fileinfo = getRemote($remoteUrl);
$mimeType = $fileinfo['head']['content_type'];
if($mimeType != 'application/zip')return false;
//下载失败
if(!isset($fileinfo['head']['http_code']) || $fileinfo['head']['http_code'] !== 200){
return false;
}
$fileName = $saveSrc . '/tmp/' . uniqid() . '.zip';
$res = setContent($fileName, $fileinfo['body']); //保存
if(!$res)return false;
//解压
unzip($fileName, $saveSrc . '/ready');
}
//获取远程文件信息
function getRemote($url){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$package = curl_exec($ch);
$httpinfo = curl_getinfo($ch);
curl_close($ch);
return [
'body' => $package,
'head' => $httpinfo
];
}
/**
* 存储文件内容
* @param string $filesrc 文件路径
* @param string $content 内容
*/
function setContent($filesrc, $content){
createDir(dirname($filesrc));
return file_put_contents($filesrc, $content) !== false ? true : false;
}
/**
* 递归创建文件夹
* @param string $path 路径
*/
function createDir($path){
if (!file_exists($path)){
createDir(dirname($path));
mkdir($path, 0777);
}
}
/**
* zip解压
* @param string $zipfile 压缩文件目录
* @param string $unzipdir 解压目录
*/
function unzip($zipfile, $unzipdir){
//判断压缩文件是否存在
if(!file_exists($zipfile)){
return false;
}
//判断解压目录是否存在
if(is_dir($unzipdir)){
deldir($unzipdir);
createDir($unzipdir);
}else{
createDir($unzipdir);
}
$zip = new \ZipArchive;
$res = $zip->open($zipfile);
if($res !== true){
return false;
}
$docnum = $zip->numFiles;
$ret = true;
for($i = 0; $i < $docnum; $i++) {
$statInfo = $zip->statIndex($i);
if($statInfo['crc'] == 0 && $statInfo['comp_size'] == 0) {
//目录
createDir(iconv('UTF-8', 'GB2312', $unzipdir.'/'.$statInfo['name']), 0777, true);
} else {
//文件
//拷贝文件,特别的改动,iconv的位置决定copy能不能work
$fileName = iconv('UTF-8', 'GB2312', $unzipdir.'/'.$statInfo['name']);
$aimDir = dirname($fileName);
createDir($aimDir);
if(copy('zip://'.$zipfile.'#'.$statInfo['name'], $fileName) == false){
$ret = false;
break;
}
}
}
$zip->close();
if(!$ret){
return false;
}
//解决压缩方式问题
$fileArrTemp = scandir($unzipdir);
$fileArr = [];
for($i = 0; $i < count($fileArrTemp); $i++){
if($fileArrTemp[$i] != '.' && $fileArrTemp[$i] != '..'){
$fileArr[] = $fileArrTemp[$i];
}
}
if(count($fileArr) == 1){
moveDir($unzipdir . $fileArr[0], $unzipdir, true);
}
return true;
}
//删除文件夹
function deldir($dir) {
//先删除目录下的文件:
if(!is_dir($dir)){
return true;
}
$dh = opendir($dir);
while($file = readdir($dh)) {
if($file != "." && $file != "..") {
$fullpath = $dir."/".$file;
if(!is_dir($fullpath)) {
unlink($fullpath);
} else {
deldir($fullpath);
}
}
}
closedir($dh);
//删除当前文件夹:
if(rmdir($dir)) {
return true;
} else {
return false;
}
}
/**
* 移动文件夹
*
* @param string $oldDir
* @param string $aimDir
* @param boolean $overWrite 该参数控制是否覆盖原文件
* @return boolean
*/
function moveDir($oldDir, $aimDir, $overWrite = false, $chmod = false) {
$aimDir = str_replace('', '/', $aimDir);
$aimDir = substr($aimDir, -1) == '/' ? $aimDir : $aimDir . '/';
$oldDir = str_replace('', '/', $oldDir);
$oldDir = substr($oldDir, -1) == '/' ? $oldDir : $oldDir . '/';
if (!is_dir($oldDir)) {
return false;
}
if (!file_exists($aimDir)) {
createDir($aimDir);
}
@$dirHandle = opendir($oldDir);
if (!$dirHandle) {
return false;
}
while (false !== ($file = readdir($dirHandle))) {
if ($file == '.' || $file == '..') {
continue;
}
if (!is_dir($oldDir . $file)) {
moveFile($oldDir . $file, $aimDir . $file, $overWrite, $chmod);
} else {
moveDir($oldDir . $file, $aimDir . $file, $overWrite);
}
}
closedir($dirHandle);
return rmdir($oldDir);
}
/**
* 移动文件
*
* @param string $fileUrl
* @param string $aimUrl
* @param boolean $overWrite 该参数控制是否覆盖原文件
* @return boolean
*/
function moveFile($fileUrl, $aimUrl, $overWrite = false, $chmod = false) {
if (!file_exists($fileUrl)) {
return false;
}
if (file_exists($aimUrl) && $overWrite = false) {
return false;
} elseif (file_exists($aimUrl) && $overWrite = true) {
@unlink($aimUrl);
}
$aimDir = dirname($aimUrl);
createDir($aimDir);
rename($fileUrl, $aimUrl);
if($chmod){
@chmod($aimUrl, 0777);
}
return true;
}