LoginSignup
3
2

More than 3 years have passed since last update.

はてなブックマークへの追加を自動的にpinboardやdeliciousにも登録する

Last updated at Posted at 2015-07-06

概要

はてなブックマークへブックマークを追加すると、自動的にpinboardやdeliciousにも登録されるようにします

追記

この記事は、はてなブックマークの外部連携サービス機能に含まれるWebhook機能を用いた事例の紹介でしたが、この機能は2018年末に終了しました。よって、この記事の内容はもう有効ではありません。

必要なもの

  • 何らかのWebサーバ
  • perl動作環境
  • Net::Delicious
  • Config::Pit

インストール

  • 何らかのWebサーバを用意します。
  • Net::Delicious, Config::Pitをインストールします。
  • hatena2pinboard.pl https://gist.github.com/mrmt/4564284 をcgi scriptとして設置します。
hatena2pinboard.pl
#!/usr/bin/perl
# from http://d.hatena.ne.jp/amachang/20090603/1244025898
use utf8;
use strict;
use warnings;
use CGI;
use Net::Delicious;
use Config::Pit;

use constant {
    PINBOARD_ENDPOINT => 'https://api.pinboard.in/v1/',
};

my $config = pit_get('hatena2pinboard',
             require => {
                 hatena_webhook_key => 'xxx',
                 pinboard_username => 'xxx',
                 pinboard_password => 'xxx',
         });
die 'pit_get failed.' unless %$config;

my $req = CGI->new;
$req->charset('utf-8');
print CGI::header('text/plain');

if($req->param('key') eq $config->{hatena_webhook_key}){
    if($req->param('status') eq 'add'){
        my $url = $req->param('url');
        my $title = $req->param('title');
        my $comment = $req->param('comment');
        post_pinboard($url, $title, $comment);
    }
}
print 'ok';
exit;

################################################################
sub post_pinboard{
    my $url = shift;
    my $title = shift;
    my $comment = shift;

    my $pinboard = Net::Delicious->new({
        user => $config->{pinboard_username},
        pswd => $config->{pinboard_password},
        endpoint => PINBOARD_ENDPOINT
    });
    $pinboard->add_post({
        url => $url,
        description => $title,
        extended => $comment,
        replace => 0,
    });
}

__END__

hatena2pinboard 側の個人設定

  • 以下の使い捨てスクリプトset_pitを用意
  • hatena_webhook_key に適当なキー文字列を、pinboard_usernameにはpinboard.inのユーザ名、pinboard_passwordにはpinboard.inのパスワードを記入
  • 実行
  • ~/.pit というディレクトリが出来ます。このディレクトリをWebサーバの実行ユーザのホームディレクトリにコピーします。
set_pit
#!/usr/bin/perl
use strict;
use warnings;
use Config::Pit;

Config::Pit::set('hatena2pinboard',
         data => {
             hatena_webhook_key => 'mogemoge',
             pinboard_username => 'yourname',
             pinboard_password => 'foobar'
         });

はてなブックマーク側の個人設定

  • はてなブックマークの「設定」から「外部サイト連携」のタブを選びます
  • 「Web Hook(開発者さま向け, 3つまで登録できます)」の項目にて、「イベント通知を受け取るURL」にはhatena2pinboard.plを設置したurl, 「キー」には、先ほど決めてset_pitで設定したキー文字列を記入します。
  • ad1e81fe7899dfa3456f3f30f72ac95b.png

ほか

  • この例では, はてなブックマークのWeb Hookを受けてブックマーク登録する対象がpinboard.inですが、pinboard.inのAPIはdelicious互換らしく、そもそも使っているライブラリもNet::Deliciousですので、APIのエントリポイントをdeliciousのものに書き換えてやれば、deliciousに対しても動くと思います。
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2