クソログから引っ越す準備その2

URL文字列を置換したいだけです。

それなら、

記事を書き出して、

置換して、

読み込ませればOK。

ごみためは2000記事ちょいしかありまあせんが、書き出したテキストファイルは10MB未満のサイズです。

昔はこの書き出しにエラく時間がかかったものですが、いまでは瞬殺です。

 

このやり方はブログシステム乗り換えでも使えて便利ですが、芸がありません。

そもそも書き出したファイルの形式はブログシステムごとにバラバラです。

そのコンバーターあるいはコンバートサービスもいろいろあるようですな。

CADデータのように金のなる木の典型なのでしょう。

 

というわけで単純置換のpythonスクリプトをやっつけで書きました。

 

#! /usr/bin/env python

# -*- coding: utf-8  -*-

 

import xmlrpclib

from pit import Pit

from prettyprint import pp, pp_str

import re

 

# 記事の本文を置換

def mod_post(post_id, user, passwd):

  content = api.metaWeblog.getPost(post_id, user, passwd);

 

# URL置換

  target = ‘syassy.cocolog-nifty.com’  # 置換対象

  replacewith = ‘gomita.me’ # これに置換する

  p = re.compile(target)

  content[‘description’], cnt1 = p.subn(replacewith, content[‘description’]) # 記事置換

  content[‘mt_text_more’], cnt2 = p.subn(replacewith, content[‘mt_text_more’]) # さらに読む置換

  # 他の要素は弄らない

  if cnt1 > 0 or cnt2 > 0:

    # 置換発生したときだけpostする

    res = api.metaWeblog.editPost(post_id, user, passwd, content, publish = True);

    print res;

 

if __name__ == “__main__”:

  conf = Pit.get(‘gomitame’)

  api_url, blog_id, user, passwd = conf[‘api_url’], conf[‘blog_id’], conf[‘user’], conf[‘passwd’]

 

  api = xmlrpclib.ServerProxy(api_url)

  startat = 2000 # 最新からさかのぼって何番目の記事まで処理するか

  posts = api.mt.getRecentPostTitles(blog_id, user, passwd, startat);

 

  skip = 1995 # 何記事スキップするか

  for post in posts[skip:]:

    postid = post[‘postid’]

    print posts.index(post), pp_str(postid), pp_str(post[‘title’])

    mod_post(postid, user, passwd)

 

つぎは「続きを読む」対応前の記事を自動で分離しますかね。