前回(アメブロのAtomAPIが倒せない)の記事から数カ月。。
アクセス解析見てもやっぱり同じように困ってる人がいるみたい。
というわけで、久しぶりに調べ直した。
前回のソースと違う部分をピックアップ。
やっぱりWSSE認証がポイントでした。これさえ通ればあとはすんなり。
ランダム文字生成だから何でもいいとは思うけど。
ここが全然逆だった。
大文字にするんじゃなくて小文字にする。
あとはgetで記事情報を取得し、その結果からpostするURLをとって記事を投げるみたい。
今回使用したソース。
参考にさせていただいたサイトはこちら。
http://senpai4.blog29.fc2.com/blog-entry-452.html
アクセス解析見てもやっぱり同じように困ってる人がいるみたい。
というわけで、久しぶりに調べ直した。
前回のソースと違う部分をピックアップ。
やっぱりWSSE認証がポイントでした。これさえ通ればあとはすんなり。
$nonce = sha1(md5(time()));
ランダム文字生成だから何でもいいとは思うけど。
$pass_digest = base64_encode(pack('H*', sha1($nonce.$created.strtolower(md5($password)))));
ここが全然逆だった。
大文字にするんじゃなくて小文字にする。
あとはgetで記事情報を取得し、その結果からpostするURLをとって記事を投げるみたい。
今回使用したソース。
<?php
require_once 'cURL.php';
$atomapi_url = "http://atomblog.ameba.jp/servlet/_atom/blog";
$user_id = "USERID";
$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.'"';
$headers = array("X-WSSE" => $wsse);
$curl = new Curl();
$curl->headers = $headers;
$res = $curl->get($atomapi_url);
//投稿するURLを取得
$xml = simplexml_load_string($res->body);
$postUrl = (string) $xml->link[0]->attributes()->href;
//記事作成。タグも使える。
$title = "テスト";
$text = '<b>テスト投稿</b>';
$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);
$curl = new Curl();
$headers = array(
"X-WSSE" => $wsse,
"Content-Type" => "application/x.atom+xml",
);
$curl->headers = $headers;
$curl->options = array("POSTFIELDS" => $rawdata);
$res = $curl->post($postUrl);
参考にさせていただいたサイトはこちら。
http://senpai4.blog29.fc2.com/blog-entry-452.html

コメント
コメント一覧 (7)
アメーバーに投稿するプログラムを探していまして、こちらを発見しました。
試行錯誤するも、
require_once 'cURL.php';
のcURL.php
の内容がどうしても分からず、立ち往生しております。
もし宜しければ、
cURL.php
の内容も公開して頂けませんでしょうか?
何卒宜しくお願い致します。
コメントありがとうございます。
cURL.phpはたしか普通にgetリクエスト送るだけなので、
fopenでもfile_get_contentsでもだいじょぶかと。
ちょっと今外出先なので、だめなようでしたらまた別途コメントしますね。
お返事有り難うございます。
require_once 'cURL.php';
のみコメントアウトして、ローカルで走らせたところ、
Fatal error: Class 'Curl' not found in D:\***\index.php on line 23
のようなメッセージが出てしまいます。
PHPを
cURL support enabled
のように設定したのですが。。
何卒宜しくお願いします。
cURL.phpはcurlを使いやすいようにしてるクラスなので、
やっていることは
curl_init
curl_setopt
curl_exec
です。
curl_setoptで
GETリクエストのセットとヘッダーのセットするかんじです。
ちょっと手元に開発環境ないのですが、
たぶんこれを設定するとできると思います。
やはり、二進も三進もいかず。。。
大変お手数をおかけしますが、
日本に帰られましたら、
何卒ソースの公開の程、
宜しくお願い致します。
m(__)m
こんばんは。
試行錯誤して、やっと正常にプログラムが動作しました。
有り難うございました!
このHPへいらっしゃった他の方がコードを見つけやすいように、コードをURLの欄へ掲載させて頂きますね☆
今後とも宜しくお願いします。
m(__)m
無事できたようでなによりです。
今後ともよろしくお願いします。