« ネット世代と言っても、実はさらにその内部に世代があるのではないのか? | トップページ | サークルKの時報 »
2004.05.21
右クリックでトラックバック
たしか、ishinao さんところだったと思いますが(後でちゃんと調べます)、forefox 用のトラックバック送信用 MenuExt を見かけて以来、 Internet Explorer でも動くものが欲しいな、と思ってました。firefox 版そのままではうまく動かず、どうしたものか、ずっと悩みを抱えたまま2ヶ月以上経過。
今日、おはるさんの「トラックバックURLをボタンクリックでコピーする」を見て、 開発再開を決意。先日の「右クリックで cocohore!」でちょっとだけ増えたノウハウを元に、チャレンジしてみたところ、何とか動くものができましたので、 公開します。
少なくとも、trackback auto-discovery に対応している blog, Web サイトなら、ちゃんとトラックバックURLを取れると思います。
とりあえず、Movable Type 系、TypePad系、じゅげむ、Webryblog で動作を確認しました。
(追記: kyo さんの hail2u.net (blosxom) でも動作を確認。)
また、現時点では trackback auto-discovery 未対応なままの「楽天広場」についても、トラックバックURLを拾えるようにしてみました。
この「右クリックでトラックバック」を使えば、トラックバック送信機能のない Webサイトのオーナーでも、
トラックバックが打てるようになります。
トラックバックURLが見つけにくいサイトのトラックバックURLを発見するのにも使えると思います。
*** 2004年8月12日 13時31分 追記***
注意: miyagawaさんの「Trackback の脆弱性についての勧告」 にしたがってトラックバックSPAM対策を実施しているサイトに対しては、本スクリプトによるトラックバック送信が拒絶される可能性があります。 (特に「'User-Agent: Mozilla/.*' といったヘッダを持つ Trackback Ping は拒否する。」という対策を実施しているサイトでは、本スクリプトによるトラックバック送信は拒絶されると思われます。) そのような場合でも、本スクリプトはトラックバックURLを探し出すという目的で使用することはできます。 トラックバックの送信(がどうしても必要な場合)は別の手段で実行してください。
*** 追記 終わり ***
何か、不具合を発見された方は、連絡してください。可能な範囲で対応します。
(2004年5月21日22時57分 追記: Version 1.01 で Nucleus にも対応しました)
(2004年5月22日 2時28分 追記: Version 1.10 で NewsHandler にも対応しました)
(2004年5月22日14時25分 追記: Version 1.10 が「北国TV」にも対応していることを確認)
(2004年5月22日14時30分 追記: Version 1.20 で「はてなダイアリー」と Doblog にも対応しました)
(2004年8月12日13時25分 追記: はてなダイアリーが trackback auto discovery に対応したのを受け、Version 1.21 で「はてなダイアリー」用の特別な処理を外しました)
それでは、ソースコード、いきます。
右クリックでトラックバック
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=UTF-8">
<script type="text/javascript" language="JavaScript">
// 右クリックでトラックバック
// 現在閲覧中のページがトラックバック受入れに対応していれば、
// 右クリックでトラックバック送信フォームを開く
// (この MenuExt を使えば、トラックバック送信機能のない Webサイト
// からもトラックバックが送信できます)
//
// Copyleft 2004 by H.Tsujimura (tsupo@na.rim.or.jp)
//
// Ver 1.21 12 Aug 2004 はてなダイアリーが trackback auto-discovery
// に対応したのに伴い、はてなダイアリー用に書い
// ていた特別な処理をコメントアウトする
// Ver 1.20 22 May 2004 はてなダイアリー、Doblog に対応
// Ver 1.10 22 May 2004 trackback auto-discovery が body 部にある場合
// でも動作するようにした(WebryBlog と じゅげむ
// を特別扱いするのをやめた)
// Ver 1.01 21 May 2004 Nucleus にも対応
// Ver 1.00 21 May 2004 最初の公開バージョン
obj = external.menuArguments; // 右クリック時の引数のオブジェクトの参照
page_url = obj.document.URL; // 現在閲覧中のWebページのURL
title_txt = obj.document.title; // 現在閲覧中のWebページのタイトル文字列
// ↓ 個々人でカスタマイズする部分
var bname="サイト名"; // ← あなたのサイトの名前に書き換えてください
// ↑ 個々人でカスタマイズする部分
var pingUrl = "";
var str = "";
var inn = "";
// まずは、Trackbak Auto Discovery を試みる
str = obj.document.body.parentNode;
inn = str.innerHTML;
var ttIdx1 = inn.indexOf("rdf:Description");
var ttIdx2 = 0;
// head 部分に rdf:Description がある場合は、ttIdx1 >= 0 となる
if ( ttIdx1 == -1 ) {
// body 部分に rdf:Description がある可能性がある場合
// (WebryBlog, じゅげむ, NewsHandler, 北国TV など)
str = obj.document.body;
inn = str.innerHTML;
ttIdx1 = inn.indexOf("rdf:Description");
if ( ttIdx1 == -1 ) {
// なぜか Doblog の場合は -1 になってしまう → rdf 関連部分がコメントアウトの
// 形になってないのが原因?
ttIdx1 = inn.indexOf("RDF:DESCRIPTION");
// Doblog の場合、全部大文字だとちゃんとマッチする
}
}
if ( ttIdx1 >= 0 ) {
ttIdx2 = inn.substr(ttIdx1).indexOf("/>") + ttIdx1;
var ttStr = inn.substring(ttIdx1,ttIdx2);
if ( ttStr.length > 0 ) {
// Trackback Auto Discovery 対応 webページの場合
var i1 = ttStr.indexOf("trackback:ping");
var i2 = ttStr.lastIndexOf('"');
pingUrl = ttStr.substring(i1 + 16,i2);
}
}
if ( pingUrl == "" ) {
// Trackbak Auto Discovery でトラックバック送信先URLが取れなかった場合
var rakuten = page_url.match( "http://plaza.rakuten.co.jp/" );
// var hatena = page_url.match( "http://d.hatena.ne.jp/" );
if ( rakuten != null ) {
// 楽天広場の日記の場合
var a = obj.document.body.innerHTML;
var i1 = a.lastIndexOf('http://tb.plaza.rakuten.co.jp/');
var t = a.substr(i1);
var i2 = t.indexOf("</B>");
pingUrl = t.substr(0, i2);
}
// else if ( hatena != null ) {
// // はてなダイアリーの場合
// if ( page_url.match("#") != null ) {
// var i1 = page_url.indexOf("#");
// pingUrl = page_url.substr(0,i1) + "trackback";
// }
// else
// pingUrl = page_url + "trackback";
// }
else {
// “id="trackback"”なタグ近辺からそれっぽい URL を拾い出す
try {
var a = obj.document.getElementById("trackback");
var h2 = a.parentNode;
var t = h2.nextSibling;
var targetString = t.innerHTML;
var idx = targetString.lastIndexOf("http");
if ( idx >= 0 )
pingUrl = targetString.substr(idx);
}
catch (e) {
;
}
if ( pingUrl == "" ) {
// trackback.php とか trackback.cgi とかを拾ってみる
// (Nucleus はこの方法で対応できる)
var a = obj.document.body.innerHTML;
var b;
var idx = a.lastIndexOf("trackback.php");
if ( idx == -1 )
idx = a.lastIndexOf("trackback.cgi");
if ( idx == -1 )
idx = a.lastIndexOf("trackback.pl");
if ( idx >= 0 ) {
for ( ; idx >=0; idx-- ) {
b = a.charAt(idx);
if ( b == '"' )
break;
}
if ( b == '"' ) {
str = a.substr(idx + 1);
idx = str.indexOf('"');
pingUrl = str.substr(0, idx);
}
}
}
}
}
if ( pingUrl.length > 0 ) {
var html = "<html>\n<head>\n<meta http-equiv=\"Content-type\" content=\"text/html; charset=utf-8\">\n<scr" +
"ipt type=\"text/javascript\">\nfunction func(" +
"){\ndocument.tbform.action=document.TBurl.tburl.value;\n}\n</sc" +
"ript>\n</head>\n<body>\n<form action=\"" + pingUrl +
"\" \nmethod=\"POST\" enctype=\"application/x-www-form-urlencoded\" name=\"tbform\">\n" +
"トラックバックを送ろうとしている記事: <br> 題名: " +
title_txt + "<br> URL: " +
page_url +
"<br>\n<hr>\nあなたのサイト名<br><input type=\"text\" name=\"blog_name\" value=\"" + bname + "\" size=\"80\">" +
"<br>\nあなたの記事のタイトル<br><input type=\"text\" name=\"title\" value=\"\" size=\"80\">" +
"<br>\nあなたの記事のurl<br><input type=\"text\" name=\"url\" value=\"\" size=\"80\"><br>\n" +
"あなたの記事の梗概<br><input type=\"text\" name=\"excerpt\" value=\"\" size=\"80\"><br>\n<input " +
"type=\"submit\" value=\"TrackBack\">\n</form>\n<form name=\"TBurl\">\n相手の記事のtrackback用" +
"url\n<input name=\"tburl\" type=\"text\" value=\"" + pingUrl +
"\" size=\"80\" onchange=\"func(" +
")\">\n</form>\n</body>\n</html>";
win = window.open("","name","scrollbars=no,width=540,height=480,left=100,top=150,status=yes");
win.document.write(html);
win.document.close();
win.focus();
}
else
alert("トラックバック送信先URL を取得できませんでした");
</script>
例によって、設置の仕方は、他の MenuExt を参考にしてください。
*** 2004年5月22日 3時50分 追記 ***
まだ、このスクリプトの元となった firefox版、どこにあったのか、見つけられないでいます。
とりあえず、(私にとって)そもそもの発端になった記事は見つけましたので、それを紹介しておきます。
- TrackBack Ping URL自動検索フォーム
参考にしたのはこの記事かな? と思って読んでみましたが、違いました。
この「TrackBack Ping URL一覧取得API」を呼び出すツールを作った方がよかったかな。 - 他人によるTrackBackのための拡張
この記事が発端。で、この記事の続きがどこかにあったと思うんですが、見つかりません。 - 第三者によるトラックバックの有効活用
上記記事に対して、私が書いたトラックバック記事。 - htmlによるTrackBackクライアント実装
今回私が作った「右クリックでトラックバック」と、ある意味かぶってますね。微妙に用途が違いますが。 - PingProxy α版
直接参考にしたわけではありませんが、関連記事、ということで。
「はてなダイアリー」へのトラックバック送信対応は、もう少しお待ち下さい。いったん寝ます (^^;
にも対応しました。Doblog にも対応(Doblog の場合は、最初に見つかったトラックバックURLになります)。
*** 2004年5月25日 10時59分 追記 ***
結局、「このスクリプトの元となった firefox版」のあった URL、見つからないままです(元にしたとはいっても、
全然別物に作り変えてしまっているんですが)。でも、さらに大元になったのではないかと思われるものを発見しました。
firefox 用じゃなくて Sleipnir 用だし、MenuExt じゃなくて Bookmarklet なんですが、
Trackbak URL を取得する部分のソースコード、変数名も含めて「このスクリプトの元となった firefox版」とそっくり。
たぶん、この「tDiary Bookmarklet」が大元なのでしょう。
さらに、上記と同様な
“for tdiary bookmarklet (Only ie5-/NN6-/Moz)”
を発見。っていうか、こっちが本当の大元?
一方、トラックバック送信フォーム自体は、
を参考にしています。さらに、“ManualTrackBack (もしくは Manual Trackback)”を経て、 「個人サイト間コミュニケーション」に遡れるようです。
結果的に、私が作ったスクリプトは、Drifting Antigone Frontline さんの、
手動トラックバック
と
for tdiary bookmarklet (Only ie5-/NN6-/Moz)
を合体させたようなもの、になったようです。車輪の再発明ですね。orz
同じようなことを考えている人は、遅かれ早かれ、同じような結論に到達するということを、改めて確認しただけなのかなぁ。
でも、まぁ、今回作成したスクリプトは全然無駄ではないと思います。トラックバックURL を拾える blog や日記も増えてますし。(^^;
とりあえず、ルーツを求める旅は、ここでいったん終了とします。
上記以外に、何か情報をお持ちの方がいらっしゃいましたら、連絡してください。よろしくお願いします。
*** 2004年7月3日 6時13分 追記 ***
何か新しい展開があるかもしれないので、注目。
投稿者: tsupo 2004.05.21 午後 10:06
| 固定リンク
|
|
| ![]()
|
|
アマゾンわくわく探検隊
トラックバック
この記事のトラックバックURL:
この記事へのトラックバック一覧です: 右クリックでトラックバック:
» 右クリックでトラックバックをゲット from あそびをせんとやうまれけむ
様々な「右クリックで~」をリリースしている「観測気球}さんから、今度はトラックバックURLをゲットするものがでました。 この「右クリックでトラックバック」を使え 続きを読む
» 右クリックでトラックバック送信 改定版 (暫定リリース) from 観測気球 プロ
trackback auto-discovery に対応していないいくつかの blog ツールについて、trackback 送信用 URL を取得できるようにしてみました。 続きを読む
コメント
素晴らしいスクリプトですね。便利です。
このアルゴリズムを用いて
記事のURLリストから、そのURLに対する
トラックバックURLのリストを作成する
プログラムは無いのでしょうか?
投稿者: 飯島啓介 (2006.01.29 午後 01:40)



