ココログの XML-RPC API での文字化け検出

観測気球

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

[要旨] こんなの公開していいんでしょうか? (^^;
[キーワード] XML-RPC

« スペシャルページ | トップページ | Excerpt というのは... »

2004.01.21

ココログの XML-RPC API での文字化け検出

ヴァリウム男爵さんの リクエスト にお応えして、 ちょっと荒っぽい文字化け自動判別処理 を組み込んだ、記事取得処理のソース (C で記述)を公開します。

本当に荒っぽいですよ。やっつけですよ。いいですね? (^^;

ということで、ソースです。

/*
 *      blogger.getRecentPosts 
 *          説明: 最新の記事をシステムからとってきます.
 *          引数: String appkey,
 *                String blogid,
 *                String username,
 *                String password,
 *                int    numberOfPosts
 *          返り値: 成功すると,構造体の配列が返ってきます. 
 *                  構造体には,
 *                      ISO.8601 dateCreated,
 *                      String   userid,
 *                      String   postid,
 *                      String   content
 *                  が含まれます.(順は不同)
 *                  失敗すると,fault が返ります.
 *              注意: dateCreated は,blogid の weblog においての時間帯になっています.
 *
 */

int
getRecentPosts( const char *blogID,
                const char *userName,
                const char *password,
                int        numOfEntries )
{
    int     ret  = FALSE;
    int     done = FALSE;
    char    buffer[BUFSIZ];
    char    response[102400];

    if ( !userName )
        userName = xmlrpc_p->userName;
    if ( !password )
        password = xmlrpc_p->password;

    do {
        if ( response )
            *response = NUL;

	    sprintf( buffer,
             "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
             "<methodCall>\n<methodName>blogger.getRecentPosts</methodName>\n"
             "<params>\n"
             "<param>\n<value><string>%s</string></value>\n</param>\n"
             "<param>\n<value><string>%s</string></value>\n</param>\n"
             "<param>\n<value><string>%s</string></value>\n</param>\n"
             "<param>\n<value><string>%s</string></value>\n</param>\n"
             "<param>\n<value><i4>%d</i4></value>\n</param>\n"
             "</params>\n"
             "</methodCall>\n\n",
                 "C1C2C3C4C5", blogID, userName, password, numOfEntries );

        ret = httpPost( xmlrpc_p->webServer, xmlrpc_p->webPage,
                        buffer, response );

        done = TRUE;
        if ( (ret == 0) || (*response != NUL) ) {
            char    *p = response;
            char    *q = strstr( p, "content" );
            if ( q ) {
                p = strstr( q + 7, "<string>" );
                if ( p ) {
                    q = strchr( p + 8, (char)0xC3 );
                    if ( q ) {
                        fprintf( stderr, "文字化け検出!!\n" );
                        done = FALSE; /* 文字化けしてたら、記事を取得し直す */
                    }
                }
            }
        }
        else
            ret = -1;
    } while ( !done );

    return ret;
}

とりあえず、これでうまくいっています。「記事の再取得」をしなくても、 もちろん無理矢理デコードすることも可能です。どっちの方がコストは低いんでしょう? 無理矢理デコードの方が、余分な通信が発生しない分、低コストですね。

投稿者: tsupo 2004.01.21 午後 12:18 | 固定リンク | このエントリーをはてなブックマークに追加 | このエントリを del.icio.us に登録 このエントリの del.icio.us での登録状況 | このエントリの 1470.net での登録状況 | このエントリを Buzzurl に追加このエントリの Buzzurl での登録状況 | このエントリをニフティクリップに登録 | このエントリをlivedoorクリップに登録 このエントリのlivedoorクリップでの登録状況 このエントリをlivedoorクリップに登録している人の数 | Technorati で関連サイトを調査 | 酢鶏巡回中

楽天市場


Blogクライアント」カテゴリ内の最近の記事

ウェブログ・ココログ関連」カテゴリ内の最近の記事

プログラミング」カテゴリ内の最近の記事

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


アマゾンわくわく探検隊

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/6737/121534

この記事へのトラックバック一覧です: ココログの XML-RPC API での文字化け検出:

コメント

コメントを書く




※イタズラ防止のため、メールアドレスを入力しないと投稿できません。

次からのコメント入力の手間を省くために、名前やメールアドレスをcookieに記憶しますか?


URL を入力すると、その URL にリンクがはられます。
なお、メールアドレスは公開されません。ご安心ください。


ワード

ニッセン

fujisan.co.jp

楽天市場