basyura's blog

あしたになったらほんきだす。

hatena.vim を読む その14

function! HatenaPost(base_url,user,cookie_file,diary,body_file)
    " body_file が空の場合
    if a:body_file == ""
        " 添付ファイルを生成する
        let body_file=tempname()
        " 新しいウィンドウを作成してテンプファイルを編集する
        execute 'new '.body_file
        " 日記のボディ部を 0 行目に挿入する
        "   :{range}a[ppend][!]
        "       指定された行の下に何行分かのテキストを挿入する。
        "       {range}が省略された場合、
        "       テキストは現在行の後から挿入される。
        call append(0,a:diary['body'])
        " バッファの内容を書き出す
        write
        " 編集モードをオフにする
        let &modified=0
        " バッファを削除
        bdelete
    else
        " 編集ファイルを変数に設定
        let body_file=a:body_file
    endif
    " まずは全消去
    " -F mode=enter -F year=2009 -F month=04 -F day=15 
    "   -F rkm=********************** -F body= -F title=
    let post_data = ' -F mode=enter'
       \ . ' -F year=' . a:diary.year 
       . ' -F month=' . a:diary.month . ' -F day=' . a:diary.day
       \ . ' -F rkm=' . a:diary.rkm
       \ . ' -F body= -F title='
    " 空データで更新
    "   -F/--form <name=content>
    "       (HTTP) ユーザがフォーム入力で送信ボタンを押したときの
    "       ふるまいを模倣します。 
    "       RFC1867 に従って内容型 multipart/form-data により 
    "       POST データが送信されます。
    " 
    " curl -k --silent http://d.hatena.ne.jp/basyura/edit 
    "      -b "/Users/basyura/.vim/plugin/hatena/cookies/basyura"
    "      -F mode=enter -F year=2009 -F month=04 -F day=15 
    "      -F rkm=********************** -F body= -F title=
    call system(s:curl_cmd . ' ' . a:base_url . a:user 
            . '/edit -b "' . a:cookie_file . '"' . post_data)
    " ポスト
    " -F mode=enter -F timestamp=20090415221230 
    "       -F rkm=********************** -F year=2009 -F month=04 
    "       -F day=15 -F date=20090415 
    "       -F "body=</var/folders/9A/9ACf0++TI/-Tmp-/v854248/3" 
    "       -F image= -F title=
    let post_data = ' -F mode=enter'
       \ . ' -F timestamp=' . a:diary['timestamp'] 
        . ' -F rkm=' . a:diary['rkm']
       \ . ' -F year=' . a:diary['year'] 
        . ' -F month=' . a:diary['month'] 
        . ' -F day=' . a:diary['day']
       \ . ' -F date=' . a:diary['year'].a:diary['month'].a:diary['day']
       \ . ' -F "body=<' . body_file . '"'
       \ . ' -F image= -F title=' . a:diary['day_title']
    "   
    " 添付ファイルに書き出していた内容をポスト
    " curl -k --silent http://d.hatena.ne.jp/basyura/edit 
    "       -b "/Users/basyura/.vim/plugin/hatena/cookies/basyura"
    "       -F mode=enter -F timestamp=20090415221230 
    "       -F rkm=********************** -F year=2009 
    "       -F month=04 -F day=15 -F date=20090415 
    "       -F "body=</var/folders/9A/9ACf0++TI/-Tmp-/v854248/3" 
    "       -F image= -F title= -D -
    return system(s:curl_cmd . ' ' . a:base_url . a:user . '/edit -b "' 
                   . a:cookie_file . '"' . post_data . ' -D -')
endfunction