showdoc深度二次开发

有道云笔记批量导入到showdoc(二)

小韦云科技-区块链+小程序+公众号+商城+分销+直播+企业官网+外贸电商-为您提供优质的开发服务-电话/微信联系:18123611282

导出有道云笔记

导出部分同上一个文档:有道云笔记批量导入到showdoc(一) 在此不再重复。

使用pdf2htmlEX把PDF转成HTML

先下载 pdf2htmlEX.exe,下载地址

http://soft.rubypdf.com/software/pdf2htmlex-windows-version

下载后记录下它的目录位置,如我的放在E:/pdf2htmlEX/pdf2htmlEX.exe

然后在showdoc根目录增加 import_from_pdf_and_md2.php 文件,内容为:

<?php
//去掉超时限制,防止超时报错
set_time_limit(0);

//============配置参数 开始==================
//有道云导出的目录,也就是需要导入的文件根目录
$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_md2.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') {
    $exe = "E:/pdf2htmlEX/pdf2htmlEX.exe";
    $dest_dir = realpath(dirname(__FILE__) . '/dest_dir/');

    $line = $exe . ' --zoom 1.8 --dest-dir ' . $dest_dir . ' ' . $file_path;
    dump($line);

    shell_exec($line);
    //由于导出的文件名可能被截取,只能通过遍历的方式取到导出的文件名
    $html = [];
    file_scan($dest_dir, $html);
    $content = file_get_contents($html[0]);
    unlink($html[0]);
}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>";
?>

注意“配置参数”部分要换成自己的实现参数,然后要showdoc根目录增加一个名为dest_dir的目录,用来保存导入的HTML文件

执行导入

在浏览器里访问 http://这里填写你的showdoc网址/import_from_pdf_and_md2.php 就可以自动完成导入。

注意:同样每导入一次文档浏览器就会自动刷新一次,在导入过程中千万不要关闭浏览器,由于没有做去重,也不能多次执行,否则导致文档重复。

后记:对于pdf格式,由于导出的是HTML格式,直接在浏览器上显示是完美般的正常的,但如果需要在showdoc的markdown编辑器中编辑,就是出现很多HTML标签,因此这种方式导入的不建议再编辑。

本文由小韦云原创,转载请注明出处:https://www.bctos.cn/doc/9/1816,否则追究其法律责任

关键词:有道云笔记导出 导入showdoc pdf2htmlEX

广告位招商