nDiki

2013年1月16日 (水)

はてなブックマークのフィードをフィルタし IFTTT でソーシャルメディアでシェア

リンクを複数のソーシャルメディアでシェアする仕組みを持ってなくて、そういう時は個別に投稿している。でも公開範囲とか細かく設定したい時以外はサクッと一発で終わらせた方がクールだ。あと今までほとんど Twitter ではリンクのブックマーク的シェアしていなかったんだけれど、まあ今後はちょっとしてもいいかなと。

ということで仕組み作り。はてなブックマークから Twitter 連携・外部サイト連携するのが国内的王道かな。でも他の人のリンク踏むとブックマーク先に飛んだりブックマークエントリーページに飛んだりっていう体験があってちょっとそういうの嫌だったりする。

代替案としては Facebook を一次投稿先にして IFTTT で他へ流す方法が思いついた。IFTTT 的に quick trigger になるのでタイムラグが無いのが良い。そのかわり非公開以外のリンク投稿について全て trigger してしまうようなのでちょっと怖い。URL・ページタイトル・コメントを IFTTT 側で分けて取れるのでいいんだけどね。

あとは Buffer を一次投稿先にして直接あるいは IFTTT で流す案も検討した。時間をばらしたい人はいいけどそうでない場合はあまり良くない。あとページタイトルは取得してくれない。

ということでやはりリンクの共有としては、はてなブックマークが便利なんだなぁ。PC からでも Android 端末からでもいけるし。なので一次投稿先ははてなブックマークに決定。全体公開ものをここにブックマークしているので、垂れ流れていくのも問題なし。ただ前述した点があるので、実際の連携にははてなブックマークの機能を使わないで、フィードを IFTTT に読ませて撒くことにした。

ただ IFTTTはてなブックマークにつけたコメント部分をフィードから読みとれない。ということでちょこちょこっと Perl でフィルタを書いた。

 #!/usr/bin/perl

 use warnings;
 use strict;

 use CGI;
 use LWP::UserAgent;
 use XML::RSS;

 my $ua = LWP::UserAgent->new;
 my $response = $ua->get('http://b.hatena.ne.jp/はてなID/rss');

 my $rss = XML::RSS->new;
 $rss->parse($response->content);

 foreach my $item (@{$rss->{items}}) {
   my $description = $item->{description};
   $item->{title} = $description if defined $description;
 }

 my $query = CGI->new;
 print $query->header('application/xml; charset=utf-8');
 print $rss->as_string;

サーバに XML::RSS が入ってたのでそれを使った感じ。IFTTT からは15分に1回ぐらいのアクセスのはずなので、まあこんなもんで。エラー処理も端折り。

はてなブックマークにつけたコメントは IFTTT でエントリのタイトルとしてとれるようになるので、それを使うように。Facebook に投げる場合はページのタイトルは Facebook が自前で取得してくれるので使わないので、フィードではタイトルを上書きしてしまって問題ない。

ページのタイトルを取得しないソーシャルメディア向け(Twitter とか)には

 foreach my $item (@{$rss->{items}}) {
   my $description = $item->{description};
   $item->{title} = '“' . $item->{title} . '”';
   $item->{title} = $description . ' / ' . $item->{title}
     if defined $description;
 }

と、タイトルとコメントをはてなブックマーク書式っぽくしてタイトルに設定してあげる。あとは IFTTT でいい感じに流してもらうと。

スポンサード リンク
[ 1月16日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

follow us in feedly

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.213372s / load averages: 0.25, 0.45, 0.42
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker