fluentd+bookmarkletで簡易オンラインブックマークの仕組みをつくった
fluentdにはHTTPサーバーを立ててHTTPクライアントからJSONを受け取って処理する機能がある。
ひょっとしてこれとブラウザのbookmarkletを組み合わせると便利なのでは?
さらに前述したfluent-plugin-hatena-bookmark ( http://qiita.com/yuiseki/items/ff00b3db0a2c6121f1a3 ) も組み合わせれば、はてブにクロスポストすることもできるのでは?
というわけでやってみた
<source>
type http
port 8888
bind 0.0.0.0
body_size_limit 32m
keepalive_timeout 3s
</source>
<match bkmk.kogaidan.**>
type copy
<store>
type stdout
</store>
<store>
type mongo
host localhost
database bkmk
collection let
</store>
<store>
type hatena_bookmark
consumer_key ****
consumer_secret ****
request_token ****
request_secret ****
</store>
</match>
<match bkmk.kogaidan.**>
のkogaidanの部分は、適当なランダム文字列に変えておくと安全。これは後程ブックマークレット側にも埋め込む必要がある。
以下、ブックマークレットの例
javascript:(function(){var json={tag:['tech','ruby'],title:document.title,url:location.href};var jsonstr=encodeURIComponent(JSON.stringify(json));var isrc='http://example.com:8888/bkmk.kogaidan?json='+jsonstr; var i=new Image();i.src=isrc;document.body.appendChild(i); })();
これがはてブのBookmarkletなどより便利なのは、js自体にタグが埋め込めている点。
このようなブックマークレットを事前に大量に用意しておけば、1クリックでタグを入力する手間が省ける。
コメントや時刻など、他に必要なフィールドがあれば適当に追加していくこともできそうだ。
注意してほしいのは、ブックマークレット内で呼び出しているドメイン名の部分。
ここでlocalhostなどを指定すると、ブラウザによっては外部のネットワーク上のサイトからローカルなネットワークへアクセスして怪しいことをしているのではないかと警告してくることがある(Operaはそのような挙動をする)。
そのため、ここは外部ネットワークにあるサーバーを指定するか、hostsファイルでlocalhostに適当なドメインを割り当てるなどの細工が必要。
また、fluentdはPOSTでJSONを受け取ることを期待しているのに、img要素のsrcとしてURLを指定してGETしていることにも注意が必要。
fluentdのレスポンスContent-Typeはtext/plain;なので、ブラウザによっては画像としてロードしようとするとエラーを吐くことがある(Chromeはそのような挙動をする)。
その場合は以下の記事を参考にしてfluentdのContent-Typeを書き換えれば好きにできる。
Author And Source
この問題について(fluentd+bookmarkletで簡易オンラインブックマークの仕組みをつくった), 我々は、より多くの情報をここで見つけました https://qiita.com/yuiseki/items/19535daba3fad361b877著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .