Tag: wordpress

  • 利用Python解析新浪博客javascript生成的评论

    【前言】sina2wordpress终于有一个大概模样了,目前版本号为0.1
    这是本站项目地址这是代码托管地址

    言归正传,目前新浪博客的评论是用JavaScript生成的,直接用urllib2读取的信息中没有评论信息

    通过Firefox下的firebug或者Chrome自带的Develop Tools,都可以找到js脚本在运行时GET的数据,具体方法是:打开之后选择“Network”标签,并选择“XHR”分类项,刷新页面并等待加载完成,稍等一会就会看到GET了一条以“comment”开头的html页面。

    主要规律是,例如韩寒同学的这篇日志地址是 “http://blog.sina.com.cn/s/blog_4701280b0101854o.html”,那么打开日志页面时GET的就会是 “comment_4701280b0101854o_1.html”,规律不难发现,后面的那个数字就是评论的页数,最后的那个页数可以变为任意整数(没有尝试过上限),当超过实际评论页数时,显示的会是同样的编码,这也就是循环结束条件

    此地址为相对路径,打开后是一堆乱码,这就是JavaScript的数据存储形式——json编码。可以简单的类比成Python中的字典,本例中共有两个关键字,一个是“Code”,对应值”A00006″,没发现啥用处,第二个关键字是“data”,其余部分均为data的对应值,利用Python的json模块进行解析可以发现,这就是评论的html代码。不过这里需要注意的是,第二个关键字“data”缺少双引号,直接解析会报错,需要先进行字符串处理,然后再解析。

    相关代码如下(完整代码可以参见前言中的代码托管地址):
    [python]
    #根据json解析之后的html代码总结出来的各个关键信息的正则表达式
    comment_author_pattern=re.compile(r’(.*?)‘)
    comment_url_pattern=re.compile(r’(.*?)‘)
    comment_time_pattern=re.compile(r’(.*?)‘)
    comment_content_pattern=re.compile(r’

    (.*?)

    ‘, re.S) #这里的re.S很重要

    def commentsAnalyze(key): #key为地址中间的标识性字符串
    num=1 #表示评论的页数
    url=r’http://blog.sina.com.cn/s/comment_%s_%d.html’ %(key, num) #生成json编码对应的地址
    page=urllib2.urlopen(url).read().replace(‘data:’,’”data”:’,1) #给data添加双引号
    while not ‘noCommdate’ in page: #noCommdata是无评论json编码页面的关键字
    data=json.loads(page)[‘data’] #最关键的一部,json代码的解析并有效部分

    #通过正则匹配出相关信息,其中url是可能存在的,将稍后处理
    author=comment_author_pattern.findall(data)
    url=[]
    time=comment_time_pattern.findall(data)
    content=comment_content_pattern.findall(data)

    #后处理url,判断前面提取出来的author周边是不是带有标签(超链接)即可
    for i in range(len(author)):
    comment_id+=1
    result=comment_url_pattern.search(author[i])
    if result:
    url.append(result.group(1))
    author[i]=result.group(2)
    else: url.append(”)

    num+=1 #评论页数+1
    url=r’http://blog.sina.com.cn/s/comment_’+key+’_’+str(num)+’.html’ #生成新的页面地址
    page=urllib2.urlopen(url).read().replace(‘data:’,’”data”:’,1) #修正data的双引号,重复循环
    [/python]

    【后记】感谢 @lqs 学长和 北航开源俱乐部BHOSC的同胞们 在此问题上给予的帮助

  • 精简WordPress eXtended Rss (WXR) 文件格式

    经过N次Import和数据库清空,终于将之前的WXR文件格式的完备集简化了。

    简化原则是适应Sina2WordPress项目的需要,尽可能精简文件大小,删除了导入无效的(如博客标题、博客链接等)和从新浪博客中无法获取的(如评论者的链接和IP等)信息,还有item之前的的作者、分类和标签信息。作者在导入时可以指定的,反而加上会有可能的错误,分类和标签的信息用post中的分类和标签就可以自动统计了。没想明白为什么非要单独列出来,难道是为了空的分类和标签,那还要它干嘛?

    一些必不可少的标签及错误总结:
    1、wxr_version,缺少会提示“missing/invalid WXR version number”的错误
    2、status,否则都会显示成draft
    3、post_type,否则无法导入
    4、comment_approved,否则无法导入

    [xml]
    < ?xml version="1.0" encoding="UTF-8" ?>



    1.1


    Title test

    < ![CDATA[Content_test]]>

    2002-12-21 07:59:59

    open

    publish

    post

    0

    < ![CDATA[Tag Test]]>
    < ![CDATA[Category Test]]>


    1

    < ![CDATA[anonymous]]>

    2012-12-21 07:59:59

    < ![CDATA[Content of Comment]]>

    1

    0





    [/xml]

  • WordPress eXtended Rss (WXR)文件格式解析

    Sina2WordPress的第一步——解析WXR文件格式

    WXR是Wordpress eXtended Rss的缩写,是WordPress针对博客信息特意设定的格式,它最大的优点是兼容性好,包含信息丰富

    通过参照导出的文件,初步找到一个完备集(见下方代码),经测试在WP无任何内容情况下无信息缺漏错误现象

    下方代码已经尽可能的注释了所有可能的标签和属性,并且由于一些标签和属性与Sina2WordPress关系不大,故未深究

    [xml]
    < ?xml version="1.0" encoding="UTF-8" ?>



    Blog Title
    http://blog.example.com
    Blog Description
    Dec, 20 Jun 2012 23:59:59 +0000
    en

    1.1

    http://example.com

    http://blog.example.com

    1admin_testadmin@example.org< ![CDATA[AdMin test]]>< ![CDATA[AdMin]]>< ![CDATA[test]]>

    1category_test< ![CDATA[分类测试]]>

    2tag_test< ![CDATA[标签测试]]>

    http://wordpress.org/?v=3.1.3


    Title
    http://blog.example.com/title/ Thu, 15 Apr 2010 23:20:03 +0000
    admin

    http://blog.example.com/?page_id=1


    < ![CDATA[Content_test_1]]>

    < ![CDATA[]]>

    2

    2012-12-21 07:59:5

    2010-12-20 23:59:59

    open

    closed

    blog_title

    publish

    0

    0

    post



    0

    < ![CDATA[Tag Test]]>
    < ![CDATA[Category]]>


    _edit_last

    < ![CDATA[1]]>


    1

    < ![CDATA[anonymous]]>>

    anonymous@anonymous.com

    http://blog.anonymous.com

    8.8.8.8

    2012-12-21 07:59:59

    2012-12-20 23:59:59

    < ![CDATA[Content of Comment]]>

    1



    0

    0





    [/xml]

    参考:http://ipggi.wordpress.com/2011/03/16/the-wordpress-extended-rss-wxr-exportimport-xml-document-format-decoded-and-explained/