いつのまにかこれまでのスクリプトでははてなに書きこめなくなった。原因を探っていろいろと検索していて、PHPプロのメーリングリストのアーカイブにCURLのセッションを引き継ぐ方法というのを発見。なに、phpネイティブでこんな命令体型があるなんて知らんかった。簡単だし、返ってきた内容を利用・表示できるのがとっても便利。随分これまで無駄な苦労してしもうたがな。
で作ったはてな書きこみスクリプト。cookieの扱いってこれでいいのかようわからんけど、とりあえず動いている。
<?php function write_hatenadiary($account , $password , $body){ //ログインしているかどうか調べる $ch = curl_init("http://www.hatena.ne.jp/login"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie"); curl_setopt($ch, CURLOPT_COOKIEFILE, "tmp"); $output = curl_exec($ch); curl_close($ch); $output = mb_convert_encoding ( $output, "SJIS","auto"); # echo strip_tags($output); //ログインしていなければログイン if(strpos($output," ようこそ ".$account." さん ")===FALSE){ $params = array( "name" => $account, "password" => $password, "persistent" => "0", ); $fp = fopen("tmp", "w"); $ch = curl_init("http://www.hatena.ne.jp/login"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie"); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_WRITEHEADER, $fp); $ $output = curl_exec($ch); curl_close($ch); fclose($fp); } //ログインここまで //rkmの取得 $header = file_get_contents("tmp"); ereg("Set-Cookie: rk=([^;]+); ",$header,$temp); $rkm=$temp[1]; //投稿 $params = array( "mode" => "enter", "dummy" => "1", "timestamp" => "", "date" => "21000101", "year" => date("Y"), "month" => date("m"), "day" => date("d"), "title" => "", "body" => $body, "rkm" => $rkm, ); $ch = curl_init("http://d.hatena.ne.jp/".$account."/edit"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_COOKIEJAR, "cookie"); curl_setopt($ch, CURLOPT_COOKIEFILE, "tmp"); $output = curl_exec($ch); curl_close($ch); } ?>
いつのまにかシンタクスハイライトなんてはてな記法ができてたんや。他のblogサービスだったらこんなことまずやらへんやろうな。