正所谓新年新气象,为了换个心情,同时也为了优化慢的不行的博客,香菇使用了新的博客程序(大雾) Typecho 整合 i / old / note 三站同时作为新年发文载体。可是文章迁移什么的成了头疼的问题,gmlog2 和 note 里边共计 16 篇文章手冻迁移并不是什么大问题,然而采用 Hexo 部署的老站中的 69 篇文章貌似是个稍大的工程,秉承菇星人热爱折腾的优良传统,香菇尝试写了个小工具用作 Hexo 到 Typecho 的文章迁移。
使用全宇宙最好的编程语言 PHP 编写,代码如下:
<?php
$mysql_server_name='localhost';
$mysql_username='root';
$mysql_password='123456';
$mysql_database='typecho';
$dir = './_posts';
if(file_exists($dir)){
$files = scandir($dir);
$conn = mysql_connect($mysql_server_name,$mysql_username,$mysql_password) or die("error connecting"); //连接
mysql_query("set names 'utf8'"); //编码
mysql_select_db($mysql_database, $conn); //打开数据库
$cid = 0;
print "<pre>";
foreach($files as $file){
if($file != "." && $file != ".."){
$post = file_get_contents($dir."/".$file);
$infos = explode("---", $post);
//print $infos[0];
$heads = explode("\n", $infos[0]);
$TITLE = str_replace("\r", "", substr($heads[0], 7));
$TIME = strtotime(substr($heads[1], 6));
$SLUG = str_ireplace(".md", "", substr($file, 11));
$lines = explode("\n", $post);
$text = "<!--markdown-->";
for($i = 0; $i < count($lines); $i++){
if($i > 3) {
$text .= $lines[$i]."\n";
}
}
$TEXT = $text;
$sql = "INSERT INTO `typecho_contents` (`title`,`slug`,`created`,`modified`,`text`,`order`,`authorId`,`template`,`type`,`status`,`password`,`commentsNum`,`allowComment`,`allowPing`,`allowFeed`,`parent`) VALUES ('$TITLE','$SLUG',$TIME,$TIME,'$TEXT',0,1,NULL,'post','publish',NULL,0,'1','1','1',0)";
mysql_query($sql);
$isIst = mysql_num_rows(mysql_query("SELECT * FROM `typecho_contents` WHERE `slug`='$SLUG'"));
//print $isIst;
if(!$isIst){
$sql = "INSERT INTO `typecho_contents` (`title`,`slug`,`created`,`modified`,`text`,`order`,`authorId`,`template`,`type`,`status`,`password`,`commentsNum`,`allowComment`,`allowPing`,`allowFeed`,`parent`) VALUES ('$SLUG','$SLUG',$TIME,$TIME,'待编辑!',0,1,NULL,'post','publish',NULL,0,'1','1','1',0)";
mysql_query($sql);
}
$cid += 1;
$sql = "INSERT INTO `typecho_relationships` (`cid`,`mid`) VALUES ($cid,1)";
mysql_query($sql);
print "Down!($cid)\n";
}
}
print "</pre>";
mysql_close($conn); //关闭
}
使用方法:
- 全新安装 Typecho 程序,选用 Mysql 数据库;
- 清空库中 contents 和 relationships 两表的内容;
- 将 Hexo 的文章(markdown文件)目录放到和此代码文件相同目录下;
- 修改好代码中数据库用户名、密码、库名、文章路径、表前缀等信息;
- 用浏览器访问(执行)此代码即可。
注:因为 SQL 拼接的关系,部分数据可能会导入失败,此时该代码会实时将导入失败的文章检测出来并作标记,方便手动调整。
另:代码未考虑性能,大概一个亿的数据是转换不得的。
版权声明:原创内容未经允许请勿转载。
版权属于:香菇
本文链接:https://blog.siitake.cn/hexo2typecho.html
本站未注明转载的文章均为原创,并采用
CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!
PHP 要多少呢?在本地php5.6提示代码line 25出错,线上php7.2无法打开自建的php,错误error 500
Emmm记得好像是7.0,报错的话有可能是.md文件模板与代码里匹配的不一致。
PHP 7.2 不想说话……
加密发布了,您可以在这里预览:https://blog.zhangsy.me/2018/08/22/%E4%B8%80%E4%B8%AA%E8%84%9A%E6%9C%AC-%E5%B0%86%E5%8D%9A%E6%96%87%E4%BB%8E-Marddwon-%E5%AF%BC%E5%85%A5%E5%88%B0-Typecho.html ,密码是"bysiitake.cn"
可以公开发布啦~
好哒,我用GPL发布吧,这样名字就可以名留清史了呢(逃
赛高!(^o^)/~
我用PDO重写了,请问可以发布吗?我计划用MIT协议,您看呢?
--2018-08-22
哈哈哈 协议什么的没关系的 我也不太懂 能留名字已经很激动了~
看到从Hexo迁徙到Typecho,有点……,我最近刚好相反,Hexo或Typecho,哪个更好一点,香菇社长能给个答案吗
这个就根据不同需求来讲咯:
使用Hexo的话,如果只专心写作,配上一套心怡的主题,本地化的写作方式,纯静态的页面……带来的是超低的资源占用,能有效降低主机被攻击而崩溃的几率,还有助于搜索引擎的收录。相应带来的问题便是部署及更新上的小小不便(当然这种不便能通过使用“便携版Hexo”等工具最大化减少)和页面个性化修改的不灵活;
使用Typecho的话,总体来讲跟使用wp,em等博客程序相似,php的后端和mysql/sqlite的数据持久化存储使得博客极易部署,轻量化的设计理念也让它保持在相对较低的资源占用状态。后台在线的写作方式带来的是随时随地写作更新的良好体验,日渐丰富的第三方皮肤和插件也能让博客时刻焕发生机,再懂一些前端和php知识的话就可以更方便的个性化博客界面和功能,适合喜欢折腾的博主。而因此带来了一些缺点:后端脚本的存在增加了被攻击而宕机的风险(但好的博客环境及可信任的主机商可以有效避免这些问题),同时与更成熟的wp相比主题和插件的数量就显得逊色了。
以上观点,香菇拙见。(●ˇ∀ˇ●)
香菇社长写的太好了,分析的也很透彻,也能明白你为什么会从Hexo迁徙到Typecho,谢谢这么精彩的回复(●ˇ∀ˇ●)
觉得hexo g慢的可以试一下hugo,比hexo生成速度快
阿嘞~还咩有用过GO的程序耶~可以在本地玩玩。嗯!
一个亿,太夸张了吧?
嗯~说起来是有些夸张[托腮]