亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

把博客園的博客導出為MovableType的文本格式

2019-11-14 13:38:24
字體:
來源:轉載
供稿:網友

最近把以前的WordPRess建的博客刪了,用textpattern重新建了一個獨立博客,http://www.shenlongbin.com,可以把它當成博客園上內容的備份,但導入我以前的一大堆文章非常有難度。經過一番折騰,終于把博客園的內容導出為文本,再導入到textpattern中了。

第一步:C#編程把博客園內容讀取出來

博客園的管理端提供了博客備份功能,可以生成一個xml文件,但只能備份博客的主要內容,并不包含博客的摘要信息和關鍵詞信息,需要用metaweblogAPI進行訪問才能獲得詳細的信息??焖賹W習了metaweblog編程知識,內部采用了XML-RPC調用,從網上搜索相關資料和類庫。很多地方都引用了XML-RPC.NET項目的類庫(名字空間以CookComputing開頭),并修改了相關代碼,可惜下載網址被偉大的墻擋住了,通過VPN才好不容易把xml-rpc.net.2.5.0.zip(.NET framework 2.0)下載下來。原始地址在這里:http://xmlrpcnet.googlecode.com/files/xml-rpc.net.2.5.0.zip。大CC有一篇文章介紹了metaweblogAPI,另外這篇文章介紹了調用方法,只需要稍微修改一點,就可以獲取博客園上的博客內容了。

