【AS3】はてなブログの記事を更新してみる

ActionScript3を使って、はてなブログの記事の更新ができるかやってみました。

はてなブログAPIはこちらを参照。

はてなブログAtomPub - Hatena Developer Center

ベーシック認証

↓APIを使用する時に必要なベーシック認証はこちら

titirobo-develop.hatenablog.jp

はてなブログ一覧取得

var url:String = "https://blog.hatena.ne.jp/titirobo/nanigoto.hatenablog.jp/atom/entry";

このアドレスのリクエストから、

url = https://blog.hatena.ne.jp/[はてなID]/[はてなドメイン]/atom/entry/[エントリーID]

このアドレスを取得して、これをキーにして更新をします。

はてなブログ更新

XMLをPUTして更新をかけます。「{}」は変数です。

var xmlStr:String = '<?xml version="1.0" encoding="utf-8"?>';
xmlStr += '<entry xmlns="http://www.w3.org/2005/Atom" xmlns:app="http://www.w3.org/2007/app">';
xmlStr += '<title>' + {title} + '</title>';
xmlStr += '<author><name>' + {author} + '</name></author>';
xmlStr += '<content type="text/x-markdown">';
xmlStr += {content};
xmlStr += '</content>';
xmlStr += '<updated>' + {updated} + '</updated>';
for(var i:int=0;i < {categoryArr}.length;i5++){
 var category:String = editObj.categoryArr[i];
 xmlStr += '<category term="' + category + '" />';
}
xmlStr += '<app:control>';
xmlStr += '<app:draft>no</app:draft>';
xmlStr += '</app:control>';
xmlStr += '</entry>';

var xml:XML = new XML(xmlStr);

var urlReq:URLRequest = new URLRequest({url});
urlReq.method = URLRequestMethod.PUT;

var base64Encoder:Base64Encoder = new Base64Encoder;
base64Encoder.encodeUTFBytes({ID} + ":" + {PASS});
var base64strings:String = base64Encoder.toString();
urlReq.requestHeaders = [new URLRequestHeader("Authorization", "Basic " + base64strings)];

urlReq.data = xml;

urlReq.contentType = "application/xml;charset=utf-8";

var urlLoader:URLLoader = new URLLoader;
urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlLoader.addEventListener(Event.COMPLETE,onCompete);
urlLoader.addEventListener(IOErrorEvent.IO_ERROR,onIOError);
urlLoader.load(urlReq);

content(本文) の注意

HTMLの特殊文字は前もって変換しておかないと表示がおかしくなるので注意が必要です。

function convMetaToEscape(str:String):String
{
 str = str.replace(/&/g,"&amp;");
 str = str.replace(/"/g,"&quot;");
 str = str.replace(/'/g,"&#039;");
 str = str.replace(/</g,"&lt;");
 str = str.replace(/>/g,"&gt;");
 return str;
}