UChome 日志导出

19 条评论

因为纸飞机(http://my.nuaa.edu.cn)的外网开通一直没有着落,也可能因为一些其他的各种原因,Sherry 想要将纸飞机空间 UChome 里的日志导出,用以导入到其他的博客托管服务上,不过很可惜的是 UChome 本身并不提供日志导出这一功能,而且也没有提供日志的 RSS Feed,仅有的一个订阅分享输出的日志都还是截断过的摘要,这样一来就不好办了,想要达到目标只能尝试使用其他的一些手段。

首先想到的是管理员直接操作数据库,这个最为简单,直接...不过很显然,我不是管理员,所以这个方法暂时放一边。

第二个可行的方法就是编写程序,分别访问作者的每一篇日志,并且解析 html 文件,从中提取出作者,分类,文章内容,发布日期等要素,自己再重组输出为 xml 文件,于是可以使用这个 xml 文件导入到其他的博客系统。

鉴于条件限制,我貌似只能使用第二种方法,访问日志页面?还是用 顺手,至于解析 html 文件,上次使用 的 BeautifulSoup 模块很有感觉的样子...那么就开始了

飞机的页面设置了权限,非登录用户无法查看别人的页面,所以第一步是要登录纸飞机空间,使用上篇文章中提到过的代码

  1. import os,re,urllib,codecs,time
  2. from BeautifulSoup import BeautifulSoup
  3. print u'登录飞机...'
  4. os.system(curl+ ' \"http://my.nuaa.edu.cn/home/do.php?ac=a4d30c424df67e23cdefc40e489f82c2&&ref\" >enuaa_temp.txt 2>nul')
  5. enuaa_web=BeautifulSoup(file(r'enuaa_temp.txt').read())
  6. formhash=enuaa_web.find('input',attrs={'name':'formhash'})['value']
  7. os.system(curl +' -c enuaa.txt -d \"username='+ user +'&password='+ password +'&cookietime=315360000&refer=space.php?do\=home&loginsubmit=true&formhash='+ formhash +'\" \"http://my.nuaa.edu.cn/home/do.php?ac=a4d30c424df67e23cdefc40e489f82c2&&ref\" >nul')

接下来访问日志列表的页面,其地址组成为:http://my.nuaa.edu.cn/home/space-'+ uid +'-do-blog-view-me-page-'+ page_num +'.html ,其中的 UID 就是账户的一个身份标识,可以直接查看,page_num为页数,所以可以带cookie访问这个页面,输出到文件后用 BeautifulSoup 来解析,提取出每一篇文章的地址

  1. os.system(curl+ ' -b enuaa.txt \"http://my.nuaa.edu.cn/home/space-'+ uid +'-do-blog-view-me-page-'+ page_num +'.html\" >enuaa_temp.txt 2>nul')
  2. os.system('\"'+ convertz + '\" /o:utf8 enuaa_temp.txt enuaa_temp_ut.txt')
  3. enuaa_web=BeautifulSoup(file(r'enuaa_temp_ut.txt').read())
  4. for i in range(0,10):
  5.     blog_url=enuaa_web.findAll('div',attrs={'class':'title'})[i].h4.a['href']
  6.     ExportToXML(blog_url)

同样地,然后再访问获取到的单篇文章页面,并使用 BeautifulSoup 来提取信息,在这个步骤上需要注意的是,如果 BeautifulSoup 解析发生非正常的莫名其妙的错误的时候,可能需要换用旧的 3.0.8 版本,我不是太清楚 rss 规范,所以部分参照 wordpress 的输出,最终的代码如下:

  1. #!/usr/bin/python
  2. #coding=utf-8
  3. import os,re,urllib,codecs,time
  4. from BeautifulSoup import BeautifulSoup
  5. curl=r'g:\curl\curl.exe'
  6. convertz=r'g:\curl\convertz\convertz.exe'
  7. user=''
  8. password=''
  9. uid='100395'
  10. page_num=7
  11. last_num=2
  12. author=u'sherry'
  13. def    ExportToXML(blog_url):
  14.     os.system(curl+ ' -b enuaa.txt \"http://my.nuaa.edu.cn/home/'+ blog_url +'\" >enuaa_temp.txt 2>nul')
  15.     os.system('\"'+ convertz + '\" /o:utf8 .\\enuaa_temp.txt .\\enuaa_post.txt')
  16.     os.system('copy enuaa_post.txt enuaa_post.html /y >nul')
  17.     blog_post=BeautifulSoup(file(r'enuaa_post.html').read())
  18.     ss=u'正在导出日志: '+ blog_post.findAll('h1')[1].string +' ...'
  19.     print ss
  20.     bb='''    <item>
  21.         <title>'''
  22.     bb=bb + blog_post.findAll('h1')[1].string + '''</title>'''
  23.     print >>yunmengze,bb
  24.     bb='''        <link>http://my.nuaa.edu.cn/home/'''+ blog_url +'''</link>'''
  25.     print >>yunmengze,bb
  26.     bb='''        <pubDate>''' + blog_post.findAll('span',attrs={'class':'gray'})[1].string + '''</pubDate>'''
  27.     print >>yunmengze,bb
  28.     bb='''        <dc:creator>'''+ author +'''</dc:creator>
  29.         <category><![CDATA[ Uncategorized ]]></category>
  30.         <description></description>'''
  31.     print >>yunmengze,bb
  32.     bb='''        <content:encoded><![CDATA[''' + str(blog_post.findAll('div',attrs={'id':'blog_article'})[0]).decode('utf-8') + ''']]></content:encoded>'''
  33.     print >>yunmengze,bb
  34. #    bb='''        <wp:post_date>''' + blog_post.findAll('span',attrs={'class':'gray'})[1].string + '''</wp:post_date>'''
  35. #    print >>yunmengze,bb
  36.     bb='''    </item>'''
  37.     print >>yunmengze,bb   
  38. def ExportBlogUrl(uid,page_num):
  39.     os.system(curl+ ' -b enuaa.txt \"http://my.nuaa.edu.cn/home/space-'+ uid +'-do-blog-view-me-page-'+ page_num +'.html\" >enuaa_temp.txt 2>nul')
  40.     os.system('\"'+ convertz + '\" /o:utf8 .\\enuaa_temp.txt .\\enuaa_temp_ut.txt')
  41.     enuaa_web=BeautifulSoup(file(r'enuaa_temp_ut.txt').read())
  42.         for i in range (0,10):
  43.             if i==4    :
  44.                 continue
  45.             else    :
  46.                 blog_url=enuaa_web.findAll('div',attrs={'class':'title'})[i].h4.a['href']
  47.                 ExportToXML(blog_url)
  48.     else    :
  49.         for i in range(0,10):
  50.             blog_url=enuaa_web.findAll('div',attrs={'class':'title'})[i].h4.a['href']
  51.             ExportToXML(blog_url)
  52.    
  53. print u'登录飞机...'
  54. os.system(curl+ ' \"http://my.nuaa.edu.cn/home/do.php?ac=a4d30c424df67e23cdefc40e489f82c2&&ref\" >enuaa_temp.txt 2>nul')
  55. enuaa_web=BeautifulSoup(file(r'enuaa_temp.txt').read())
  56. formhash=enuaa_web.find('input',attrs={'name':'formhash'})['value']
  57. os.system(curl +' -c enuaa.txt -d \"username='+ user +'&password='+ password +'&cookietime=315360000&refer=space.php?do\=home&loginsubmit=true&formhash='+ formhash +'\" \"http://my.nuaa.edu.cn/home/do.php?ac=a4d30c424df67e23cdefc40e489f82c2&&ref\" >nul')
  58. os.system('del /q enuaa_temp.txt')
  59. yunmengze=codecs.open(author +'.xml','w','utf-8')
  60. bb=u'''<?xml version="1.0" encoding="UTF-8"?>
    <rss version="2.0"
  61.     xmlns:content="http://purl.org/rss/1.0/modules/content/"
  62.     xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  63.     xmlns:dc="http://purl.org/dc/elements/1.1/"
  64.     xmlns:atom="http://www.w3.org/2005/Atom"
  65.     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  66.     xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  67. >
    <!-- 该文件由起衣导出 http://isouth.org -->
  68. <channel>
  69.     <title>'''+ author +u''' 的日志</title>
        <link>http://yunmengze.net</link>
  70.     <description>斜阳院落,柳边深巷</description>
  71.     <pubDate>'''+ time.asctime() +'''</pubDate>
  72.     <language>zh-cn</language>
  73.     <sy:updatePeriod>hourly</sy:updatePeriod>
  74.     <sy:updateFrequency>1</sy:updateFrequency>
  75.     <generator>http://yunmengze.net</generator>
  76. '''
  77. print >>yunmengze,bb
  78. for i in range(1,page_num+1):
  79.     ExportBlogUrl(uid,str(i))
  80. bb='''    </channel>
  81. </rss>'''
  82. print >>yunmengze,bb
  83. yunmengze.close()
  84. os.system('del /q enuaa_temp_ut.txt >nul')
  85. os.system('del /q enuaa_post.html >nul')
  86. os.system('del /q enuaa_temp.txt >nul')
  87. os.system('del /q enuaa_post.txt >nul')
  88. os.system('del /q enuaa.txt >nul')

然后我将生成的 sherry.xml 导入 wordpress ,成功!

相关日志 Relate Posts

收藏与分享 : Twitter | Facebook | 微博 | 人人 | Google+ | PDF

“UChome 日志导出”19条留言

  1. 沙发哦~~~

    • @权子 第一次呀

    • @起衣 

      嗯,感觉这个的日志功能还是太复杂了~-~ 谁谁想要个~

    • @littlewater 可能需要针对性的才有效

    • @起衣 

      =3= 你就爱折腾- -

    • @littlewater 这次是帮忙嘛

    • @起衣 

      多好的功能,只可惜了没有办法帮到水水\ \~

  2. 😀 😉 😎

    • @sherrychiaki 发现…脚本还有很多地方需要修改,不过写它的目的只是给你导出日志,现在目的达到了,就不再理会叻

  3. Uchome是什么我不知道呢

    • @软件盒子 那个和Discuz!一起的康盛的空间产品…

  4. 嘿嘿 起衣真牛逼啊,来学习学习 😀 😀

    • @ishagua  💡 是看出了我的无聊…折腾

  5. GFW blog 转载了这篇 这里www.chinagfw.org/2010/11/15.html

    • @why 偶也,多谢风笛?GFW转过几篇叻~

  6. 不好 暴露了

    • @why 你早暴露叻额…

  7. 这个方法使用与其他的吗

Pingbacks/Trackbacks

  1. […] This post was mentioned on Twitter by 起衣, 起衣. 起衣 said: UChome 日志导出 http://isouth.org/archives/278.html […]

发表留言(Ctrl+Enter提交)