• vim+\LaTeX+TtH+Python+MetaWeblog API写博攻略


    vim+\LaTeX+TtH+Python+MetaWeblog API写博攻略

    vim+LATEX+TtH+Python+MetaWeblog API写博攻略

    mdyang

     

    Chapter 1
    准备工作

    首先需要安装LATEX环境,本文使用Ubuntu + tex live,编辑器则使用vim。如果熟悉其他编辑器如emacs也可。

     

    有了LATEX环境后,即可使用latexpdflatex等命令编译LATEX源代码,生成对应的DVI或PDF文件。由于我们要写博文,需要HTML格式的文档,因此需要将LATEX转换为HTML的工具。在此推荐TtH,一个将LATEX编译为HTML的工具。

     

    1.1  TtH: TEXto HTML的转换工具

     

    TtH最简单的用法为:

     
    tth input.tex
    
    
     

    执行该命令将会将input.tex编译为input.html,注意TtH忽略CJK宏包,因此中文LATEX文档里的\usepackage{CJK(utf8)}\begin{CJK}\end{CJK}等可以省略。虽然忽略了CJK宏包,但TtH仍然可以正确处理中文,由于TtH生成的HTML文件是UTF-8编码的,所以只需保证输入的LATEX源代码也是UTF-8编码的即可。当使用浏览器打开生成的.html文件时可能会发现中文都是乱码,这是由于TtH生成的HTML文件中缺少<head>段中的一个<meta>标签:

     
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    
    
     

    这一行告诉浏览器页面编码是UTF-8,缺少这一行浏览器可能会选择错误的编码集显示页面,例如在中文版Windows系统下可能使用GBK编码显示该页面,造成中文乱码。如果在浏览器的查看设置里将页面编码手动设置为UTF-8,就会发现里面的中文都能够正确显示。所以这只是一个小问题,只需在HTML文件中插入上述<meta>标签即可。

     

    1.2  pyblog: MetaWeblog API的Python实现

     

    MetaWeblog是RFC的一套规范,MetaWeblog API是一套基于XML-RPC实现的远程调用API,可以使用这些API进行博客操作,包括发布日志、修改日志、分类管理等。主流的编程语言都有XML-RPC的程序库。在Python中这个库是xmlrpclib。不过在自己实现基于Python的MetaWeblog API之前本着避免重复发明车轮的原则去Google Code上搜索了一下,果然发现了一个MetaWeblog API的Python库:pyblog。这个库封装了MetaWeblog API的一些常用函数,并且还支持Wordpress API(MetaWeblog API的超集)。美中不足的是这个库似乎有一些错误,在我的Windows Server 2008 R2 + Python 2.7.2 AMD64上报错。经过研究发现第91行的代码有错误:

     
    r = getattr(self.server, methodname)(args)
    
    
     

    应该是:

     
    r = getattr(self.server, methodname)(*args)
    
    
     

    另外一个对我个人来说美中不足的地方是pyblog库没有提供对HTTP代理服务器的支持,所以我参照这篇日志中介绍的为xmlrpc添加HTTP代理服务器支持的方法,对pyblog的代码进行了一点改进。需要注意的是这篇日志中实现的UrllibTransport类的构造函数里缺了这么一句:

     
    self._use_datetime = True
    
    
     

    我加了这么一句是因为原日志中UrllibTransport类的代码在应用到pyblog中时报了一个错,说UrllibTransport类没有_use_datetime这个属性。我根据命名猜测这个属性应该是个布尔型,所以添加了上面那一句。添加以后代码工作正确。

     

    至此两个最重要的问题已经解决了:

     
    • LATEX代码转换为HTML(使用TtH)
       
    • 通过MetaWeblog API将HTML代码的日志发布到博客(使用pyblog)
       
     

    接下来要做的是将这两个步骤连接起来。考虑pyblog是用Python写的,因此这里使用Python作为胶水语言连接这两步。

     

    Chapter 2
    pyposter: 连接LATEX与MetaWeblog API的Python脚本

     

    2.1  设计目标

     

    相比于WYSIWYG编辑器,使用LATEX写博最大的不便在于无法做到所见即所得。对于写好的博文,如果想要检查完稿,需要进行编译,并使用浏览器查看才行。所以使用LaTeX进行博文撰写主要分为以下几个阶段:

     
    1. 编写LATEX源码
       
    2. 编译LATEX源码为HTML并在浏览器中预览,如无问题进入下一步,否则返回1.修改
       
    3. 将写好的博文发送至博客
       
     

    基于以上考虑,我为pyposter设计了两个功能:buildpost。其中buildLATEX源码编译为HTML,并启动一个HTTP服务器方便预览,post使用MetaWeblog API将HTML源码发布至博客。下面分两个小节分别讲述功能细节。

     

    2.2  build: LATEX源码编译、博文预览

     

    pyposter是一个Python脚本,其文件名就叫pyposter。该脚本具备buildpost两项功能。本节介绍build功能。

     

    对于LATEX源码编译,只需调用TtH即可。Python中可以通过os.system()执行命令。

     

    编译完毕后需要预览,首先需要在TtH生成的HTML中加入那个缺失的<meta>标签,声明文件的编码,这样无需手动修改浏览器的显示编码页面就可以正常显示。这可以通过简单的文本处理实现,可参见pyposter中的build()实现。

     

    至于预览,Python内置了一个简单的HTTP服务器SimpleHTTPServer,可以通过如下命令启动:

     
    python -m SimpleHTTPServer
    
    
     

    启动后的HTTP服务器在8000端口侦听(也可以设置为其他端口),HTTP地址的根目录对应执行该命令的当前目录,如果当前目录下有index.html则默认主页为该文件,否则会显示文件列表。

     

    编译、预览都搞定了以后,就需要对pyposter进行一些处理,使其在系统的任意位置都可以使用。通过以下三个设置,可以在任意位置执行pyposter Python脚本:

     
    • pyposter的首行添加#!/usr/bin/python(告诉系统该文件由Python执行)
       
    • 为文件pyposter添加执行权限(chmod +x pyposter
       
    • 将pyposter所在的路径加入环境变量$PATH
       
     

    设置完毕后,可使用以下命令编译、预览使用LATEX编写的博文:

     
    pyposter build
    
    
     

    以上命令使用TtH编译当前目录下的main.tex,生成main.html,逐行扫描main.html,为其添加如下编码信息:

     
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    
    
     

    经过修改的HTML代码被输出至index.html,然后一个HTTP服务器在当前目录下启动,在浏览器中访问http://HOST:8000即可预览(注意:将HOST替换为具体的主机名或IP)。预览完毕后按CTRL+C即可结束pyposter build进程。如果需要修改则返回vim进行修改,修改完毕后再编译、预览,如果文章已完成则可以进入下一步。

     

    2.3  post: 发布博文

     

    发布博文需要解决的一个小问题是调用MetaWeblog API的new_post方法时需要单独指定博文标题。因此需要HTML文件中提取文章标题。只需将<title>标签中的文字提取出来即可,简单的文本处理,在此不再详述,可参见pyposterpost()函数。

     

    发布操作的实现则简单得多,直接调用pyblog中封装好的MetaWeblog API即可。我对pyblog的代码进行了一些小修改,使其能够使用HTTP代理服务器。

     

    执行以下命令可以将当前目录下的index.html发布为博文:

     
    pyposter post
    
    
     

    Chapter 3
    小结

     

    我已经把pyposter放到Google Code上:pyposter at Google Code。通过修改配置文件conf.py可使pyposter应用于其他博客。

     

    pyposter现在已经可以做到:

     
    • 一条命令编译LATEX源码并预览HTML(通过pyposter build
       
    • 一条命令发布HTML博文至博客(通过pyposter post
       
     

    pyposter已经具有了基本的功能。但仍然有很多功能需要完善:

     
    • 虽然已经可以正确获取所有类别(通过pyblog的MetaWeblog.get_categories()),但仍然无法为博文添加类别标签
       
    • 无法管理类别标签(添加、删除类别标签)
       
    • 暂时不支持设置博文的entryName
       
    • 未考虑博文包含图片时的情况
       
    • 暂时不支持编辑博文(更改已发布博文的内容)
       
     

    这些都是留待以后完善的功能。并且限于目前的应用情景,pyposter还只能用于博客园的MetaWeblog API,其他的博客系统暂时还没有进行验证。除MetaWeblog API外,pyblog中还实现了Wordpress API,其功能也有待验证。

     

    欢迎有兴趣试用的各位朋友指正。

     




    File translated from TEX by TTH, version 4.01.
    On 15 May 2012, 09:32.

  • 相关阅读:
    MYSQL日志管理
    MYSQL权限管理
    MYSQL索引操作
    数据库基本操作
    MYSQL5.7的安装(yum、二进制、编译安装)
    记一次科来的培训--流量突发监测分析案例
    4、LNMP部署项目
    RIP
    OSPF(1)
    权限安全:sudo
  • 原文地址:https://www.cnblogs.com/mdyang/p/2501205.html
Copyright © 2020-2023  润新知