2013年12月19日追記

AtomAPIの変更で動かなくなったプログラムを修正する方法はこちら

以下の方法では、正常に動作しません。

これを作るのは、大変でした。

の一言に尽きます。

参考にさせて頂いたサイト。

http://senpai4.blog29.fc2.com/blog-entry-452.html

http://arthur87.sakura.ne.jp/item/59/catid/13

http://blog.livedoor.jp/j_yuze/archives/51523327.html

どの一つのサイトが欠けても出来なかったと思います。

では、肝心のソースです。(ファイルの保存文字コードはUTF-8でお願いします。)

<?

//aaa=ID bbb=パス
ame_toko(aaa,bbb);

function ame_toko($id,$pass){

$atomapi_url = “http://atomblog.ameba.jp/servlet/_atom/blog”;

$user_id = $id;
$password = $pass;

$created = date(‘Y-m-d\TH:i:s\Z’);
$nonce = sha1(md5(time()));
$pass_digest = base64_encode(pack(‘H*’, sha1($nonce.$created.strtolower(md5($password)))));

$wsse =
‘UsernameToken Username=”‘.$user_id.'”, ‘.
‘PasswordDigest=”‘.$pass_digest.'”, ‘.
‘Nonce=”‘.base64_encode($nonce).'”, ‘.
‘Created=”‘.$created.'”‘;

$ameHeader = “X-WSSE: ” . $wsse;

$rawdata = sprintf(‘
<?xml version=”1.0″ encoding=”utf-8″?>
<entry xmlns=”http://purl.org/atom/ns#”
xmlns:app=”http://www.w3.org/2007/app#”
xmlns:mt=”http://www.movabletype.org/atom/ns#”>
<title>%s</title>
<content type=”application/xhtml+xml”>
<![CDATA[%s]]>
</content>
</entry>
‘,a,b);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $atomapi_url);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER,array($ameHeader));
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
curl_close($ch);

preg_match(‘/rel=”service.post” type=”application\/x\.atom\+xml” href=”(.*?)”/’,$res,$postURl);

//記事作成。タグも使える。
$title = “テスト”;
$text = <<<EOD
テストだよテスト
EOD;

$rawdata = sprintf(‘<?xml version=”1.0″ encoding=”utf-8″?>
<entry xmlns=”http://purl.org/atom/ns#”
xmlns:app=”http://www.w3.org/2007/app#”
xmlns:mt=”http://www.movabletype.org/atom/ns#”>
<title>%s</title>
<content type=”application/xhtml+xml”>
<![CDATA[%s]]>
</content>
</entry>
‘,$title,$text);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $postURl[1]);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER,array($ameHeader));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,$rawdata);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
curl_close($ch);

}

?>

スポンサー

お問い合わせ

この記事についてご質問があれば、お問い合わせ下さい。

お名前(必須)
お名前フリガナ(必須)
メールアドレス(必須)
メールアドレス確認(必須)
お問い合わせ記事URL
お問い合わせ内容(必須)