はてなキーワード: BookMarkとは
SEOに興味あって、「SEO対策」でググって1位か2位くらいにでるSEO業者がはてブのリンクを被リンクとして売ってる件。
ブログ掲載とSBM登録で貴サイトに確実なバックリンクをご提供します
「はてな」や「@niftyクリップ」などのソーシャルブックマーク(Social Bookmark)26サイトへ登録しまっす!海外のSBMも入っており、SEO効果はかなーりあります。もちろん『nofollow』タグもきっちり確認済みですので、SEO効果はバッチリ♪
はてブって商用利用OKなのか?と思って利用規約見たら第6条(禁止事項)http://www.hatena.ne.jp/rule/ruleに
3・ユーザーは、本サービスを利用するに際し、以下のような本サービス利用上不適切な行為を行ってはなりません。
1. 宣伝や商用を目的とした広告・勧誘その他の行為。ただし、当社が各サービスのヘルプに別途定める場合はその限りではありません。
ってあった。これに該当するっぽい。SEO業者ってみんなこんなんなの?
「登録しまっす!海外のSBMも入っており、SEO効果はかなーりあります」という言葉遣いが気になって仕方ない。
link:で確認したらかなりの数の無料ブログで記事書いてリンクしてた。SEOっていい商売なのな。
とりあえずリンク売買みたいだし、Googleに通報してみた。
【3月11日 追記】
そういやこの前、Googleのトップページのページランクが下がる事件(?)がありましたが、あれはこの「ブログ」にまつわることですわなぁ・・ ま、ブログに限らずSEO目的のリンク売買とゆー、それがGoogle自身があかんと言っていて、それをやったためであります
【3月12日】
ブコメでサイトの情報が変更されている事に気が付いた。これはフリだと思う。
だから応える為にYahoo!のキャッシュを画像化して確認できるようにした。
tailtameさん 画像thanx
Kenta_Kさん そだね。正解。
sasahiraさん thanx
islecapeさん そのうちなるかもしんない。
ululunさん はてブはnofollow無いけどbuzzurlはあるし、意味不明っすね。
udyさん GJ
fujiyoshisyoutaさん そなんだ。昔と変わらないんだ。SEO業界が成長してないってこと?
daddyscarさん この業者、そんな儲かってないっぽいから違うと言っておく。
pen_pen_gusaさん 魚拓ないかな?
alshine5さん はてなの中の人が見つけて判断すべき事だと思ってるけど様子見て通報する予定。
IDコールしても返事がないと思ったら、
idコールは見ていないんですよ。ごめんね。
とか言ってる人がいる。他の人もそうなの?
100文字だろうがなんだろうが、ネットに書きものを公開しているんだから、ちょっとは表現者の責任というものを考えたまえ。
自らコミュニケーションの可能性を捨てていると思わないか? もしその相手が可憐なotsune……あいや乙女だったらどうする!? 何という機会の逸失!
わかったね? ちゃんと連絡を取れるようにしてくれ。していただきたい。してください。
* * *
コールは無効なのでしない。そういうわけで見てもらえるかどうかわからないけど以下返信
maname 私はIDコール見てるよ。そして絶対届くものだとして使ってる。ただ、はてなはスターやTBなどメールを使いすぎて価値を下げてしまったので使わなくなった人がいてもおかしくない。 2009/02/16
「使いすぎて価値を下げてしまった」ってのは可能性大。気楽すぎるはてな文化。
magician-of-posthuman ダブルコンティンジェ, # |ω・? )・・・ IDコールもメールもトラックバックも送信するけど、「相手が読むこと」や「相手が返信すること」は前提にしていない。「相手が読む可能性」や「相手が返信する可能性」なら話は別だが。 2009/02/16
KoshianX 俺も届くものだと思ってるな。無視されるか反応されるかは別として。/というか届かないものであるならあるでもうちょい違う見せ方あっていいと思うんだがなあ 2009/02/16
はてなメッセージにプライベート的側面が強いから、公開するわけにもいかないのかな。
islecape はてな 連絡いただければなるべく早く対応するようにしてます。IDコールが通じないうえにブログもメールアドレスもない人にはどう連絡をとったものか。 2009/02/16
ブックマークページにメールアドレスとか書く欄があったら……いや、あっても書くとは限らないか。
ryokusai hatena, communication 返事を求めてないといふか返事のしやうがないものが多いので。返事のしやうがあるものはなるべくしてる。気が向いたらだけど。 2009/02/16
「返事のしやうがない」というのはわからないでもない。それでいいと思う。
welldefined しばらく使ってなかったんでidコールの見方が思い出せなかった。丁度さっき見たら色々はいってました。ネグレクトしてしまった方すみません。 2009/02/16
analogdevicez この前idコールされてびっくりした。idコールされるような駄洒落をひねり出したいなあ。 2009/02/16
スターをもらう、じゃなくて?
kanimaster はてブ, communication idコールされて見に行くと、とっくにコメントが消えていてどの話題なのかわからないことが多い。そういう人はむやみにコールしないでほしいと最近思っています。 2009/02/16
t298ra anond, はてなブックマーク 手前味噌だけど自分の記事を関連エントリとして、つ(アドレス) 2009/02/16
拝読しました。書き直しで再送されないというので一安心。「つ」って何?
kowyoshi はてな, 増田 たまにコールされるけど、どう返事していいのか困るのばかり…/つか返事する文字数足りなくなる 2009/02/16
百字は短いよね。「続きはメタブで」とかやったら怒られるかな?
むしろそっちを確認しているほうが珍しいと思うよ!
ekken ekken, communication はてなメッセージはノイジーなんですよ。アホ臭くて読む気にならない。RSSで配信されれば楽なんだが。 2009/02/17
有名人だとそうなるのかな。ブログがある人はそっちに連絡する。
kurokuragawa はてな, はてなブックマーク, コミュニケーション 乙女からのメールなんて都市伝説です 2009/02/17
y_arim anonymous, communication, hatena bookmark 「一日10件くらいIDコールが飛んできて半分くらいは罵倒」と書いたけど、何のことはない、自分が1日10件以上IDコールしており半分以上が罵倒ですね。 2009/02/17
むしろそれを望んでない?
使い始めのころはわりとおっかなびっくりだった。
nekora 「スターなんとか」って、変な文字化け添付ファイルの付いたメールが毎日来るばかりなのでOFFにしたまま。 2009/02/17
スターレポートだけ来ないようにすることもできるよ! はてなメッセージ設定をチェック!
mike_n はてな はてなメッセージって受け取るのに設定要るんでしたっけ。自分で設定した覚えがない(^^;;/(IDコール)feather_angel なる。てーことは、IDコール見てない人ってメールチェック自体してないのかな。 2009/02/17
lameduck うじゃうじゃ 場合によるとしか 2009/02/17
そう、場合による。ただいちおう見るだけはみてほしいわけ。
namex hatena, communication 「乙女からのidコールしか受け付けない」に設定した。 2009/02/17
そんな隠し機能があるとは知らなかった! どうやって?
angmar 応答を前提としたシステムならそれなりに設計がされてるはずだろうしそうでない以上、ブクマ同様強制力の弱い機能だと思ってるけど 2009/02/17
明白な間違いとかを指摘したいことがあるので、確認くらいしてほしいと思う。
feather_angel (IDコール):mike_n>デフォで登録メアドに届く事になっているはず(追記)えっけんさんがそのパターンと思われ/IDコールはするけど答えはなくても仕方ないかなと思っているし自分も答える必要はないと思ったら返事はしない 2009/02/17
不確実性が周知される必要があるのか、利用する側で確実なものにしてくかってことだと思う。今回のエントリは後者の立場で。あんまり周知にはなってないけど。
nkoz お返事差し上げるかどうかは別ですが、今のところみてはいますね 2009/02/17
続けてください。
emiladamas はてなメッセージを使わない→憶えない→使わない→憶えない→ふと、思い出して確認→来てた、十日も前に(今、ここ) 2009/02/17
メールと連動してる?
sichimin 増田 ブコメでidコールされてるのに通知が来なかった事があったんだけど・・・。その前後にされたidコールでは通知きてるんだけど。こんなもんかと思ってたけど、俺だけ? 2009/02/17
確かにはてなメッセージ自体の不調って可能性もあるんだよねえ。
raf00 はてなからのメッセージは専用アドレスに飛ばしてる。だからもれなく確実に受け取っています。返答に詰まることはありますが・・・。 2009/02/17
うん。返答につまることはある……。
feita どんな反応でも自分のした動作に対する反応なら、ヘブン状態になれるコミュ童貞の俺は毎日チェックしてますよ^^ 2009/02/17
可能であれば増田から三十回くらいコールするところだけど、気持ちだけで勘弁して。
suVene 相手のブログのコメント欄すら、相手が見てない可能性を常に考える。逆に、自分に対する応答はほぼ全てみている!つもり。 2009/02/17
コメント欄も? それはちょっと一歩下がりすぎじゃないかな、トラバならともかく……。
Ryuzu hatena ハジメテIDコールされたときは、はてなの中の人から怒られたのかと思ってびびりました(・∀・;) 2009/02/17
あー、そういえばそうだったかもしれない。
guldeen anond, bookmark, hatena, communication んー、ブクマ群の中で、第3者が見て判るように完結していれば、それでオシマイって感覚ですけどね、自分は。 2009/02/17
steam_heart 他人がどう取るかはあてにしてないけど、メッセージは携帯に飛ばしている。って今度から「見てませんでした」使えないじゃんかー。 2009/02/17
……そうだよなあ。
これからもコールしていく所存。でも、別の連絡手段についてもも考慮したほうがいいかも。とりあえずRESは以上。
ほか、ブックマークをしてくださった皆さん、「可憐なotsune」にスターをくれた皆さん、どうもありがとう。otsuneさんごめんなさい。
初増田
笑いって難しい。
言葉の取捨選択、
場の雰囲気、
誰が言うのか、
誰に言うのか…。
皮肉は特にムズイ気がする。
(自分の頭の悪さに起因する面も多いんだけど、そこは棚に上げて)
少し、頭よさげな笑いだからかな。
誰が誰に言うのかはでかいな。
テレビで大橋巨泉が出てくるとチャンネル変えたくなる、みたいな。
ただし、皮肉を言ってるんだけど、皮肉になっていないという、馬鹿にした笑い。
困ったのはサヨ系の皮肉。
意見、批判じたいはたいてい納得できるんだけど、
皮肉が下手な面白くない人が書いているとイラッとする。
そういう書き方しかできないのかな。
オモローない人って、だいたい、ブコメしか書かない人が多い気がする。
追記
mangakoji 『皮肉が下手な面白くない人が書いているとイラッとする。』つまり、あなたに対する皮肉が成功してる。ということですね。わかります
結構、好きな皮肉かも。
knnn4321r ネタ, はてな 確かに、皮肉って相手によって受け取られ方が違うので難しいと思う。リo´ゥ`リ<極東ブログが楽しみ☆カナ?
あまり、極東ブログは好きくないです。
chnpk これ批判じゃなくてただの感想だよな。
ほんとだ。
bunoum 増田 よく知られた誰かが文体からの特定を避けるためにわざと拙い文章で書いているように見える
味わい深い皮肉だな、好きだな。
shidho 増田, はてな, bookmark, communication 正直誰のどのブコメが皮肉なのか自分にはさっぱりわからないので、面白くない皮肉があるわかる増田はとても読解力のある人だと思う。
嫌いじゃないな、この皮肉。
jt_noSke "オモローない人って、だいたい、ブコメしか書かない人が多い気がする。" おもろいダジャレコメントしか書いていない僕の存在を忘れてもらっては困る
この人好きくない。ダジャレは嫌いじゃないけど、この人のはかなり不快にさせる。
nanahusi 馬刺し食え。頭よくなるらしいぞ。あと鹿の肉も。
あまりおもしろいとはおもえないけど、イラッとはしない。
angmar 皮肉って、それと気づかなければそのまま素直に受け取ってしまうものだと思うんです。だから、面白い皮肉に気づいていない増田さんは、心がひねくれていないとても純粋で素直な人なんじゃないかな、そんな気がします
daihx Webネタ ブックマークのコメントに対して(他人が)読むべき内容を要求するってのも不思議な感じ//ブクマコメントでよっぽどのなにか触れられたんだろうか
確かに、不思議だねえ。"ブクマコメントでよっぽどのなにか触れられたんだろうか"←それはないです。
gnt 皮肉屋ジョニー, 釣り?, DIS, ってんのかメーン?, クリリンのことかー! それはお前の感情なんだからお前の名前で言わないと意味無いよなヘタレチンカス野郎(皮肉禁止らしいので下ネタで
優しい皮肉。おおー、確かに。ご指摘ありがとう。ただ、チンカスはついてないです。
y_arim 増田でしか書かないお前(お前のことなんぞ知らんからいくらでも邪推できる)よりナンボかマシだと思うが。トイレ篭ってぼそぼそ呟いてねえで出てこいや、紙はねえぞそこ。
これは最上級の皮肉と読み取れば、一番の出来だと思う。あふれる優しさなら、存在そのものが皮肉です。スバラスィー。
結局、イラッとする皮肉屋さんは来なかったみたい
弱いものたちが夕暮れー さらに弱いものを叩くー
その声が響き渡ればー はてブは加速していくー
見えないお前が憎くてー
みんなでDISを書きまくるー
早く言い訳を聞かせておくれよー!!
ロマンティックなブコメにー あなたのスターがほしいー
見えないお前が憎くてー
みんなでDISを書きまくるー
早く言い訳を聞かせておくれよー!!
Bookmark!伸びてゆけー!Bookmark!どこまでもー!
Bookmark!伸びてゆけー!Bookmark!どこまでもー!
Bookmark!伸びてゆけー!Bookmark!どこまでもー!
Bookmark!伸びてゆけー!Bookmark!どこまでもー!
あなたがブコメしているほうがー ヲチが楽しくてしょうがないー
見えないお前が憎くてー
みんなでDISを書きまくるー
早く言い訳を聞かせておくれよー!!
Bookmark!伸びてゆけー!Bookmark!どこまでもー!
Bookmark!伸びてゆけー!Bookmark!どこまでもー!
Bookmark!伸びてゆけー!Bookmark!どこまでもー!
Bookmark!伸びてゆけー!Bookmark!どこまでもー!
やらしさも汚らしさもー むき出しにしているのが痛すぎるー!
だから僕はブコメするんだよー 精一杯ヒネリいれてー
見えないお前が憎くてー
みんなでDISを書きまくるー
早く言い訳を聞かせておくれよー!!
Bookmark!伸びてゆけー!Bookmark!どこまでもー!
Bookmark!伸びてゆけー!Bookmark!どこまでもー!
Bookmark!伸びてゆけー!Bookmark!どこまでもー!
Bookmark!伸びてゆけー!Bookmark!どこまでもー!
修正:いい加減&が変換されるのを何とかしてほしい
解説:Hatena::Bookmark::24H(http://hatebu24h.ashitano.in/)に、トップエントリの獲得したブックマーク数の推移のチャートを加えます。
// ==UserScript== // @name chart of Hatena::Bookmark::24H // @namespace http://anond.hatelabo.jp/ // @include http://hatebu24h.ashitano.in/* // ==/UserScript== var url = unescape("http://chart.apis.google.com/chart?chs=160x60%26cht=ls%26chd=t:"); url = url + $X("//div[@class='clocktxt']", Array).map(function(s){return s.firstChild.nodeValue}).join(","); //var id = $X("//h3/a/@href")[0].nodeValue; //url = url + $X("//div[@class='entrytitle' or @class='entrytitle2'][.//a[@href='"+id+"']]/../preceding-sibling::div[1]", Array).map(function(s){return s.textContent.match(/\d+/)}).join(","); var before = makeElements({ nodeName: "div", className: "sidebox", childNodes: [{ nodeName: "div", className: "sidetitle", innerHTML: "Recent top entry chart" },{ nodeName: "div", className: "sidetitle", childNodes: { nodeName: "img", src: url } }] }); var after = $X("//div[@class='sidebox']", Array)[0]; after.parentNode.insertBefore(before, after); // util // var 0.01 function makeElements(obj) { if (typeof obj != "object") return document.createTextNode(obj); if (obj instanceof Array) return obj.map(makeElements); var node = document.createElement(obj.nodeName); delete obj.nodeName; if (obj.childNodes) { [].concat(makeElements(obj.childNodes)).forEach(node.appendChild, node); delete obj.childNodes; } function extend(dst, src) { for (var i in src) { if (typeof src[i] == "object" && dst[i] && typeof dst[i] == "object") extend(dst[i], src[i]); else node[i]=obj[i]; } } extend(node, obj); return node; } // by http://lowreal.net/blog/2007/11/17/1 // $X(exp); // $X(exp, context); // $X(exp, type); // $X(exp, context, type); function $X (exp, context, type /* want type */) { if (typeof context == "function") { type = context; context = null; } if (!context) context = document; var exp = (context.ownerDocument || context).createExpression(exp, function (prefix) { var o = document.createNSResolver(context).lookupNamespaceURI(prefix); if (o) return o; return (document.contentType == "application/xhtml+xml") ? "http://www.w3.org/1999/xhtml" : ""; }); switch (type) { case String: return exp.evaluate( context, XPathResult.STRING_TYPE, null ).stringValue; case Number: return exp.evaluate( context, XPathResult.NUMBER_TYPE, null ).numberValue; case Boolean: return exp.evaluate( context, XPathResult.BOOLEAN_TYPE, null ).booleanValue; case Array: var result = exp.evaluate( context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); var ret = []; for (var i = 0, len = result.snapshotLength; i < len; i++) { ret.push(result.snapshotItem(i)); } return ret; case undefined: var result = exp.evaluate(context, XPathResult.ANY_TYPE, null); switch (result.resultType) { case XPathResult.STRING_TYPE : return result.stringValue; case XPathResult.NUMBER_TYPE : return result.numberValue; case XPathResult.BOOLEAN_TYPE: return result.booleanValue; case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: { // not ensure the order. var ret = []; var i = null; while (i = result.iterateNext()) { ret.push(i); } return ret; } } return null; default: throw(TypeError("$X: specified type is not valid type.")); } }
たまにブックマークで「コメント比較」とかいってブックマークページのURLを書いてる人を見かけたのでちょっと書いてみる
通常、はてなブックマークのブックマークページのURLは元URLをそのまんま後ろにくっつけただけのものである。
元のURLが短ければまだいいが、これがWikipediaとかになると、とんでもなく長くなる。
ここで、eidを使えばWikipediaように長いURLでも
のように縮めて書くことができる
さらにはてな記法を使えば
のようにさらに短縮できる。8桁必要なので7桁以下だと前に0を追加する必要があるが
さて、このeidを知る手だが、一番手っ取り早いのは各ブックマークページの右下の「利用規約違反を通知する」のリンク。ここのURLのeid=以降の数字がeidとなる
ほかにも、各人のアイコンの隣のid名のリンクからも知ることができる。(bookmark-以降)
http://b.hatena.ne.jp/[ユーザID]/20081220#bookmark-6098346
はてなアイデア - 長いタイトルだと途中で切れてしまうので、title要素にタイトル全文を含めて、マウスオーバーでポップアップするようにしてほしい。
を受けて、
[Patterns] Name = "[hatena bookmark] title attribute -> midashi" Active = TRUE URL = "b.hatena.ne.jp/" Limit = 1024 Match = "<a\1title=$AV(([^\"]+)\2)([^>]+)\3>[^<]++\.\.\.</a>" Replace = "<a\1\3>\2</a>"
http://b.hatena.ne.jp/entrylist?url=http://takagi-hiromitsu.jp/
アンカー付きURLが二つに分かれてる。上の方のエントリーページに行けない。下のページになっちゃう。
リニューアル前は、entrylistのソースみたら数字(eid)が書いてあって、http://b.hatena.ne.jp/entry/eidでなんとか追えたんだよね。
今は無理。まさしく開かずの扉。
お気に入りのアイコンが表示されてたら、そこを辿っていけばかろうじてエントリーページ行けるかな。お気に入りの人のページのソースみればid=bookmark-eidってあるはずだし。
http://b.hatena.ne.jp/entry/10990263
entrylistでブクマして、自分とこでソースみてeid調べりゃできた。
芋の人が丁寧に相互リンクしてくれとる。
はてなブックマーク - 【告知】MakeYourDayは近日中にサービス停止します。 - 無用の科学あるいは錬金術の「正直うれしい」なんていうブコメ見て思い出したが、http://b.hatena.ne.jp/entry/~の「このエントリーを含む日記」で、先のツールを用いたと思われる投稿を見て、がっくり来た印象が強い。しかも一度見たidの人は以後も同じような重複したコピペ投稿を繰り返す傾向が高かったので、Hatena Bookmark clipping site removerに突っ込みまくったものだ。
「ゴミエントリ量産するな」などと強制するつもりは毛頭ないが、せめて薄いエントリくらいは排除してくれないかなあ>「このエントリーを含む日記」
http://b.hatena.ne.jp/auto-bookmark-agent/
http://b.hatena.ne.jp/entry/http://www.web2-labo.com/post_123.html
http://b.hatena.ne.jp/entry/http://tuhantype.web.fc2.com/type/humidifier/
http://b.hatena.ne.jp/entry/http://tuhantype.web.fc2.com/type/shaver/
http://b.hatena.ne.jp/entry/http://tuhantype.web.fc2.com/type/1dibori/
http://b.hatena.ne.jp/entry/http://www.auctionassistant.jp/
http://b.hatena.ne.jp/entry/http://affiliateland.blog52.fc2.com/blog-entry-181.html
自動化はいいけど、もうちょっと精度上げてね。
http://anond.hatelabo.jp/20080823075056のブックマークから、id:hokusyuの知り合いでもあるid:y_arimのコメント。
2008年08月23日 y_arim anonymous, 脳の失敗 ←おすすめタグでこれが出ているぞ。/まあ、良識なんてものを担っている覚えは、ぼくに関する限りかけらもない。「左翼の罵倒は汚い罵倒」なんて考え方のほうがヤだね。で、「id:ruletheworldの罵倒はきれいな罵倒」か?
http://b.hatena.ne.jp/entry/http://anond.hatelabo.jp/20080823075056
id:hokusyuの使うタグやコメントには抵抗が無いみたいだだし、自分でも似たようなコメントもしてる。
2008年08月20日 y_arim 揉め事 id:hokusyuの罵倒タグに磨きがかかってきて楽しいのだけど疲れるだろうなあいい加減。あと[はてなタックル]が地味に好き
http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/HALTAN/20080819/p1
そんなid:y_arimでも怒ることがあるみたい。
2008年08月05日 y_arim blog, rss, web カテゴリ別・タグ別にRSSって吐かないんだっけ?ブログサービスによるか。ちなみにぼくはb:id:kanoseの「不思議」「野次馬」タグをRSS購読してる/id:xevra お前いい加減にしろよ。
http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/kanose/20080805/entrycategory
「いい加減にしろよ。」と言われたid:xevraのコメントは、どんなすごい物かと思ったらこれです。
2008年08月05日 xevra 日本人の20人に一人はメンヘル。1万人読者がいれば500人のメンヘルの監視下に置かれる。この覚悟が無いとブログはきつい
http://b.hatena.ne.jp/entry/http://d.hatena.ne.jp/kanose/20080805/entrycategory
良識をもった人であれば眉をひそめる内容かもかもしれませんが、そんなものとは縁遠いと自称するid:y_arimなら気にもしないような気もしますがそうではなかったようです。キモくて不快であるがゆえにこのコメントはすばらしいとはいかなかったみたい。メンヘルがダメだったんでしょうか。「脳の失敗」はいいのに。
(以下追記)
2008年08月24日 y_arim anonymous, hatena bookmark, tag これ見ろ。id:hokusyuなど比較にならぬid:xevraの糞っぷりが読み取れる→ http://b.hatena.ne.jp/xevra/?word=%E3%83%A1%E3%83%B3%E3%83%98%E3%83%AB あと「脳の失敗」タグのオリジネイターであるid:ruletheworldは死ねばいいと思うよ。
http://b.hatena.ne.jp/entry/http://anond.hatelabo.jp/20080823210154
他人のせいにするコメントが見苦しく感じた。b:id:y_arimの書いたものについてのエントリーへのコメントで、b:id:xevraとb:id:ruletheworldを引き合いに出して責任逃れをしようとでもいうんだろうか。b:id:hokusyuならこんなことをしないだろうと思った。単なる印象だけど。
ついでに単なる印象で言うと、今度なんかあったらb:id:hokusyuのせいにして言い逃れをするかも。
結局概要表示機能追加した。unsafeWindow使いまくり。大丈夫かいな。
// ==UserScript== // @name Hatena Bookmark Tree Expander // @namespace http://anond.hatelabo.jp/ // @include http://b.hatena.ne.jp/entry/* // ==/UserScript== // <div class="info"> // <ul id="similar_entries" class="bookmarklist"> // <li></li> // </ul> // </div> // <div class="info"> // <ul id="referred_entries" class="bookmarklist"> // <li id="referred-entry-\d+"></li> // </ul> // </div> // <div class="info"> // <ul id="relation_diary" class="bookmarklist"> // <li id="diary-{id}-\d+"></li> // </ul> // </div> (function() { function main() { loadBookmarkCommentViewer(); similar.prototype.rootAppend(); referred.prototype.rootAppend(); } function HBTM(target) { this.target = target; this.targetXPath = "//ul[@id='"+target+"']/li"; this.targetRegExp = new RegExp('<ul id="'+target+'"(.|\\s)*?</ul>'); } HBTM.prototype = { openIcon: '<img width="15" height="15" class="icon" style="opacity: 0.6" src="http://anond.hatelabo.jp/images/common/open.gif"/>', closeIcon: '<img width="15" height="15" class="icon" style="opacity: 0.6" src="http://anond.hatelabo.jp/images/common/close.gif"/>', loadingIcon: '<img width="13" height="13" class="icon" src="http://anond.hatelabo.jp/images/common/loading.gif"/>', commentIcon: function(url) { return '<img class="hatena-bcomment-view-icon" src="http://r.hatena.ne.jp/images/popup.gif" onclick="iconImageClickHandler(this, \''+url+'\', event);">' }, create: function() { this.comment = document.createElement("span"); this.comment.innerHTML = this.commentIcon($X("string(descendant::a/@href)", this.node).value()); this.open = document.createElement("a"); this.open.href = "javascript:void(0)"; this.open.innerHTML = this.openIcon; this.close = document.createElement("a"); this.close.href = "javascript:void(0)"; this.close.innerHTML = this.closeIcon; this.close.style.display = "none"; this.loading = document.createElement("span"); this.loading.innerHTML = this.loadingIcon; this.loading.style.display = "none"; this.node.appendChild(this.comment); this.node.appendChild(document.createTextNode(" ")); this.node.appendChild(this.open); this.node.appendChild(this.close); this.node.appendChild(this.loading); this.open.addEventListener("click", bind(this.openAct, this), false); this.close.addEventListener("click", bind(this.closeAct, this), false); }, openAct: function() { this.open.style.display = "none"; if (this.tree) { this.tree.style.display = "block"; this.close.style.display = "inline"; } else { this.loading.style.display = "inline"; this.load(); } }, closeAct: function() { if (this.tree) { this.tree.style.display = "none"; this.close.style.display = "none"; this.open.style.display = "inline"; } }, load: function() { var url = $X("string(descendant::a[starts-with(@href, '/entry/')]/@href)", this.node).value(); GM_xmlhttpRequest({ method: "GET", url: "http://b.hatena.ne.jp"+url, onload: bind(this.loadCallback, this) }); }, loadCallback: function(result) { var match = result.responseText.match(this.targetRegExp); if (match) { var sandbox = document.createElement("div"); sandbox.innerHTML = match[0].replace(this.target,""); this.tree = sandbox.firstChild; } else { this.tree = document.createElement("ul"); } this.append(); this.loading.style.display = "none"; this.close.style.display = "inline"; }, append: function() { this.tree.style.backgroundColor = "transparent"; this.tree.style.listStyleType = "circle"; this.node.appendChild(this.tree); $X("li", this.tree).each(function(n) { var a = $X("a",n).node(); var c = $X("count(//li/a[@href='"+a.href+"'])").value(); if (c > 1) n.parentNode.removeChild(n); }); $X("li", this.tree).each(bind(function(node){new this.constructor(node)}, this)); }, rootAppend: function() { $X(this.targetXPath).each(bind(function(node){new this.constructor(node)}, this)); } }; function similar(node) { this.node = node; this.create(); } similar.prototype = new HBTM("similar_entries"); similar.prototype.constructor = similar; function referred(node) { this.node = node; this.create(); } referred.prototype = new HBTM("referred_entries"); referred.prototype.constructor = referred; function loadBookmarkCommentViewer() { var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); script.type = "text/javascript"; script.src = "http://b.hatena.ne.jp/js/BookmarkCommentViewerAllInOne.1.2.js"; head.appendChild(script); var css = document.createElement("link"); css.rel="stylesheet"; css.href="http://d.hatena.ne.jp/css/base.css"; css.type="text/css"; css.media="all"; head.insertBefore(css, head.firstChild); window.addEventListener("load",function(){ var BCV = unsafeWindow.BookmarkCommentViewer; BCV.options['screenshot'] = true; var asyncCommnetView = BCV.asyncCommnetView; BCV.asyncCommnetView = function(url, onCompleteCallback) { var div = asyncCommnetView(url, function(){ onCompleteCallback.apply(this, arguments); new unsafeWindow.Ten.XHR("http://b.hatena.ne.jp/entry/rss/"+url, {}, function(result) { if (! result.responseText.match(/<description>(.*?)<\/description>/)) return; if (! RegExp.$1) return; // var desc = document.createTextNode("desc: "+RegExp.$1); var desc = document.createElement("li"); desc.appendChild(document.createTextNode("desc: "+RegExp.$1)); div.lastChild.insertBefore(desc,div.lastChild.getElementsByTagName("li")[0]); }); }); return div; }; BCV.asyncCommnetView.origin = asyncCommnetView; }, false); } function bind(f,o) {return function() {return f.apply(o, arguments)}} function $X(xpath, context) { if (!(this instanceof $X)) return new $X(xpath, context); this.xpath = xpath; this.context = context || document; } $X.prototype = { evaluate: function() { var result = document.evaluate(this.xpath, this.context, null, this.type, null); switch (result.resultType) { case XPathResult.STRING_TYPE : return result.stringValue; case XPathResult.NUMBER_TYPE : return result.numberValue; case XPathResult.BOOLEAN_TYPE: return result.booleanValue; case XPathResult.FIRST_ORDERED_NODE_TYPE: return result.singleNodeValue; } return result; }, node: function() { this.type = XPathResult.FIRST_ORDERED_NODE_TYPE; return this.evaluate(); }, value: function() { this.type = XPathResult.ANY_TYPE; return this.evaluate(); }, each: function(func) { this.type = XPathResult.ORDERED_NODE_SNAPSHOT_TYPE; var result = this.evaluate(); for (var i=0; i<result.snapshotLength; i++) func(result.snapshotItem(i)); } }; main(); })();
それGreasemonkeyで、ということで
インストールはこちらから
http://userscripts.org/scripts/show/37782
初めて Greasemonkey を作って自信が無いので増田で投稿。切り換えボタンがあった方が便利だと思うが、まぁいいや。
やっぱり切り換えボタンがあった方がいいかな、と思ったので追加した。
Reverse Bookmark Comment [sort]変更した、詳細は下記で
の [sort] をクリックで昇順・降順の切り換え。
ブックマークが無い場合の処理と、ソートを行うかの設定を追加した。始めに並べ替えたくない場合は
ReverseHatenaBookmarkComment を false に(上で追加した [sort] [▽] で昇順・降順の切り換えは可能。)
実際使ってみると、通常の並びの方が見やすく感じたので。でも慣れのせいかも。だからそこら辺の設定があった方がいいんじゃね?という。
ブックマーク数が多い場合の詳細ページっていうのかな?要は
こういうページにも対応した。
関連エントリー機能が追加されて、ページ構造が変化したので修正。でもこの関連エントリーの位置はまた変わるかもしれないけれども。
関連エントリーの位置が変更されたので、修正。対応が遅れてスミマセン。
コメント一覧非表示機能が追加されたので、それに応じて修正。
リニューアルに対応、また分かりやすいようにソートされてる場合[▲]通常の並びでは[▽]と変更しました。
cf.はてなダイアリーの過去ログを日附昇順に竝べ替へるユーザスクリプト - MORIYAMA Hiroshi's Diary
cf. はてブからネットイナゴを駆除(?)する「Hatebu Tag Killer」 (ひぐまのひまグ)
ちなみに後者の方は、コメントの内容を正規表現でブックマークコメントが削除できるGreasemonkeyが便利。
こっちはスター順に並べる