• 博客搬家了~



    原来写在<a href="http://www.cnblogs.com/firstForEver/">博客园的博客</a>,搬家了~  新博客地址:http://www.hansongda.club/

    前几天花了三头二百买了一年的服务器资源,正好前段时间研究研究Laravel框架,就搭建了一个博客系统。<br>


    服务|版本
    ---|---
    Linux|CentOS 7.1
    nginx|1.8
    mysql|5.6
    php|7.1
    redis|4.0
    Laravel|5.4


    迁移过程:<br/>

    一开始很头疼原来的博客文章,怎么导过来...
    想主意怎么爬取下来,后来意外惊喜的发现博客园右上角有个备份按钮,马上点击一下试试。荡下来是个XML文件,CDATA部分都是以html存在的文章内容。
    <br>
    妥了!解析XML就okay了..
    <br>展现PHP最好的语言了,直接处理xml的函数

    ```
    simplexml_load_file()

    ```

    尴尬的发现这个函数,默认不能解析出来CDATA部分数据...没查手册,马上想到是用正则解析出来这部分数据:

    备份下的xml文章内容的格式如下:

    ```

    <description><![CDATA[<p> Laravel框架中间件使用</p> ]]></description>

    <description><![CDATA[<p> 浮点数乘积以后取整,得到的数不符预期</p>]]></description>

    ```

    如果用正则匹配CDATA区的数据,需要用到<b>零宽向前/后匹配</b>和<b>非贪婪</b>两个知识点。

    ```

    # 左匹配 <description><![CDATA[
    # 右匹配 ]]></description>
    # 文章内容利用 [sS]*?,问号? 非贪婪模式匹配

    preg_match_all('/(?<=<description><![CDATA[)([sS]*?)(?=]]></description>)/', $xml, $match);

    ```

    正则写完了以后,发现这样子导入还是不如xml一下解析出来来的快..<br/>
    网上查了下simplexml的函数,其实第三个可选参数是可以指定解析CDATA部分的...^_^ 完美

    <br>导入的php主要代码如下:

    ```

    // 博客园备份下来的xml
    $filename = 'blogbackup.xml';

    // 指定第三个可选参数,解析CDATA
    $xml = simplexml_load_file($filename, null, LIBXML_NOCDATA);

    // $xml对象,解析成数组格式 巧妙 encode->decode
    $xml = json_decode(json_encode($xml), true);

    // 倒转一下:按照原博客的发表顺序,导入到新博客
    $content = array_reverse($xml['channel']['item']);

    // 导入
    foreach($content as $con){
    // 博客发表时间保持不变
    // (date('Y-m-d H:i:s', strtotime($con['pubDate'])+8*3600));

    // 入库操作...
    }

    ```

    <br>
    导入OK以后,一切看起来都是完美的...直到发现有篇带图片的文章,展示不出来...尴尬
    原来图片地址还是博客园存储的地址,人家为了<b>防盗链</b>,当然展示不出来了,http code都是403了。

    <br>
    问题都来了,怎么解决咧?<br/>

    把这些图片下载到自己的服务器上,图片名称保持不变,然后文章内容里的 img.src 更换下path地址。<br>
    <b>正则</b>又来了,开始匹配这些图片标签:
    发现这些图片的共性是,比如:<br>

    ```
    <img src="http://images2015.cnblogs.com/blog/680022/201707/680022-20170714152746556-1823048196.jpg" />

    <img src="http://images2017.cnblogs.com/blog/680022/201708/680022-20170802174118708-212238500.png" alt="" width="624" height="157" />

    ```

    匹配表达式:

    ```
    /http://images201[0-9].cnblogs.com/blog/[^>]+/([^/]+).(jpg|png)/
    ```

    下载这些图片:进到自己服务器的图片目录

    ```
    $filename = 'blogbackup.xml';

    $content = file_get_contents($filename);

    preg_match_all('/http://images201[0-9].cnblogs.com/blog/[^>]+/([^/]+).(jpg|png)/', $content, $match);

    foreach($match[0] as $img){
    shell_exec('curl -O '.$img);
    }

    ```

    替换这些图片 img.src的path路径:我这里用了(../images/1/xx)目录

    ```
    # $1匹配出图片名称,保持不变;$2是后缀
    $re = preg_replace('/http://images201[0-9].cnblogs.com/blog/[^>]+/([^/]+).(jpg|png)/', '../images/1/$1.$2', $content);

    file_put_contents('blogbackup_new.xml', $re);

    ```

    再利用最新的备份blogbackup_new.xml,导入到自己的博客系统~

    <br>

    Okay, 终于安静了~

  • 相关阅读:
    三维重建5:场景中语义分析/语义SLAM/DCNN-大尺度SLAM
    三维重建面试4:Jacobian矩阵和Hessian矩阵
    三维重建面试3:旋转矩阵-病态矩阵、欧拉角-万向锁、四元数
    人工机器:NDC-谷歌机器翻译破世界纪录,仅用Attention模型,无需CNN和RNN
    Cell期刊论文:为什么计算机人脸识别注定超越人类?(祖母论与还原论之争)
    三维重建面试2: 地图构建-三角测量
    三维重建面试1-位姿追踪:单应矩阵、本质矩阵和基本矩阵
    Caffe2:ubuntuKylin17.04使用Caffe2.LSTM
    三维重建面试0:*SLAM滤波方法的串联综述
    cannot find Toolkit in /usr/local/cuda-8.0
  • 原文地址:https://www.cnblogs.com/firstForEver/p/8179147.html
Copyright © 2020-2023  润新知