「はてなダイアリーキーワード自動リンクAPI」、不調?

観測気球

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

[要旨] 変換結果が空なんですけど……
[キーワード] はてなダイアリー,キーワードリンク,XML-RPC,API

« FreetextBox | トップページ | ヤスヒサさんが、「ウェブログ 虎の穴」に登場 »

2004.06.18

「はてなダイアリーキーワード自動リンクAPI」、不調?

ここ数時間(実際はもっと以前からかもしれませんが)、 「はてなダイアリーキーワード自動リンクAPI」にリンクを埋め込んで欲しい文字列を投げても空文字しか返ってこなくなってしまっています。 一方、キーワード一覧を取得する方のAPIはちゃんと生きているようです。

「はてなダイアリーキーワード自動リンクAPI」がちゃんと動いていたときも、 「ああああ」とかある一定規則の文字列に対して、文字化けした応答を返すという不具合があったので、 結局、当方作成の「はてなダイアリーキーワードリンク生成プログラム」は、 現時点では以下のような対策を採用しています。

  • とりあえず、「はてなダイアリーキーワード自動リンクAPI」を呼び出す。
  • 応答結果が空、文字化け、など、そのまま使うわけにはいかないものが返ってきた場合は、 「キーワード一覧取得API」によりキーワード一覧を取得し、自前でキーワードリンクを生成する。

具体的なソースコードは以下の通り(といいつつ、肝心の XML-RPC API 実行部分の公開はもうちょっと先になりそうです)。

ソースファイル名: hkLink.c

/*
 *  はてなダイアリーキーワード自動リンクAPI 利用プログラム
 *      -- 標準入力またはファイルから読み込んだ文字列にキーワードリンクを
 *         埋め込み、標準出力に書き出す
 *
 *      written by H.Tsujimura      17 Jun 2004
 *      Copyleft 2004 by H.Tsujimura (tsupo@na.rim.or.jp)
 *
 *      使い方:
 *          hkLink [-p] [-c] [ファイル名 [...]]
 *              -p: proxy サーバ経由で XML-RPC API を実行する
 *                   (1) カレントディレクトリに proxy.txt という名
 *                       前のファイルがあれば、proxy.txt から設定を
 *                       読み込む
 *                   (2) proxy.txt が存在しない場合、proxy の設定は
 *                       Internet Explorer の設定を流用する [Windows
 *                       の場合のみ]
 *
 *                          proxy.txt のフォーマット
 *                            以下の2行からなるテキストファイル
 *                              proxy サーバ名(または IPアドレス)
 *                              ポート番号
 *              -c: 「はてなキーワード自動リンクAPI」を使う代わりに、
 *                  「はてなキーワード一覧取得API」+自前のキーワード
 *                  リンク変換処理を使用する
 *
 *      注意:
 *      (1) 「はてなキーワード自動リンクAPI」が返す結果は文字化けしてい
 *          ることがある。(2004年6月17日現在)
 *              例) 入力文字列が
 *                      てへ
 *                      こうさぎ
 *                      なかはらまい
 *                  のようにひらがなのみが偶数個連続する文字列の場合、
 *                  文字化けするようである。ただし、「、」や「。」を含
 *                  む場合は文字化けしない。
 *      (2) 2004年6月18日14時現在、入力文字列に関係なく、常に空文字列が
 *          返ってくるようになった (メインテナンス中 or サービス停止中 ?)
 *
 *      備考:
 *          「はてなキーワード自動リンクAPI」が返す結果が「空文字列」の
 *          場合は、「はてなキーワード一覧取得API」を使って取得したキー
 *          ワードテーブルを元に自前でキーワードリンクを生成するようにし
 *          た (2004年6月18日)
 *
 */

#include "xmlRPC.h"

void
makeKeywordLink( FILE * fp, int cacheVer )
{
    char    *p, *q, buf[BUFSIZ * 4], result[BUFSIZ * 16];

    while ( ( p = fgets( buf, BUFSIZ - 1, fp ) ) != NULL ) {
        if ( (*p == '\r') || (*p == '\n' ) ) {
            fputs( p, stdout );
            continue;
        }

        if ( !cacheVer ) {
            /* 「はてなキーワード自動リンクAPI」を呼び出す */
            /*  ※ setKeywordLink() は入力、出力とも UTF-8 */
            q = setKeywordLink( sjis2utf( buf ),
                                result,
                                0, CNAME_GENERAL, "_blank", "keyword" );
            if ( q && *q ) {
                fputs( utf2sjis( q ), stdout );
                fputc( '\n', stdout );
                continue;
            }

            /* 変換結果失敗のとき、もしくは変換結果が空文字の場合 */
            cacheVer = 1;
        }

        /* 自前(xmlRPCライブラリ内)でキーワードリンク変換を実行する      */
        /*   [キーワード一覧未取得時および前回の取得から72時間以上経過し */
        /*    たときに、「はてなキーワード一覧取得API」により、キーワー  */
        /*    ド一覧を取得する]                                          */
        /*  ※ changeHatenaKeyword() は入力は Shift_JIS、出力は EUC-JP   */
        q = changeHatenaKeyword( buf, result, MODE_HTML );
        if ( q && *q )
            fputs( euc2sjis( q ), stdout );
        else
            fputs( buf, stdout );
                            /* 変換失敗時は入力文字列をそのままエコーバック */
    }
}

int
main( int argc, char *argv[] )
{
    int     ret = 0;
    int     useProxy = 0;
    int     cacheVer = 0;

    if ( argc >= 2 ) {
        int     i, j;
        FILE    *fp;

        for ( i = 1; i < argc; i++ ) {
            if ( argv[i][0] == '-' ) {
                for ( j = 0; argv[i][j] != '\0'; j++ ) {
                    switch ( argv[i][j] ) {
                    case 'p':
                        useProxy = !useProxy;
                        setUseProxy( useProxy );
                        break;
                    case 'c':
                        cacheVer = !cacheVer;
                        break;
                    }
                }

                continue;
            }

            fp = fopen( argv[i], "r" );
            if ( fp ) {
                makeKeywordLink( fp, cacheVer );
                fclose( fp );
                ret++;
            }
        }
    }

    if ( ret == 0 ) {
        makeKeywordLink( stdin, cacheVer );
        ret++;
    }

    return ( ret );
}

ヘッダファイル xmlRPC.h の中身は、後日、公開する予定。

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

楽天市場


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

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


アマゾンわくわく探検隊

トラックバック

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

この記事へのトラックバック一覧です: 「はてなダイアリーキーワード自動リンクAPI」、不調?:

» はてなダイアリーキーワード自動リンクAPI、復活 from 観測気球
空文字しか返ってこない不具合は解消したようです。が、今度は _blank 指定が無視されるようになってしまいました。 続きを読む

受信: 2004.07.01 午後 07:46

コメント

コメントを書く




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

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


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


ワード

ニッセン

fujisan.co.jp

楽天市場