/*
 *  cocousagi.h
 *      こうさぎAPI を使って生成した記事を blog に投稿するプログラム
 *
 *      written by H.Tsujimura      2 Jul 2004
 *
 * History:
 * $Log: /makeRSS/cocousagi/cocousagi.h $
 * 
 * 22    09/03/23 16:23 Tsujimura543
 * ウェブリブログの XML-RPC API 経由ではない方の諸々を削除
 * 
 * 21    09/03/20 22:26 Tsujimura543
 * はてなダイアリーの Atom API での投稿に対応
 * 
 * 20    09/03/20 17:43 Tsujimura543
 * ウェブリブログの XML-RPC API での投稿に対応
 * 
 * 19    08/09/10 23:17 Tsujimura543
 * ソースを整理
 * 
 * 18    08/09/10 23:12 Tsujimura543
 * loginExciteBlog(), postExciteBlog() を xmlRPC.dll から移管
 * 
 * 17    08/09/10 21:57 Tsujimura543
 * loginEchoo(), postEchoo() を xmlRPC.dll から移管
 * 
 * 16    08/09/10 18:04 Tsujimura543
 * loginRakuten(), postRakuten() を xmlRPC.dll から移管
 * 
 * 15    08/09/09 23:56 Tsujimura543
 * loginWebry(), postWebry() を xmlRPC.dll から移管
 * 
 * 14    08/09/09 22:49 Tsujimura543
 * loginMixi() と postMixi() を xmlRPC.dll から移管
 * 
 * 13    08/09/09 22:19 Tsujimura543
 * loginFC2NETWORK() と postFC2NETWORK() を xmlRPC.dll から移管
 * 
 * 12    08/09/09 21:42 Tsujimura543
 * loginKinugasa() と postKinugasa() を xmlRPC.dll から移管
 * 
 * 11    08/09/09 19:58 Tsujimura543
 * loginColors() と postColors() を xmlRPC.dll から移管
 * 
 * 10    07/11/30 2:30 Tsujimura543
 * Jugem、ヤプログ!、ドリコムブログ、しまにてぃ内日記向けの専用処理を廃止
 * 
 * 9     07/10/29 20:06 Tsujimura543
 * XML-RPC API 経由での ヤプログ! への投稿に対応
 * 
 * 8     07/09/04 22:02 Tsujimura543
 * setVerbose() の第2引数追加に伴う変更
 * 
 * 7     07/02/24 2:05 Tsujimura543
 * JUGEM と ドリコムブログ の XML-RPC API 経由での投稿に対応
 * 
 * 6     07/01/23 15:45 Tsujimura543
 * 楽天ブログにカテゴリ指定して投稿できるようにした
 * 
 * 5     06/10/13 17:21 Tsujimura543
 * コメントを修正
 * 
 * 4     06/10/13 17:20 Tsujimura543
 * ウェブリブログに投稿する場合、「ここうさぎ」起動時のパラメータでテンプ
 * レートIDを指定しての投稿ができるようにした
 * 
 * 3     06/10/02 20:06 Tsujimura543
 * その他、共通定義を cocousagi.h へ集約
 * 
 * 2     06/10/02 20:01 Tsujimura543
 * COUSAGI_INFO の定義も cocousagi.h へ移動
 * 
 * 1     06/10/02 20:00 Tsujimura543
 * 構造体の宣言、プロトタイプ宣言などを cocousagi.c から分離し、
 * cocousagi.h を作成
 */

#ifndef __COCOUSAGI_H__
#define __COCOUSAGI_H__

#define YES     TRUE
#define NO      FALSE

/*
 *  blog種別
 */
#define BLOGKIND_NEWPOSTONLY    0xFE    /* metaWeblog.newPost のみサポート */
                                        /* している blog                   */
#define BLOGKIND_NOSUPPORT      0xFF    /* 「ここうさぎ」未サポート blog   */

