インスパイア元:
Going My Way: ブログのエントリーへのコメントを Twitter に投稿できるボタン
http://kengo.preston-net.com/archives/003745.shtml
上記エントリでしてることは、ただのLinkを用意するだけだったので、
もうちょっとなんとかしたいなーってことで、Greasemonkeyの勉強も兼ねて作ってみました。
インストールはこちらから。
<div id="_cvt_twitterId" style="visibility: hidden;">hoge</div>
という要素が表示しているページに存在していると、ウィンドウ下部にTwitterへの投稿Formが出現します。
投稿ボタンを押すと、@hogeさんへの返信という形で、表示してるページのURLとともにコメントがTwitterへ投稿されます。
なので、この要素をまず、ブログ主なりサイト管理者なりが埋め込んでおかないと意味がないです。
この辺なんとかしたいんだけど無理かなぁ。
ちなみに、当ブログでは上記要素を埋め込んでいるのでこのGreasemonkeyをインストールすれば、Twitterへの投稿Formが出現するはずです。
Twitterへの投稿時の認証はブラウザによるBASIC認証なので、初回はID/PASSを聞かれると思います。
念のため、ソースコードも貼っときます。初Greasemonkeyなので、突っ込み大歓迎です。
ライセンスはNYSLです。
(追記) CodeReposにコミットしました。
http://svn.coderepos.org/share/lang/javascript/CvT/comment_via_twitter.user.js
// ==UserScript==
// @name Comment via Twitter
// @namespace com.mesolabs
// @description Comment via Twitter
// @include *
// ==/UserScript==
(function () {
var cvtElement = document.getElementById("_cvt_twitterId")
if (cvtElement) {
var form = //
<form action="#" id="_cvt_form">
Comment via Twitter: <input type="text" id="_cvt_text" />
<input type="button" value="投稿" id="_cvt_submit" />
</form>;
var div = document.createElement("div");
div.setAttribute("id", "_cvt_div");
div.innerHTML = form.toSource();
document.body.insertBefore(div, document.body.firstChild);
setStyle();
document.getElementById("_cvt_submit").addEventListener("click", submit, false);
}
function setStyle() {
var style =
<><![CDATA[
#_cvt_div {
font-family: Arial, Helvetica, "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", Osaka, "MS Pゴシック", sans-serif;
font-size: 14px;
color: #000000;
bottom: 0pt;
left: 20%;
right: 20%;
z-index: 255;
background-color: #9ACCFF;
position: fixed;
padding: 10px;
margin: 0px;
display: block;
opacity: 0.75;
}
#_cvt_text {
width: 500px
}
]]></>;
GM_addStyle(style);
}
function submit() {
var status = encodeURIComponent(
"@" + cvtElement.textContent + " (" + document.location.href + ") " +
document.getElementById("_cvt_text").value);
var url = "http://twitter.com/statuses/update.json";
document.getElementById("_cvt_text").value = "sending…";
GM_xmlhttpRequest({
method: "POST",
url: url,
data: "status=" + status,
headers: {
"Content-Type":"application/x-www-form-urlencoded",
"X-Twitter-Client": "Comment via Twitter",
"X-Twitter-Client-Version": "0.1"
},
onload: function(xhr) {
document.getElementById("_cvt_text").value = "send";
}
});
}
})();