livedoor Blog の強制再構築ツール

観測気球

収集物の記録書庫 a data archive of collection -- collectible toys

[要旨] ここ半年くらい、livedoor Blog の再構築が中途半端に終わってしまう事態を何度も経験しています(投稿しただけでは再構築が不完全。手動で別途、強制再構築してやらないといけない)。そんな事態を少しでも改善するため、強制再構築をフルオートで実行するコマンドラインツールを作ってみました。
[キーワード] livedoor Blog,再構築,rebuild

« 銀色の髪のアギト(BlogPet) | トップページ | 今週のお買い物 (2006.01.22~01.28) »

2006.01.27

livedoor Blog の強制再構築ツール

ここ最近のライブドアの様子を見て、livedoor Blog から他の blog に引っ越す人が続出している今日この頃ですが、「livedoor Blog の強制再構築ツール」というものを作ってみました。

去年の夏ごろから、livedoor Blog に記事を投稿しても blog の再構築が中途半端な状態で終わってしまって、RSS の中身がおかしいとか、カテゴリアーカイブや月別アーカイブが全く更新されないとか、個別記事ページのフッターが不完全な状態のままになってしまうとか、そういう状態が常態化しています。

livedoor Blog のリニューアルで改善されるかと思いきや、特に変化なし。管理画面の投稿だけではなく、Atom API 経由での投稿の場合でも、再構築が中途半端になってしまうようになってしまいました。

地獄変00さんの記事を元に、リニューアル後の livedoor Blog 用に「記事を投稿しただけでは livedoor Blog の再構築がうまくいかない件に関する対策」というものを用意したりしてみたんですが、いちいち当該記事にアクセスして、再構築実行ボタンを押すのも面倒になってきて、結局、気が向いたときに、管理画面から全ページの再構築を実行しています。

もういっそのこと、MovableType のように「rebuild支援ツール」でも作ってみるか、と思い、作ってみたのが、「livedoor Blog の強制再構築ツール」です。このツールは何ものかというと、「管理画面から全ページの再構築を実行」するのを全自動でやるツールです。Windows のコマンドプロンプトから実行可能。

実際のソースコード(の核心部分)は、以下のような感じです。

/* livedoor Blog の管理画面に login */
int
loginLivedoor( const char *username,
               const char *password,
               char       *cookie )
{
    int     ret = 0;
    char    *request;
    char    *response;
    char    url[MAX_URLLENGTH];

    if ( !cookie   ||
         !username || !(*username) ||
         !password || !(*password)    )
         return ( ret );

    request  = (char *)malloc( MAX_CONTENT_SIZE );
    if ( !request ) 
        return ( ret );
    response = (char *)malloc( MAX_CONTENT_SIZE * 2 );
    if ( !response ) {
        free( request );
        return ( ret );
    }
    memset( request,  0x00, MAX_CONTENT_SIZE );
    memset( response, 0x00, MAX_CONTENT_SIZE * 2 );

    http_getEx( "http://blog.livedoor.com/",
                response, cookie );
    memset( response, 0x00, MAX_CONTENT_SIZE );

    strcpy( url, "http://member.livedoor.com/login/index" );
    setTargetURL( url );
    sprintf( request,
             ".next=%s&"
             ".sv=blog&"
             "livedoor_id=%s&"
             "password=%s&"
             "auto_login=on\r\n",
             encodeURL("http://cms.blog.livedoor.com/cms/"),
             username, password );
    http_postEx( url, "application/x-www-form-urlencoded",
                 request, response, cookie );

    if ( *response ) {
        if ( strstr( response,
                     "<input type=\"hidden\" name=\"blog_id\"" ) != NULL )
            ret = 1;    /* ログイン成功 */
        else
            ret = 0;    /* ログイン失敗 */
    }
    else
        ret = 0;        /* ログイン失敗 */

    free( response );
    free( request  );

    return ( ret );
}