typedef enum blogKind {
    typepad      = BLOGKIND_TYPEPAD,        // Typepad, Typepad France,
                                            //   TypePad Germany
    typepadJapan = BLOGKIND_TYPEPADJAPAN,   // Typepad Japan
    cocolog      = BLOGKIND_COCOLOG,        // ココログ
    cocologFree  = BLOGKIND_COCOLOGFREE,    // ココログフリー
    blogzine     = BLOGKIND_BLOGZINE,       // ブログ人
    newsHandler  = BLOGKIND_NEWSHANDLER,    // News-Handler
    seesaa       = BLOGKIND_SEESAABLOG,     // Seesaa BLOG
    netLaputa    = BLOGKIND_NETLAPUTA,      // NetLaputa
    blogG        = BLOGKIND_269G,           // 269g
    livedoor     = BLOGKIND_LIVEDOOR,       // livedoor Blog
    lovelog      = BLOGKIND_LOVELOG,        // LOVELOG
    sonet        = BLOGKIND_SONET,          // So-net blog
    blogger      = BLOGKIND_BLOGGER,        // Blogger
    vox          = BLOGKIND_VOX,            // Vox
    hatena       = BLOGKIND_HATENADIARY,    // はてなダイアリー (Atom API)
    msnSpaces    = BLOGKIND_MSNSPACES,      // Windows Live Spaces (MSN Spaces)
    movableType  = BLOGKIND_MOVABLETYPE,    // Movable Type または BOXERBLOG
    bloggerAPI   = BLOGKIND_BLOGGERAPI,     // blogger API サポート blog
    metaWeblog   = BLOGKIND_METAWEBLOG,     // metaWeblog API サポート blog
    mtAPI        = BLOGKIND_MTAPI,          // MovableType API
                                            //   (+ 拡張 metaWeblog API)
                                            //   サポート blog
    atomAPI      = BLOGKIND_ATOMAPI,        // Atom API サポート blog
    newPostOnly  = BLOGKIND_NEWPOSTONLY,    // metaWeblog.newPost のみサポート
                                            //   している blog
    jugemX       = BLOGKIND_JUGEM_X,        // JUGEM (XML-RPC API)
    exciteBlog   = BLOGKIND_EXCITEBLOG,     // exciteブログ
    yaplogX      = BLOGKIND_YAPLOG_X,       // ヤプログ! (XML-RPC API)
    drecomX      = BLOGKIND_DRECOMBLOG_X,   // ドリコムブログ (XML-RPC API)
    webryX       = BLOGKIND_WEBRY_X,        // ウェブリブログ (XML-RPC API)
    mixi         = BLOGKIND_MIXI,           // mixi内日記
    ameblo       = BLOGKIND_AMEBLO,         // アメーバブログ
    kinugasa     = BLOGKIND_KINUGASA,       // キヌガサ内日記
    echoo        = BLOGKIND_ECHOO,          // エコログ (Echoo!内日記)
    fc2network   = BLOGKIND_FC2NETWORK,     // FC2NETWORK内日記
    fc2blog      = BLOGKIND_FC2BLOG,        // FC2BLOG
    rakuten      = BLOGKIND_RAKUTEN,        // 楽天ブログ (楽天広場)
    gooBlog      = BLOGKIND_GOOBLOG,        // goo Blog
    colors       = BLOGKIND_COLORS,         // COLORS内ダイアリー
    openPne      = BLOGKIND_OPENPNE,        // OpenPNE
    unsupported  = BLOGKIND_NOSUPPORT       // 「ここうさぎ」未サポート blog
}   BLOGKIND;


void
rebuildOnLivedoor(
        const char *username,
        const char *password,
        const char *blogID
    );

int
loginExciteBlog( const char *username,      /* excite ID             */
                 const char *password,      /* パスワード            */
                 char       *cookie,        /* クッキー              */
                 char       *myBlogURL,     /* 自blogトップページURL */
                 char       *eid       );   /* EID (blog ID 相当)    */

int
loginEchoo( const char *username,   /* Echoo! ID (メールアドレス) */
            const char *password,   /* パスワード                 */
            char       *cookie,     /* クッキー                   */
            char       *myBlogURL );/* 自blogトップページURL      */

int
loginRakuten( const char *username,     /* ユーザ名              */
              const char *password,     /* パスワード            */
              char       *cookie,       /* クッキー              */
              char       *myBlogURL );  /* 自blogトップページURL */

int
postArticleOnExcite( const char *username,          /* ユーザ名     */
                     const char *password,          /* パスワード   */
                     char       *title,             /* 投稿記事題名 */
                     char       *body,              /* 投稿記事本文 */
                     const char *categoryName,      /* カテゴリ名   */
                     int        forceWritingForPet );   /* 強制代筆 */

int
postArticleOnMixi( const char *username,        /* mixi ID (メールアドレス) */
                   const char *password,        /* パスワード               */
                   char       *title,           /* 投稿記事題名             */
                   char       *body,            /* 投稿記事本文             */
                   int  forceWritingForPet );   /* 強制代筆                 */

int
postArticleOnKinugasa(
        const char *username,           /* キヌガサ ID (メールアドレス) */
        const char *password,           /* パスワード                   */
        char       *title,              /* 投稿記事題名                 */
        char       *body,               /* 投稿記事本文                 */
        int        forceWritingForPet );/* 強制代筆                     */

int
postArticleOnFC2NETWORK( const char *username,      /* メールアドレス */
                         const char *password,      /* パスワード     */
                         char       *title,         /* 投稿記事題名   */
                         char       *body,          /* 投稿記事本文   */
                         int  forceWritingForPet ); /* 強制代筆       */

int
postArticleOnEchoo( const char *username,     /* Echoo! ID (メールアドレス) */
                    const char *password,     /* パスワード                 */
                    char       *title,        /* 投稿記事題名               */
                    char       *body,         /* 投稿記事本文               */
                    const char *categoryName, /* カテゴリ名                 */
                    int        forceWritingForPet );/* 強制代筆             */

int
postArticleOnRakuten( const char *username,       /* ユーザ名     */
                      const char *password,       /* パスワード   */
                      char       *title,          /* 投稿記事題名 */
                      char       *body,           /* 投稿記事本文 */
                      const char *categoryName,   /* カテゴリ名   */
                      int        forceWritingForPet );/* 強制代筆 */