博客園的metaweblog的訪問接口可以訪問:http://www.49028c.com/speeding/services/metaweblog.aspx,從而獲得詳細的描述信息。實際上在xml-rpc.net2.5.0壓縮包中的interfaces/MetaWeblogAPI.cs文件中可以找到主要類或結構的定義,稍微添加或修改即可。

    [XmlRpcMissingMapping(MappingAction.Ignore)]    public struct Post    {        [XmlRpcMissingMapping(MappingAction.Error)]        [XmlRpcMember(Description = "Required when posting.")]        public DateTime dateCreated;        [XmlRpcMissingMapping(MappingAction.Error)]        [XmlRpcMember(Description = "Required when posting.")]        public string description;        [XmlRpcMissingMapping(MappingAction.Error)]        [XmlRpcMember(Description = "Required when posting.")]        public string title;        public string[] categories;        public Enclosure enclosure;        public string link;        public string permalink;        [XmlRpcMember(           Description = "Not required when posting. Depending on server may "           + "be either string or integer. "           + "Use Convert.ToInt32(postid) to treat as integer or "           + "Convert.ToString(postid) to treat as string")]        public object postid;        public Source source;        public string userid;        public object mt_allow_comments;        public object mt_allow_pings;        public object mt_convert_breaks;        public string mt_text_more;        public string mt_excerpt;        public string mt_keywords; // add by shenlb, for VEVb        public string wp_slug;     // add by shenlb, for VEVb;    }

 

我們單位訪問互聯網要用到代理,還要密碼驗證,所以關鍵代碼得添加幾行:

MetaWeblogCnblogs blog = new MetaWeblogCnblogs();blog.Url = "http://www.49028c.com/speeding/services/metaweblog.aspx";Uri proxyURI = new Uri("http://myproxyhost.myproxydomain.com:80");System.Net.WebProxy proxyObject = new System.Net.WebProxy(proxyURI, false);proxyObject.Credentials = new System.Net.NetworkCredential("proxy_username", "proxy_password");blog.Proxy = proxyObject;Post[] posts = blog.getRecentPosts("speeding", "speeding", "my_blog_admin_password", 50);


這樣就可以獲得博客內容了,但需要再調用getPost才能獲得詳細的信息,這里就可以看到摘要和關鍵詞了。

Post detail = blog.getPost(post.postid.ToString(), "speeding", "my_blog_admin_password");

第二步:利用pandoc把html內容轉換為textile標記

Post中的description中都是html標記,而textpattern默認的標記語言是textile,所以需要將其轉換為textile,關于textile標記的百科知識見這里。

這里要用到著名的pandoc了,這個神奇的工具竟然是用haskell寫成了,以前學習haskell語言的時候以為只是一種教學語言,真有人寫出了實用程序!

把博客中內容寫入temp.html文件中,再用下面的命令行就可以轉換了。

pandoc.exe -t textile -o textile.txt temp.html

主要代碼:

ProcessStartInfo startInfo = new ProcessStartInfo();startInfo.CreateNoWindow = false;startInfo.UseShellExecute = false;startInfo.FileName = "..//..//pandoc.exe";startInfo.WindowStyle = ProcessWindowStyle.Hidden;startInfo.Arguments = "-t textile -o textile.txt temp.html";using (Process exeProcess = Process.Start(startInfo))            {     exeProcess.WaitForExit(); }    return File.ReadAllText("textile.txt"); 

第三步:生成import.txt文件

對幾百篇博客文章循環處理,追加到import.txt文件即可,最后的文件用UTF8保存。

Movable Type博客的文本格式說明文檔可以看這里: https://movabletype.org/documentation/appendices/import-export-format.html#example

簡單說明一下:文件用UTF8編碼存儲,前面幾行是單行文本信息,后面的BODY、KEYWORDS和EXCERPT是多行文本,多行文本需要用5個短橫分開,每篇文章用8個短橫分開,最簡單的一個例子:

TITLE: A dummy title

AUTHOR: shenlongbin

DATE: 01/31/2012 03:31:05 PM

PRIMARY CATEGORY: reading

CATEGORY: reading

-----

BODY:

This is the body.

Another paragraph here.

Another paragraph here.

-----

EXCERPT:

See, this entry does not have an extended piece; but it does have an excerpt. It is special.

-----

--------

里面的日期格式有要格要求,關鍵代碼:

IFormatProvider culture = new CultureInfo("en-US", true);

string date = post.dateCreated.ToString("dd/MM/yyyy hh:mm:ss tt", culture); // 08/05/2002 04:05:23 PM  

第四步:上傳import.txt文件,導入

文件必須放在public_html/textpattern/include/import目錄下,并且文件名一定是import.txt。實際上textpattern的管理端可以導入Movable Type(File/MySQL)、Blogger、b2、WordPress等格式的博客,但支持文本文件導入的只有Movable Type和Blogger。

在textpattern的管理界面上執行import操作,導入成功時會出現博客文章的列表。

3787-20151225081538812-115235259

其它

以前都是用blog_backup這個小程序來備份我的博客,現在發現自己寫的這個小程序可以備份得更為徹底,還可以稍微修改導出到wordpress。一番折騰,學到了這些知識點:movableType, metaweblog, xml-rpc, textile, pandoc, c# culture in date.ToString(), WebProxy……


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲色图50p| 午夜精品久久久久久久99热| 国产精品欧美亚洲777777| 57pao成人永久免费视频| 国产精品视频资源| 免费成人高清视频| 51视频国产精品一区二区| 国产成人激情视频| 久久亚洲电影天堂| 精品一区二区三区三区| 国产精品福利网站| 亚洲精品一区久久久久久| 久久91亚洲精品中文字幕奶水| 国产精品久久久久秋霞鲁丝| 久久久国产一区| 日本成人免费在线| 亚洲天堂男人天堂女人天堂| 成人激情在线观看| 国产精品久久久久久久久男| 奇米影视亚洲狠狠色| 成人免费视频网址| 视频一区视频二区国产精品| 欧美精品一本久久男人的天堂| 亚洲影影院av| 日韩久久免费电影| 国产精品极品美女在线观看免费| 1769国内精品视频在线播放| 国产一区深夜福利| 伊人伊人伊人久久| 欧美性猛交xxxx免费看| 一区二区三区国产视频| 欧美日韩在线看| 97成人超碰免| 国产精品啪视频| 国产精品一区二区久久| 久久久久中文字幕2018| 欧美性xxxxx极品| 国产一区二区三区在线免费观看| 欧美高清视频在线观看| 国产精品免费一区二区三区都可以| zzijzzij亚洲日本成熟少妇| 欧美性感美女h网站在线观看免费| 日本亚洲欧美成人| 国产精品久久97| 国产成人avxxxxx在线看| 日韩欧美亚洲成人| 欧美国产高跟鞋裸体秀xxxhd| 欧美日韩国产中字| 国产精品成人国产乱一区| 欧美一区二区.| 日韩免费看的电影电视剧大全| 亚洲系列中文字幕| 68精品久久久久久欧美| 亚洲日本成人女熟在线观看| 国产精品av在线播放| 欧美xxxx14xxxxx性爽| 久久国产精品亚洲| 欧美视频在线观看 亚洲欧| 国产成人精品一区二区三区| 色与欲影视天天看综合网| 国产极品精品在线观看| 久久久久久久久中文字幕| 亚洲精品国产电影| 尤物yw午夜国产精品视频明星| 日韩av网址在线观看| 日韩毛片中文字幕| 久久成人精品电影| 亚洲欧美在线一区| 欧洲s码亚洲m码精品一区| 国产精品免费视频xxxx| 欧美日韩另类视频| 欧美激情精品久久久久久变态| 91精品在线观看视频| 在线亚洲午夜片av大片| 日韩精品极品在线观看| 黑人精品xxx一区一二区| 成人黄色在线免费| 日韩电影网在线| 色视频www在线播放国产成人| 国产成人在线一区| 一区二区亚洲欧洲国产日韩| 日本伊人精品一区二区三区介绍| 亚洲视频在线观看免费| 91亚洲国产成人精品性色| 97不卡在线视频| 成人网在线免费观看| 色妞色视频一区二区三区四区| 久久99久国产精品黄毛片入口| 日本久久91av| 亚洲黄色www| 91在线精品播放| 国产亚洲成av人片在线观看桃| 日韩一区二区久久久| 国产亚洲欧洲黄色| 国产亚洲欧美日韩美女| 这里只有精品视频在线| 在线观看日韩视频| 亚洲精品福利在线| 久久久999国产精品| 久久综合久久88| 97精品国产97久久久久久春色| 日韩高清电影免费观看完整版| 在线亚洲国产精品网| 久久频这里精品99香蕉| 欧美与黑人午夜性猛交久久久| 欧美日韩亚洲国产一区| 久久青草精品视频免费观看| 日韩欧美主播在线| 精品性高朝久久久久久久| 亚洲欧美制服丝袜| 黄色成人在线免费| 尤物九九久久国产精品的分类| 日本精品视频在线| 欧美一级淫片videoshd| 91亚洲精品久久久| 欧美在线视频一区| 久久99热精品这里久久精品| 亚洲视频第一页| 日韩经典一区二区三区| 欧美一性一乱一交一视频| 亚洲欧美成人网| 欧美日韩午夜视频在线观看| 俺去了亚洲欧美日韩| 97在线免费观看视频| 欧美日韩国产在线| 欧美一级在线亚洲天堂| 麻豆精品精华液| 久久婷婷国产麻豆91天堂| 久久久成人的性感天堂| 欧美在线一区二区视频| www.亚洲免费视频| 日韩av网站在线| 亚洲成人精品久久久| 国产日韩欧美另类| 欧美中文字幕第一页| 成人a免费视频| 91av成人在线| 亚洲自拍av在线| 国产有码一区二区| 欧美美最猛性xxxxxx| 日韩精品在线视频美女| 精品香蕉在线观看视频一| 4438全国成人免费| 狠狠躁夜夜躁久久躁别揉| 日韩电影在线观看永久视频免费网站| 亚洲视频视频在线| 欧美巨猛xxxx猛交黑人97人| 国产精品九九九| 国产91精品久久久久久久| 欧美日韩国产999| 国产精品久久久久久久久久| 亚洲黄在线观看| 另类美女黄大片| 欧美怡红院视频一区二区三区| 琪琪亚洲精品午夜在线| 精品久久香蕉国产线看观看gif| 国产精品久久久久久网站| 国产亚洲欧洲在线| 欧美黄色免费网站| 久久九九热免费视频| 日韩一区二区久久久| 91网站免费观看| 亚洲欧洲成视频免费观看| 欧美成人免费观看|