はてなブックマークのWebHook機能

5e9da1b7f660f73b498d891a0f82aeed_s

はてなブックマークには外部連携機能があります。 以前(2011年頃)、自分がブックマークしたものを自分の立てていたサーバに送る設計をしていたのですが、一身上の都合によりホーチミン勤務となったためサーバを閉じたんですね。 翌年帰国してサーバとして使用していたPCを立ち上げたら動かない…。どこか壊れてしまったようで…。ソースを外部に保存していなかったために色々と残念な結果になりました。

ちなみにオンラインドキュメントはここにあるのですが、しばらくメンテナンスされていないようで誰か使っているのか?ってレベルですね。

で、明日退職を控えていてオフィスには来ているもののやることもなく、こうして自サーバで何かできないかと考えたり、思いついたものを実装したりっていうのをこの数カ月繰り返してきました。

そんな暇を潰すために、以前作っていたWebhook連携のためのコードを書いていました。 当サーバのフレームワークはCodeIgnitorを使っているので、CodeIgnitorに合わせたMVCな構成で作成しました。データのインポート先はMySQLなので、そちらも新たにテーブルを準備しました。 閲覧用のControllerは作っていないので飽くまで取り込めるというだけ。

テーブルはブックマーク用とタグ用の2種類のみ。

ちなみにはてなから送られるPOSTパラメータは以下の様な感じ。一部伏せていますが、だいたいこんな感じです。

field value(sample)
is_private 0
count 13(何のカウント?)
uid 13(何のUID?)
status add
key xxxxxxxxxxxxxxxx(トークン文字列)
username ユーザーID
permalink http://b.hatena.ne.jp/ユーザーID/20160330#bookmark-283615825
client Web
timestamp 2016-03-30T15:43:01+09:00
comment [アイドル]良い筋肉
url http://tensaychang.hateblo.jp/entry/saikireika_instagram
title 筋肉少女、筋肉アイドルがご飯を食べる仕草がかわいすぎる - 天才ブログ

送られてくるパラメータさえ分かれば後はパラメータに合わせてデータをDBに入れるだけ! 実装よりも値の確認の方に時間がかかったような…。

ちなみにcommentフィールドにはタグを含んだ文字列が送られてくるので、タグにあたる文字列とコメントにあたる文字列を分解する必要があります。 現状、私は正規表現を使ってタグとコメントを分けています。

↓こんな感じです。

[php] $comment = $this->input->post('comment');

$tags = array(); if(preg_match_all('/^([[^+])+/', $comment, $matches)) { $tags = explode( "\t", trim(preg_replace(array("/[]/", "/\t+/"), "\t", $matches[0][0]), "\t")); $comment = str_replace($matches[0][0], '', $comment); } [/php]

これと言って変わったことをやっているわけではないので今回は以上です。