先使用有道云笔记导出全部内容
耐心等待导出完成
导出的效果(这是其中某个目录)
可以看到普通的文章格式导出为pdf,md格式导出还是的md格式
先安装PDFParser,(如果没有安装composer,需要先安装它)进入showdoc根目录下,执行
composer require smalot/pdfparser
然后在showdoc根目录增加 import_from_pdf_and_md.php 文件,内容为:
<?php
//去掉超时限制,防止超时报错
set_time_limit(0);
require 'vendor/autoload.php';
//============配置参数 开始==================
//有道云导出的目录,也就是需要导入的文件根目录
$import_dir = 'C:\Users\Administrator\Desktop\youdao\2020-04-24-10-49';
$show_url = 'http://这里填写你的showdoc网址/';
$api_key = '这里填写你的项目api_key';
$api_token = '这里填写你的项目api_token';
//============配置参数 结束==================
// 浏览器友好的变量输出
function dump($var)
{
ob_start();
var_dump($var);
$output = ob_get_clean();
if (!extension_loaded('xdebug')) {
$output = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $output);
$output = '<pre style="text-align:left">' . htmlspecialchars($output, ENT_QUOTES) . '</pre>';
}
echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
echo($output);
}
// 遍历所有的模型文件
function file_scan($path, &$fileArr)
{
$dirfat = dir($path);
while (false !== $entry = $dirfat->read()) {
if ($entry == '.' || $entry == '..' || $entry == '.svn') {
continue;
}
if (is_file($path . DIRECTORY_SEPARATOR . $entry)) {
$fileArr[] = $path . DIRECTORY_SEPARATOR . $entry;
} else {
file_scan($path . DIRECTORY_SEPARATOR . $entry, $fileArr);
}
}
$dirfat->close();
return $fileArr;
}
function curlPost($url, $data)
{
$ch = curl_init();
$params[CURLOPT_URL] = $url; //请求url地址
$params[CURLOPT_HEADER] = FALSE; //是否返回响应头信息
$params[CURLOPT_SSL_VERIFYPEER] = false;
$params[CURLOPT_SSL_VERIFYHOST] = false;
$params[CURLOPT_RETURNTRANSFER] = true; //是否将结果返回
$params[CURLOPT_POST] = true;
$params[CURLOPT_POSTFIELDS] = $data;
curl_setopt_array($ch, $params); //传入curl参数
$content = curl_exec($ch); //执行
curl_close($ch); //关闭连接
return $content;
}
//判断是否遍历过所有需要导入的文件,没有的话先遍历,方便后面一个一个文件导入,如果多个文件一起导入会导致PHP执行超时或超内存
$cache_path = dirname(__FILE__) . '/import_files.php';
if (!file_exists($cache_path)) {
$fileArr = [];
file_scan($import_dir, $fileArr);
file_put_contents($cache_path, json_encode($fileArr));
} else {
$fileArr = json_decode(file_get_contents($cache_path));
}
$number = intval($_GET['number']);
$url = $show_url.'import_from_pdf_and_md.php?number='.($number+1);
if (!isset($fileArr[$number])) {
//导入结束
dump('import finish!');
exit();
}
//获取具体某个文章的目录地址
$file_path = $fileArr[$number];
dump($file_path);
//这个$fileArr变量内容太大,先释放掉
unset($fileArr);
//从目录地址中获取分类和标题
$pathinfo = explode('\\', str_replace($import_dir . '\\', '', $file_path));
dump($pathinfo);
$file_title = array_pop($pathinfo);
$titleArr = explode('.', $file_title);
$ext = array_pop($titleArr);
$title = implode('.', $titleArr);
if ($ext == 'md') {
$content = file_get_contents($file_path);
} elseif ($ext == 'pdf') {
$parser = new \Smalot\PdfParser\Parser();
$pdf = $parser->parseFile($file_path);
$content = $pdf->getText();
}else{
echo "<script>window.location.href='$url'; </script>";
exit;
}
//通过showdoc API 上传数据
$api_url = $show_url.'server/index.php?s=/api/item/updateByApi';
$param['api_key'] = $api_key;
$param['api_token'] = $api_token;
$param['cat_name'] = implode('/', $pathinfo);
$param['page_title'] = $title;
$param['page_content'] = $content;
//dump($param);
$res = curlPost($api_url, $param);
dump($res);
echo "<script>window.location.href='$url'; </script>";
?>
注意“配置参数”部分要换成自己的实现参数,接下来需要安装下里面需要的PdfParser组件
在浏览器里访问 http://这里填写你的showdoc网址/import_from_pdf_and_md.php
就可以自动完成导入。
注意:由于系统不是批量导入的,是一个文档一个文档地导入,每导入一个文档浏览器就自动刷新一次,因此在导入过程中不要关闭浏览器,同时由于没有做去重,因此只能执行一次,如果执行多次会导致文档重复。
后记:导入完成后对于md格式问题不大,但对于pdf格式,受限于PdfParser获取到的内容有可能出现异常或者格式不对。只能凑合着用。如正常情况是这样的
参考资料
https://blog.csdn.net/weixin_42139662/article/details/88037763
下载最新版的curl
https://curl.haxx.se/windows/
但导入后会莫名多一些空格,然后变成这样的
参 考资料
h ttp s:/ /b lo g .c sd n.n et/ w eix in _4 2139662/a rtic le /d eta ils /8 8037763
下 载最新版的curl
h ttp s:/ /c u rl.h axx.s e /w in d ow s/
如果你想导入带格式的,也可以参考我们下一个文档:有道云笔记批量导入到showdoc(二)
本文由小韦云原创,转载请注明出处:https://www.bctos.cn/doc/9/24,否则追究其法律责任
关键词:有道云笔记导出 导入showdoc PHP读取pdf PDFParser