Iruca Log

Iruca Log

東京に住むWeb系エンジニアによるデータ分析ブログ

SNSでフォローする!

はてなブックマーク Web Hookを使って自分がはてブ登録したことを通知する

目次

はじめに

こんにちは、irucaです。
はてなブックマークのAPIの中でも、Web Hook という機能を使って、「自分がはてなブックマーク登録したことを契機にリアルタイムで動作するプログラム」の作り方を紹介したいと思います。

  • はてなブックマーク登録した瞬間にエクセルにログを残す
  • はてなブックマーク登録したことをtwitterにツイートする
  • はてなブックマークした瞬間に自分にメールを飛ばす

など、利用方法はいろいろありそうです。

WebHookの登録

まずははてなブックマークの設定画面から、
はてなブックマークに登録されたときにHTTPで通知する先を登録します。

設定画面から「開発者向け」を選び、
イベント通知を受け取るURLに「http://[自分の持っているサーバのホスト名]/cgi-bin/main.cgi」など、はてなブックマーク登録したときにHTTP POSTでアクセスしてもらいたいURLを登録します。

f:id:iruca21:20170603101547p:plain

また、「キーの自動生成」ボタンを押して、たしかにはてなから届いた正式なイベント通知であることを示すパスワードを取得しておきましょう。

「受け取るイベントの種類」には、いったん「ブックマークの追加 / 更新 / 削除」を選んでおきます。

「変更を保存」を押して登録完了です。

イベント通知を受け取るプログラムを作成する

さて、イベント通知をHTTP POSTメソッドで受け取って、何かしら動作するプログラムを用意します。
今回はpythonで、CGIプログラムを使って作成してみたいと思います。

サーバを持っている方はHTTPDなどのウェブサーバをインストールして起動しておきます。

yum -y install httpd
service httpd start

デフォルトで /var/www/cgi-bin/ 配下にはCGIプログラムを置けるので、ここに main.cgi というCGIスクリプトを作ります。
ブックマークを追加したら、その詳細をテキストファイルに出力してログを残すだけのプログラムです。

#!/usr/bin/python
#-*- coding:utf-8 -*-

import cgi
import os
import sys
sys.path.append('/root/hateblo-auto-bookmark-back/')
import subscription_util

#==============
# 取得したkeyをここに入力
valid_key = "HOGEHOGEFUGAFUGA"
# ブックマーク情報を残したいテキストファイルへの絶対パスを入力
log_filepath = "/tmp/my_bookmark.log"
#==============

"""
自分が何かをブックマークしたイベントをきっかけに、
ブックマークしたことをログに残すCGI
"""
print "Content-type: text/html\n\n";

form = cgi.FieldStorage()

if os.environ['REQUEST_METHOD'] != 'POST':
    print '不正なアクセスです。'
    sys.exit()

required_keys = ["key", "username", "title", "status", "timestamp"]
for required_key in required_keys:
    if not form.has_key(required_key)  :
        print '不正なアクセスです。'
        sys.exit()

key = form["key"].value

if key != valid_key:
    print '不正なkeyです。'
    sys.exit()

username = form["username"].value
title = form["title"].value
timestamp = form["timestamp"].value
status = form["status"].value

# ブックマークに追加された場合は
if status=="add":
    with open( log_filepath , "a") as f:
        f.write("[%s] %sさんが %s をブックマークしました。\n" % ( timestamp, username, title ) )
    print "ok!"
else:
    print "not related event."

上で取得したkeyを自分のものに書き換えてください。
また、CGIファイルのパーミッションに実行権限をつけておきましょう。

chmod +x main.cgi

実行してみる

では、とりあえず適当な自分の記事をはてなブックマークに登録してみます。

ポチッ

ログファイルを確認してみます。

[2017-06-04T21:13:41+09:00] iruca21さんが pythonから任意のURLをはてなブックマー クに追加する [はてなREST API] - Iruca Log をブックマークしました

おおお、ちゃんと記録されている。

満足です。
皆さんもぜひ使ってみてくださいー。