TwitterAPIを用いてJavaScriptでtwitterに投稿する

重要 このスクリプトは2010-06-30をもって利用できなくなります。

TwitterAPIをJavaScriptから扱うスクリプトがあります。

これをTwitterに投稿する部分だけに限定させてシンプルなスクリプトを作りました。

修正した点

前述したように投稿部分だけに限定しました。そのため、ただのメソッドだけに改造しました。あと、これはなくても大丈夫なような…?という部分もカットしました。もしかしたら変になっているかも知れません…(一応動作確認はとってあります)

Google Chromeにおいて文字化けがおこっていました。この問題はformにAccept-charset="utf-8"という属性を与えることで解決しました。

TwitterAPI.jsではHTMLをそのまま書き込んでいたのですが、個人的趣味でDOMでformを書くようにしました。ただbodyを書くところだけIEでうまくいかなかったのでdocument.writeで加えてます。

ソース

MITライセンスが適用されます。ライセンスの作法をよく知らないので表示が間違っているということであれば教えてもらえますとありがたいです。

/* Copyright (c) 2010 Aont
 * This source file is subject to the MIT license.
 * http://d.hatena.ne.jp/aont/
 * 
 * This source is a modification of TwitterAPI.js
 * Copyright (c) 2010 Otchy
 * http://www.otchy.net
 */
function postwi(status) {
	var d=document;
	var i1=d.createElement('iframe');
	i1.style.display='none';
	d.body.appendChild(i1);
	var tid;
	if(/*@cc_on!@*/false){
		tid='_self';
		setTimeout(function() {
			d.body.removeChild(i1);
		},5000);
	}else{
		tid='TwitterApiID';
		var i2 = d.createElement('iframe');
		i2.name=tid;
		i2.style.display='none';
		d.body.appendChild(i2);
		if(navigator.userAgent.indexOf('Firefox')>=0){window[tid+'flg']=true};
		var onunload = function(){
			if(window[tid+'flg']){delete window[tid+'flg'];return;}
			setTimeout(function() {
				d.body.removeChild(i1);
				d.body.removeChild(i2);
			},500);
		};
		var w2=i2.contentWindow;
		if(w2.attachEvent){
			w2.attachEvent("onunload",onunload);
		}else{
			w2.addEventListener("unload",onunload,false);
		}
	}

	d=i1.contentWindow.document;
	d.open();
	d.write(unescape("%3Cbody%3E%3C/body%3E"));
	d.close();
	var iform = d.createElement("form");
	iform.id="iform";
	iform.method="post";
	iform.action="https://twitter.com/statuses/update.xml";
	iform.target=tid;
	iform.setAttribute("Accept-charset","utf-8");
	
	var ist = d.createElement("input");
	ist.type="hidden";
	ist.name="status";
	ist.value=status;
	iform.appendChild(ist);

	d.body.appendChild(iform);	
	iform.submit();
}

使用方法はpostwi(つぶやき);という感じです。リプライ元指定とかもinputを増やせば出来ますが、今回はしていません。要望があればお作り致します。
動かなければご連絡ください。
Chrome4.1/Firefox3.6/IE8で動作確認してあります。