上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
 久しぶりのエントリです。三ヶ月ほど仕事が忙しく、ブログも中々更新が出来ない状況が続いていましたが、今週は割とまったりとしていたので、少しはまともな物を書こうと思います。(来週には来週の風が吹く)

そも、このブログはコミュニケーションツールというよりも、自分の思考結果を書き残しておく外部記憶装置として使っている側面が強いのですが、最近は考える事は山ほどにあるのに、ブログという形ではスワッピングのコストが高く機能不全に陥ってしまっている状況です。

そこでTwitterの登場です。ブログ、SNSに続くコミュニケーションツールとして盛り上がっているTwitterですが、同様にスワッピングコストの低い外部記憶装置としても使えるのではないでしょうか。

そう思い立ち、post to del.icio.us的なブックマークレットを探してみたのですが、これが意外とすぐには見つかりません。車輪の再発明も勉強としては歓迎するべきという事で、今回は自作してみる事にしました。

 完成のイメージとしてはブックマークレットを起動すると入力プロンプトが表示され、それに入力しOKを押すとプロンプトが閉じTwitterへの投稿が完了するというものです。ベースになる環境はFirefoxです。私自身がFirefoxユーザのため、先ずはFirefoxで動かない事には話しにならないからです。


 先ずはTwitterのコメント投稿画面を調べてみます。

Twitter/home

ここで「ページ情報→フォーム」を見るとstatusとcommitというnameでPOSTを使いTwitterサーバにコメントデータを送信している事がわかります。

GETでは無くPOSTのため少し面倒な事になりそうです。del.icio.usのようにGETであればJavascriptからURLを叩けば済む話なのですが、POSTではそういうわけにも行きません。

そこで先ず思いついたのが現在表示しているページにmethod=postのform要素を追加し、それを自動submitしてやるという方法です。



javascript:
if(status=prompt('post to Twitter')){
commit='Update';

f=document.createElement('form');
f.setAttribute('name','TwitterPostForm');
f.setAttribute('action','http://twitter.com/status/update');
f.setAttribute('method','POST');

s=document.createElement('input');
s.setAttribute('name','status');
s.setAttribute('value',status);
s.setAttribute('type','hidden');
f.appendChild(s);

c=document.createElement('input');
c.setAttribute('name','commit');
c.setAttribute('value',commit);
c.setAttribute('type','hidden');
f.appendChild(c);

document.body.appendChild(f);
document.TwitterPostForm.submit();
}



これをブックマークレット用に1ライナーへ整形して実行してみた所


Sorry, due to abusive behaviour, we have been forced to disable posting from external websites. If you are posting from an API tool, please ensure that the HTTP_REFERER header is not set.


というメッセージがTwitterから返ってきました。そういえばAPIが公開されていたという事をこの時点で思い出しましたが、それはさて置きどうやらAPI経由での投稿時にはリファラーを消せとの事。

API経由ではありませんがリファラを消せば動くかと試してみたのですが、どうやらFirefoxではJavascriptからリファラへのアクセスはエラーメッセージを見る限りだと読取専用で書き込みは出来ないようです。

仕方が無いのでブラウザ側の設定でリファラを全て送信しないようにしてみます。

Mozilla Japan ナレッジベース - リファラを無効にする

この状態で先ほどのブックマークレットを起動した所、無事に投稿に成功しました。

ただし、このままではブックマークレット内で使っている変数が現在表示しているページのJavascript変数を汚染してしまうため無名関数として実行させるようにします。


javascript:
(
function(){
if(status=prompt('post to Twitter')){
commit='Update';

f=document.createElement('form');
f.setAttribute('name','TwitterPostForm');
f.setAttribute('action','http://twitter.com/status/update');
f.setAttribute('method','POST');

s=document.createElement('input');
s.setAttribute('name','status');
s.setAttribute('value',status);
s.setAttribute('type','hidden');
f.appendChild(s);

c=document.createElement('input');
c.setAttribute('name','commit');
c.setAttribute('value',commit);
c.setAttribute('type','hidden');
f.appendChild(c);

document.body.appendChild(f);
document.TwitterPostForm.submit();
}
}
)();



続く
コメント
この記事へのコメント
コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL
この記事へのトラックバック
copyright © 2005 The elephant vanishes all rights reserved.
Powered by FC2ブログ.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。