/* 全ページの再構築を実行 */
void
rebuildOnLivedoor(
        const char *username,
        const char *password,
        const char *blogID
    )
{
    char    *request;
    char    *response;
    char    *cookie;
    char    url[MAX_URLLENGTH];
    int     ret;

#define MAX_COOKIE_LENGTH   4096
#define MAX_RESPONSE_LENGTH (65536 * 32)

    cookie = (char *)malloc( MAX_COOKIE_LENGTH );
    if ( !cookie )
        return;
    request = (char *)malloc( MAX_COOKIE_LENGTH );
    if ( !request ) {
        free( cookie );
        return;
    }
    response = (char *)malloc( MAX_RESPONSE_LENGTH );
    if ( !response ) {
        free( request );
        free( cookie );
        return;
    }
    memset( cookie,   0x00, MAX_COOKIE_LENGTH );
    memset( request,  0x00, MAX_COOKIE_LENGTH );
    memset( response, 0x00, MAX_RESPONSE_LENGTH );

    // livedoor Blog に login
    ret = loginLivedoor( username, password, cookie );
    if ( ret ) {
        // 「全ページ」の再構築を実行
        strcpy( url, "http://cms.blog.livedoor.com/cms/rebuild/index" );
        sprintf( request,
                 "blog_id=%s&"
                 "command=css,index,rss,atom,monthly,category,articles:all&"
                 ".popup=0",
                 blogID );
        http_postEx( url, "application/x-www-form-urlencoded",
                     request, response, cookie );
        while ( *response ) {
            char    *p = strstr(response,
                                "<body onLoad=\"JavaScript: location.href='");
            char    *q;

            if ( p ) {
                 p += 41;
                 q = strchr( p, '\'' );
                 if ( q ) {
                    int    len;

                    strcpy(url, "http://cms.blog.livedoor.com/cms/rebuild/");
                    len = strlen( url );
                    strncat( url, p, q - p );
                    url[len + (q - p)] = NUL;

                    memset( response, 0x00, MAX_RESPONSE_LENGTH );
                    setTargetURL( url );
                    fprintf( stderr, "%s ... 再構築中 ...\n", url );
                    http_getEx( url, response, cookie );
                 }
            }
            else
                break;
        }
    }

    free( response );
    free( request );
    free( cookie );
}

上記の処理を実行するコマンドラインツールを作ったり、Blog クライアントに組み込んで、投稿後に強制再構築を実行するようにすれば、問題は解決します。これでしばらくは、livedoor Blog を使い続けられるようになります。そうはいっても、livedoor Blog を使い続けるのは、いろんな意味で不安が残りますが。このツールは気休めくらいにはなるかな? (笑)

追記

過去のアーカイブが見られなかったり、RSS配信がされなくなったり。この過去のアーカイブが見られないのがすごく痛い。どうにかして欲しいっすよ。

Step by Step:ライブドアのブログって・・・

再構築がうまくいかないせいで、月別アーカイブやRSSがちゃんと生成されなかったりします。もっとみんなでスタッフに言った方がいいのかも。って、今は時期が悪いですが。

それから。「最近 BlogPet が投稿しなくなった」と悩んでいる人も多いみたいですが、再構築がうまくいってないのが原因である可能性が高いです。記事を投稿するたびに毎回必ず「全てのページを再構築」するようにすれば、RSS がちゃんと生成されるし、個別記事ファイルもきちんとできあがるので、BlogPet もちゃんと記事を投稿したり、コメントを投稿してくれるようになると思います。この「毎回」というのが面倒ではあるのですが。それから、BlogPet が投稿したのに気づいたら、忘れず、欠かさす再構築!! 再構築を怠ると、次の投稿をしてもらえない可能性があります。

投稿者: tsupo 2006.01.27 午前 01:08 | 固定リンク | このエントリーをはてなブックマークに追加 | このエントリを del.icio.us に登録 このエントリの del.icio.us での登録状況 | このエントリを Buzzurl に追加このエントリの Buzzurl での登録状況 | このエントリをlivedoorクリップに登録 このエントリのlivedoorクリップでの登録状況 このエントリをlivedoorクリップに登録している人の数 | 酢鶏巡回中

楽天市場


品揃え豊富で安い!NTT-X Store


アマゾンわくわく探検隊

トラックバック

この記事のトラックバックURL:

この記事へのトラックバック一覧です: livedoor Blog の強制再構築ツール:

» ここうさぎ Ver.2.43 COLORS対応版 from 観測気球
BlogPet に記事を書かせて投稿させるツール「ここうさぎ」の Ver2.43 をリリースします。COLORS の日記にも投稿できるようになりました。 続きを読む

受信: 2006.02.09 午前 12:44

» livedoor Blog の強制再構築ツール - lrebuild from 観測気球
livedoor Blog の再構築を実行するツールの実行形式を公開します。このツールを使うことで、ブラウザで livedoor Blog の管理画面を操作することなく、ブログの再構築ができるようになります。 続きを読む

受信: 2006.03.20 午前 03:28

» 強制再構築(livedoor blog) from Tree eyes good
[観] livedoor Blog の強制再構築ツールlivedoor Blog の強制再構築ツール  livedoor blogでの全構築は本当の意味での再構築が行われていないらいしです。中途半端な形で再構築が終わったり再構築が途中で止まったりする現象をこれで回避できるそうです。(詳しくは上記....... 続きを読む

受信: 2007.03.09 午後 01:34

コメント


きょうつぽで、投稿したかったみたい。

投稿者: BlogPetのarimy (2006.01.28 午前 09:15)

ワード

ニッセン

fujisan.co.jp

楽天市場