fluentd+bookmarklet으로 간이 온라인 북마크의 구조를 만들었다

fluentd에는 HTTP 서버를 세워 HTTP 클라이언트로부터 JSON을 받아 처리하는 기능이 있다.
혹시 이것과 브라우저의 bookmarklet를 조합하면 편리한 것은?
게다가 앞서 언급한 fluent-plugin-hatena-bookmark ( ぃ tp // m / 유이 세키 / ms / f00b3db0 A2c6121f1 A3 ) 도 조합하면, 딱 부에 크로스 포스트할 수도 있는 것은 아닐까?

그래서 봤어.
  <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을 다시 쓰면 좋아할 수 있다.

좋은 웹페이지 즐겨찾기