int
postArticleOnColors(
        const char *username,       /* ユーザ名(メールアドレス) */
        const char *password,       /* パスワード               */
        char *title,                /* 投稿記事題名             */
        char *body,                 /* 投稿記事本文             */
        int  forceWritingForPet );  /* 強制代理投稿             */

int
postArticleOnOpenPNE(
        const char *username,           /* ユーザ名(メールアドレス) */
        const char *password,           /* パスワード               */
        char       *title,              /* 投稿記事題名             */
        char       *body,               /* 投稿記事本文             */
        int        forceWritingForPet   /* 強制代理投稿             */
    );

char    *
editForMixi( char *text );

char    *
editForColors( char *text );

int
getCategoryIDwithName(
        int        *categoryID,     /* (I/O) カテゴリID             */
        char       *categoryName,   /* (O)   カテゴリ名             */
        const char *htmlSrcCode,    /* (I) 管理画面htmlソースコード */
        int        minimumID,       /* (I) カテゴリID最小値         */
        const char *beginSelect,    /* (I) <select>                 */
        const char *endSelect,      /* (I) </select>                */
        const char *beginOption,    /* (I) <option>                 */
        const char *endOption,      /* (I) </option>                */
        int        charSet          /* (I) 文字コード               */
    );

char    *
getCategoryIDstring( 
        char       *catID,          /* (O) カテゴリID (文字列)      */
        const char *htmlSrcCode,    /* (I) 管理画面htmlソースコード */
        const char *beginSelect,    /* (I) <select>                 */
        const char *endSelect,      /* (I) </select>                */
        const char *beginOption,    /* (I) <option>                 */
        const char *endOption,      /* (I) </option>                */
        int        charSet          /* (I) 文字コード               */
    );

char    *
getCategoryIDbyName(
        char       *catID,          /* (O) カテゴリID (文字列)      */
        const char *categoryName,   /* (I) カテゴリ名               */
        const char *htmlSrcCode,    /* (I) 管理画面htmlソースコード */
        const char *beginSelect,    /* (I) <select>                 */
        const char *endSelect,      /* (I) </select>                */
        const char *beginOption,    /* (I) <option>                 */
        const char *endOption,      /* (I) </option>                */
        int        charSet          /* (I) 文字コード               */
    );

/*
 *  blog 情報
 */
typedef struct blog_info    {
    char        *blogToolName;  // blogツール名
    char        *blogTypeName;  // blogType に対応する文字列
    BLOGINFOTBL blogInfoTbl;    // blog情報テーブル
}   BLOG_INFO;


/*
 *  ここうさぎ 設定情報
 */
typedef struct cousagiInfo  {
    int         blogPetType;                       /* BlogPet 種別          */
    char        cousagiName[MAX_NAMELEN + 1];      /* BlogPet の名前        */
    char        settingFilename[MAX_PATH];         /* 設定ファイル名        */
    char        cousagiUserName[MAX_USERIDLEN + 1];/* こうサーバ login 名   */
    char        cousagiPassword[MAX_PASSWDLEN + 1];/* こうサーバ パスワード */
    char        blogUserName[MAX_USERIDLEN + 1];   /* blog login 名         */
    char        blogPassword[MAX_PASSWDLEN + 1];   /* blog パスワード       */
    char        userNickName[MAX_USERIDLEN + 1];   /* 記事中に出るユーザ名  */
    char        blogID[MAX_BLOGIDLENGTH + 1];      /* blogID                */
    BLOGKIND    blogType;                          /* blog種別              */
    char        endpointURL[MAX_URLLENGTH + 1];    /* エンドポイントURL     */
    int         charSet;                           /* 文字コード種別        */
    int         promptLevel;       /* 0: 全部キーボードから入力,
                                      1: パスワードのみキーボードから入力,
                                      2: 全部設定ファイルから取得           */
#ifdef  USE_HAIKU
    int         useHaikuWords;                /* 俳句詠唱の要否             */
#endif
    int         useHatenaLink;                /* キーワードリンク埋設の要否 */
    int         useProxy;                     /* proxy経由で通信するか否か  */
    int         allowFreePost;                /* 投稿制限を外すか否か       */
    int         pause;                        /* 終了時に pause するか否か  */
    int         useSimilarity;         /* BlogPetからのおすすめを使うか否か */
    int         useWritingForPet;                   /* 代筆機能を使うか否か */
    int         forceWritingForPet;             /* 強制代筆を実行するか否か */
    char        amazonAssociateID[MAX_NAMELEN + 1]; /* AmazonアソシエイトID */
    char        categoryName[MAX_CATIDLENGTH + 1];  /* 投稿対象のカテゴリ名 */
    char        templateID[MAX_CATIDLENGTH + 1];    /* テンプレートID       */
    char        editorPath[MAX_PATH];           /* 代筆用エディタのパス名   */
    FILE        *verboseFp;                                     /* 調査用   */
}   COUSAGI_INFO;


#define EID_LENGTH      32  /* excite ID 最大長 */

#endif  /* __COCOUSAGI_H__ */
