SlideShare a Scribd company logo
1 of 10
研究課題:WebHook の調査と実装




         1
1   はじめに
Web 上のコンテンツの更新検知は、今までは対象コンテンツを網羅的にクローリングする
方法がスタンダードであったが、コンテンツの数が膨大な事による処理負荷の増大や更新
検知のリアルタイム性に問題があった。
問題を解決する方法としてコンテンツ側が更新時に更新情報を他アプリケーションに通知
する、という手段があるが、その手段のひとつとして「WebHook」という考え方が一部の
Web サービスで流行し始めている。
今回は WebHook についての調査と、実際に WebHook の概念を用いたデモアプリケーシ
ョンの作成を行った。その紹介を以下行う。


2   WebHook について
WebHook は、Web サービスの更新情報を他の Web サービスに通知するための概念である。
情報の通知は HTTP の POST メソッドを使用して送信される。




WebHook については「HTTP の POST メソッドを使用して情報を通知する」という大枠
の概念は定義されているものの、パラメータ名やデータフォーマットなど細かい仕様につ
いては定義されていない。
「 あ る サ ー ビ ス の 更 新 情 報 を POST 経 由 で 他 サ ー ビ ス に 通 知 す る 」 と い う 方 式 が
WebHook だ、とゆるやかに認識されているようである。

WebHook が日本で著名になったきっかけとして、株式会社はてなの提供するサービス
「はてなブックマーク」が WebHook に対応したことが挙げられる[1]。
はてなブックマークでは「自分がブックマークをした時」「自分のブックマークに対して
はてなスターが付与された時」などに WebHook が送られるようである。

なお、WebHook の概念を踏襲した一実装として、Google が「PubSubHubBub(パブサブ
ハバブ)」というプロトコルを公開している[2]。PubSubHubBub については後述する。



3   WebHook の一実装~PingHook について
WebHook の検証の一環として、WebHook の概念を用いたデモアプリ「PingHook」[3]を
作成した。

    3.1 PingHook とは
PingHook は、ブログの update ping(更新 ping)を受信して、WebHook 形式に変換して
Hook を送信するアプリである。
Google の提供するクラウド環境、GAE/J(Google App Engine for Java)上で動作してい
る。




                                  2
PingHook では、update ping 受信用の URL の作成が行える。URL 作成時に、この URL
で ping を受信した時にどの WebHook 対応サーバに Hook を送信するかを設定する。

こちらで作成した URL をブログサービスの update ping 送信先に指定すると、ブログ記
事更新時に PingHook を介して他サービスに WebHook を送信すことができる。
動作イメージとしては以下の図のようになる。




    3.2 Pin g Hook の動作フロー
PingHook の内部動作フローを、フローチャートで記す




                           3
3.3 Pin g Hook の URL 作成
update ping 受信用の URL の作成は、PingHook にログインし、「新たに登録する」から
以下の情報を入力すると行える。
WebHook 送信先の URL
user key(update ping URL 生成の際に使用します。未指定の場合
はログインアカウントが割り振られます)
データフォーマット(PingHook 独自/PubSubHubBub)
WebHook 送信タイミング(記事更新時に常に/初回のみ)

こ ち ら で 作 成 し た URL を 、 各 ブ ロ グ サ ー ビ ス の update ping 送 信 先 に 指 定 す る と 、
PingHook が使えるようになる。




                                   4
3.4 Pin g Hook から送信されるパラメータ
PingHook から WebHook サーバへは、以下のパラメータが送信される。
blogname         ブログ名
blogurl          ブログの URL
entryurl         記事 URL
entrytitle       記事タイトル
entrytext        記事本文(HTML タグは削除済み。128 文字以上の場合は以降は削除)
urls             記事中に含まれる URL。複数渡される場合はカンマ文字を区切り文
          字とする。
imgs      記事中に含まれる画像 URL。複数渡される場合はカンマ文字を区切
          り文字とする。
※ブログサービスの更新 ping に更新記事の URL が渡されていない場合、更新記事の情報が取
得できない場合は、entryurl、entrytitle、entrytext、urls、imgs の値は送信されません。


  3.5 動作デモ
動作デモとして、ブログの更新内容を PingHook~WebHook 対応サービスを経由してメー
ル送信する、というデモを試してみる。

WebHook 対応サービスは、今回は「HookHub」というサービスを使用した[4]。
HookHub は、受信した WebHook 形式のデータを、JavaScript 文法のユーザ定義文で自
由に加工することができるサービスである。
たとえば、受け取った WebHook の内容を所定の twitter アカウントに post する、といっ
た事が可能である。

今回は、ブログの記事タイトルをメールタイトル、記事 URL をメール本文としてメール
送信するという定義文を作成し、そちらを使用した[5]。

       var url = stash.params.entryurl ? stash.params.entryurl : stash.params.blogurl;
       var title = stash.params.entrytitle ? stash.params.entrytitle : stash.params.blogname;
       mail("[update blog]" + title, url);

ブログサービスは、ameblo を使用した[6]。

 3.5.1 ping 送信先設定
以下のように、PingHook で作成した URL を登録。




                                                      5
3.5.2 記事を書く
記事エディタから以下のような記事を書く。タイトルは「PingHook テスト」とした。




  3.5.3 記事の投稿~メールの送信
記事を投稿すると、投稿記事の update ping が PingHook に送信される。
PingHook では update ping を WebHook 形式に変換した上で HookHub に Hook 送信。
HookHub では受信内容をメールで送信、という流れになる。

今回は以下のようなメールが送信された。




                               6
3.6 考察
上述のように、ブログの更新内容を PingHook を使用して他サービスに Hook し、任意の
処理を追加することができた。
今回は単純なケースだったが、記事に画像が含まれていたら twitter に post、記事に特定
のニュースサイトへのリンクが含まれていたら facebook に投稿、といったような処理も
WebHook を使用することで容易に実現が可能である。



4   PubSubHubBub(パブサブハバブ)について
PubSubHubBub は、Google が実装した WebHook の考え方を取り入れた一実装である。
更新情報を通知する Publisher と受信する Subscriber の間に Hub を用意し、Hub を介し
て更新情報の通知を行えるようにしている。

日本では、livedoor blog ならびに livedoor reader が PubSubHubBub 対応をしたことで知
名度が上がった[7]。

  4.1 PubSubHubBub の処理の流れ
以下の図は、PubSubHubBub の説明として Google が用意しているスライド資料から引用
したものである[8]。




まず Subscriber は、自分が購読をしたい URL を Hub に登録する。




                               7
Hub とのネゴシエーションに成功すると、購読 URL の登録が行える。
この方式により一方的に Subscriber に情報を通知することが出来ないため、spam などの
抑制が可能である。




Publisher は、自身のサービスでコンテンツが更新された際に Hub に情報を通知する。
初回については、更新通知した内容が本当に存在するかどうかを確認するために、 Hub が
Publisher に対してリクエストを発行し、情報の所在有無を確認する。




                        8
一度登録された Publisher の URL は 、都度更新しなくても自動的にクローリングされる
ようだ。
(こちらについては Hub の内部実装次第の可能性があるため、必ずそうであるかどうかは
定かではない)




Subscriber が登録した URL に更新情報が存在する場合は、Hub が Subscriber に対して情
報を通知する。

PubSubHubBub のプロトコルについては以下の URL にて記載されているので、詳しくは
こちらを参照いただきたい。
http://pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.2.html




                                   9
4.2 PubSubHubBub のメリット
いくつか考えられるが、
  プロトコル・仕様が規定されることで実装の混乱が防げること
  Publisher は Hub の存在だけを知っていれば良いこと。データの受信先が増えても
      Publisher が複数のデータ通知をしなくても済む。
  同様に、Subscriber も Hub の存在だけを知っていれば良いこと。Publisher から不
      要なトラフィックが直接送られてくることも無い
といった事が挙げられる。
Publisher~Subscriber 間の無駄なトラフィックが抑制できること。信頼されたメッセー
ジのみ授受ができることが大きなメリットと考えられる。

デメリットとしては、Hub にトラフィックが集中する可能性があること、だろうか。



5   考察とまとめ
Web のリアルタイム性を向上するための方法として注目を集めている WebHook について、
調査ならびにデモアプリの実装を行った。

今後 Web の世界は、twitter などの隆盛でも感じられるように、よりリアルタイム性が求
められてくると考えられる。
Web サービスの開発担当者も、この潮流と、その中で用いられている技術トレンドについ
てキャッチアップし、サービスに展開していく事が望ましいと思われる。


6   参考文献・URL
[1]http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA
%A5%D6%A5%C3%A5%AF%A5%DE%A1%BC%A5%AF%20Web%20Hook
[2] http://code.google.com/p/pubsubhubbub/
[3] http://just-do-pinghook.appspot.com/top
[4] http://www.hookhub.com/
[5] http://www.hookhub.com/moaikids/hook/13002
[6] http://ameblo.jp/
[7] http://www.itmedia.co.jp/news/articles/0908/18/news090.html
[8] http://docs.google.com/present/view?id=ajd8t6gk4mh2_34dvbpchfs




                                     10

More Related Content

What's hot

Dulist varalakshmi-01-03
Dulist varalakshmi-01-03Dulist varalakshmi-01-03
Dulist varalakshmi-01-03venkatesha9
 
Ammaayi koasam-01-02
Ammaayi koasam-01-02Ammaayi koasam-01-02
Ammaayi koasam-01-02venkatesha9
 
023 teerina -tee ta
023 teerina -tee ta023 teerina -tee ta
023 teerina -tee taHari99
 
Chelaregina kodi
Chelaregina kodiChelaregina kodi
Chelaregina kodivenkatesha9
 
Microsoft Teamsを使ったメッセージ通知開発
Microsoft Teamsを使ったメッセージ通知開発Microsoft Teamsを使ったメッセージ通知開発
Microsoft Teamsを使ったメッセージ通知開発miekobari
 
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기Heejong Ahn
 
025 cinema%20effect
025 cinema%20effect025 cinema%20effect
025 cinema%20effectHari99
 

What's hot (20)

Divanam 01-03
Divanam 01-03Divanam 01-03
Divanam 01-03
 
Discussion
DiscussionDiscussion
Discussion
 
Duduku 01-02
Duduku 01-02Duduku 01-02
Duduku 01-02
 
Dulist varalakshmi-01-03
Dulist varalakshmi-01-03Dulist varalakshmi-01-03
Dulist varalakshmi-01-03
 
Attato
AttatoAttato
Attato
 
Ammaayi koasam-01-02
Ammaayi koasam-01-02Ammaayi koasam-01-02
Ammaayi koasam-01-02
 
Atta
AttaAtta
Atta
 
Railsで作るBFFの功罪
Railsで作るBFFの功罪Railsで作るBFFの功罪
Railsで作るBFFの功罪
 
023 teerina -tee ta
023 teerina -tee ta023 teerina -tee ta
023 teerina -tee ta
 
Bhuvana 01
Bhuvana 01Bhuvana 01
Bhuvana 01
 
Avakaa sam
Avakaa samAvakaa sam
Avakaa sam
 
Ation
AtionAtion
Ation
 
Chelaregina kodi
Chelaregina kodiChelaregina kodi
Chelaregina kodi
 
Citraangi 01-02
Citraangi 01-02Citraangi 01-02
Citraangi 01-02
 
Microsoft Teamsを使ったメッセージ通知開発
Microsoft Teamsを使ったメッセージ通知開発Microsoft Teamsを使ったメッセージ通知開発
Microsoft Teamsを使ったメッセージ通知開発
 
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
TypeScript와 Flow: 
자바스크립트 개발에 정적 타이핑 도입하기
 
Anna bhaaryato
Anna bhaaryatoAnna bhaaryato
Anna bhaaryato
 
025 cinema%20effect
025 cinema%20effect025 cinema%20effect
025 cinema%20effect
 
001 mmmp-01-07
001 mmmp-01-07001 mmmp-01-07
001 mmmp-01-07
 
Bramaram
BramaramBramaram
Bramaram
 

Viewers also liked

kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携
kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携
kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携Sakae Saito
 
Azure Functions 入門
Azure Functions 入門Azure Functions 入門
Azure Functions 入門jz5 MATSUE
 
Webhooks in Microsoft SharePoint Online
Webhooks in Microsoft SharePoint OnlineWebhooks in Microsoft SharePoint Online
Webhooks in Microsoft SharePoint OnlineNetwoven Inc.
 
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップ慎一 古賀
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説Akira Inoue
 
はじめての ASP.NET MVC
はじめての ASP.NET MVCはじめての ASP.NET MVC
はじめての ASP.NET MVCjz5 MATSUE
 
Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定Go Maeda
 

Viewers also liked (7)

kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携
kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携
kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携
 
Azure Functions 入門
Azure Functions 入門Azure Functions 入門
Azure Functions 入門
 
Webhooks in Microsoft SharePoint Online
Webhooks in Microsoft SharePoint OnlineWebhooks in Microsoft SharePoint Online
Webhooks in Microsoft SharePoint Online
 
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップASP.NET SPA開発をはじめよう~今と未来とステップアップ
ASP.NET SPA開発をはじめよう~今と未来とステップアップ
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説
 
はじめての ASP.NET MVC
はじめての ASP.NET MVCはじめての ASP.NET MVC
はじめての ASP.NET MVC
 
Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定Redmineを快適に使うためのおすすめ初期設定
Redmineを快適に使うためのおすすめ初期設定
 

More from moai kids

中国最新ニュースアプリ事情
中国最新ニュースアプリ事情中国最新ニュースアプリ事情
中国最新ニュースアプリ事情moai kids
 
FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係moai kids
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについてmoai kids
 
Programming Hive Reading #4
Programming Hive Reading #4Programming Hive Reading #4
Programming Hive Reading #4moai kids
 
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3moai kids
 
"Programming Hive" Reading #1
"Programming Hive" Reading #1"Programming Hive" Reading #1
"Programming Hive" Reading #1moai kids
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDBmoai kids
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBmoai kids
 
Hadoop Conference Japan 2011 Fallに行ってきました
Hadoop Conference Japan 2011 Fallに行ってきましたHadoop Conference Japan 2011 Fallに行ってきました
Hadoop Conference Japan 2011 Fallに行ってきましたmoai kids
 
HBase本輪読会資料(11章)
HBase本輪読会資料(11章)HBase本輪読会資料(11章)
HBase本輪読会資料(11章)moai kids
 
snappyについて
snappyについてsnappyについて
snappyについてmoai kids
 
第四回月次セミナー(公開版)
第四回月次セミナー(公開版)第四回月次セミナー(公開版)
第四回月次セミナー(公開版)moai kids
 
第三回月次セミナー(公開版)
第三回月次セミナー(公開版)第三回月次セミナー(公開版)
第三回月次セミナー(公開版)moai kids
 
Pythonで自然言語処理
Pythonで自然言語処理Pythonで自然言語処理
Pythonで自然言語処理moai kids
 
HandlerSocket plugin Client for Javaとそれを用いたベンチマーク
HandlerSocket plugin Client for Javaとそれを用いたベンチマークHandlerSocket plugin Client for Javaとそれを用いたベンチマーク
HandlerSocket plugin Client for Javaとそれを用いたベンチマークmoai kids
 
Yammer試用レポート(公開版)
Yammer試用レポート(公開版)Yammer試用レポート(公開版)
Yammer試用レポート(公開版)moai kids
 
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)moai kids
 
中国と私(仮題)
中国と私(仮題)中国と私(仮題)
中国と私(仮題)moai kids
 
不自然言語処理コンテストLT資料
不自然言語処理コンテストLT資料不自然言語処理コンテストLT資料
不自然言語処理コンテストLT資料moai kids
 
n-gramコーパスを用いた類義語自動獲得手法について
n-gramコーパスを用いた類義語自動獲得手法についてn-gramコーパスを用いた類義語自動獲得手法について
n-gramコーパスを用いた類義語自動獲得手法についてmoai kids
 

More from moai kids (20)

中国最新ニュースアプリ事情
中国最新ニュースアプリ事情中国最新ニュースアプリ事情
中国最新ニュースアプリ事情
 
FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係FluentdとRedshiftの素敵な関係
FluentdとRedshiftの素敵な関係
 
Twitterのsnowflakeについて
TwitterのsnowflakeについてTwitterのsnowflakeについて
Twitterのsnowflakeについて
 
Programming Hive Reading #4
Programming Hive Reading #4Programming Hive Reading #4
Programming Hive Reading #4
 
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3
 
"Programming Hive" Reading #1
"Programming Hive" Reading #1"Programming Hive" Reading #1
"Programming Hive" Reading #1
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDB
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Hadoop Conference Japan 2011 Fallに行ってきました
Hadoop Conference Japan 2011 Fallに行ってきましたHadoop Conference Japan 2011 Fallに行ってきました
Hadoop Conference Japan 2011 Fallに行ってきました
 
HBase本輪読会資料(11章)
HBase本輪読会資料(11章)HBase本輪読会資料(11章)
HBase本輪読会資料(11章)
 
snappyについて
snappyについてsnappyについて
snappyについて
 
第四回月次セミナー(公開版)
第四回月次セミナー(公開版)第四回月次セミナー(公開版)
第四回月次セミナー(公開版)
 
第三回月次セミナー(公開版)
第三回月次セミナー(公開版)第三回月次セミナー(公開版)
第三回月次セミナー(公開版)
 
Pythonで自然言語処理
Pythonで自然言語処理Pythonで自然言語処理
Pythonで自然言語処理
 
HandlerSocket plugin Client for Javaとそれを用いたベンチマーク
HandlerSocket plugin Client for Javaとそれを用いたベンチマークHandlerSocket plugin Client for Javaとそれを用いたベンチマーク
HandlerSocket plugin Client for Javaとそれを用いたベンチマーク
 
Yammer試用レポート(公開版)
Yammer試用レポート(公開版)Yammer試用レポート(公開版)
Yammer試用レポート(公開版)
 
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
掲示板時間軸コーパスを用いたワードトレンド解析(公開版)
 
中国と私(仮題)
中国と私(仮題)中国と私(仮題)
中国と私(仮題)
 
不自然言語処理コンテストLT資料
不自然言語処理コンテストLT資料不自然言語処理コンテストLT資料
不自然言語処理コンテストLT資料
 
n-gramコーパスを用いた類義語自動獲得手法について
n-gramコーパスを用いた類義語自動獲得手法についてn-gramコーパスを用いた類義語自動獲得手法について
n-gramコーパスを用いた類義語自動獲得手法について
 

WebHookの調査と実装

  • 2. 1 はじめに Web 上のコンテンツの更新検知は、今までは対象コンテンツを網羅的にクローリングする 方法がスタンダードであったが、コンテンツの数が膨大な事による処理負荷の増大や更新 検知のリアルタイム性に問題があった。 問題を解決する方法としてコンテンツ側が更新時に更新情報を他アプリケーションに通知 する、という手段があるが、その手段のひとつとして「WebHook」という考え方が一部の Web サービスで流行し始めている。 今回は WebHook についての調査と、実際に WebHook の概念を用いたデモアプリケーシ ョンの作成を行った。その紹介を以下行う。 2 WebHook について WebHook は、Web サービスの更新情報を他の Web サービスに通知するための概念である。 情報の通知は HTTP の POST メソッドを使用して送信される。 WebHook については「HTTP の POST メソッドを使用して情報を通知する」という大枠 の概念は定義されているものの、パラメータ名やデータフォーマットなど細かい仕様につ いては定義されていない。 「 あ る サ ー ビ ス の 更 新 情 報 を POST 経 由 で 他 サ ー ビ ス に 通 知 す る 」 と い う 方 式 が WebHook だ、とゆるやかに認識されているようである。 WebHook が日本で著名になったきっかけとして、株式会社はてなの提供するサービス 「はてなブックマーク」が WebHook に対応したことが挙げられる[1]。 はてなブックマークでは「自分がブックマークをした時」「自分のブックマークに対して はてなスターが付与された時」などに WebHook が送られるようである。 なお、WebHook の概念を踏襲した一実装として、Google が「PubSubHubBub(パブサブ ハバブ)」というプロトコルを公開している[2]。PubSubHubBub については後述する。 3 WebHook の一実装~PingHook について WebHook の検証の一環として、WebHook の概念を用いたデモアプリ「PingHook」[3]を 作成した。 3.1 PingHook とは PingHook は、ブログの update ping(更新 ping)を受信して、WebHook 形式に変換して Hook を送信するアプリである。 Google の提供するクラウド環境、GAE/J(Google App Engine for Java)上で動作してい る。 2
  • 3. PingHook では、update ping 受信用の URL の作成が行える。URL 作成時に、この URL で ping を受信した時にどの WebHook 対応サーバに Hook を送信するかを設定する。 こちらで作成した URL をブログサービスの update ping 送信先に指定すると、ブログ記 事更新時に PingHook を介して他サービスに WebHook を送信すことができる。 動作イメージとしては以下の図のようになる。 3.2 Pin g Hook の動作フロー PingHook の内部動作フローを、フローチャートで記す 3
  • 4. 3.3 Pin g Hook の URL 作成 update ping 受信用の URL の作成は、PingHook にログインし、「新たに登録する」から 以下の情報を入力すると行える。 WebHook 送信先の URL user key(update ping URL 生成の際に使用します。未指定の場合 はログインアカウントが割り振られます) データフォーマット(PingHook 独自/PubSubHubBub) WebHook 送信タイミング(記事更新時に常に/初回のみ) こ ち ら で 作 成 し た URL を 、 各 ブ ロ グ サ ー ビ ス の update ping 送 信 先 に 指 定 す る と 、 PingHook が使えるようになる。 4
  • 5. 3.4 Pin g Hook から送信されるパラメータ PingHook から WebHook サーバへは、以下のパラメータが送信される。 blogname ブログ名 blogurl ブログの URL entryurl 記事 URL entrytitle 記事タイトル entrytext 記事本文(HTML タグは削除済み。128 文字以上の場合は以降は削除) urls 記事中に含まれる URL。複数渡される場合はカンマ文字を区切り文 字とする。 imgs 記事中に含まれる画像 URL。複数渡される場合はカンマ文字を区切 り文字とする。 ※ブログサービスの更新 ping に更新記事の URL が渡されていない場合、更新記事の情報が取 得できない場合は、entryurl、entrytitle、entrytext、urls、imgs の値は送信されません。 3.5 動作デモ 動作デモとして、ブログの更新内容を PingHook~WebHook 対応サービスを経由してメー ル送信する、というデモを試してみる。 WebHook 対応サービスは、今回は「HookHub」というサービスを使用した[4]。 HookHub は、受信した WebHook 形式のデータを、JavaScript 文法のユーザ定義文で自 由に加工することができるサービスである。 たとえば、受け取った WebHook の内容を所定の twitter アカウントに post する、といっ た事が可能である。 今回は、ブログの記事タイトルをメールタイトル、記事 URL をメール本文としてメール 送信するという定義文を作成し、そちらを使用した[5]。 var url = stash.params.entryurl ? stash.params.entryurl : stash.params.blogurl; var title = stash.params.entrytitle ? stash.params.entrytitle : stash.params.blogname; mail("[update blog]" + title, url); ブログサービスは、ameblo を使用した[6]。 3.5.1 ping 送信先設定 以下のように、PingHook で作成した URL を登録。 5
  • 6. 3.5.2 記事を書く 記事エディタから以下のような記事を書く。タイトルは「PingHook テスト」とした。 3.5.3 記事の投稿~メールの送信 記事を投稿すると、投稿記事の update ping が PingHook に送信される。 PingHook では update ping を WebHook 形式に変換した上で HookHub に Hook 送信。 HookHub では受信内容をメールで送信、という流れになる。 今回は以下のようなメールが送信された。 6
  • 7. 3.6 考察 上述のように、ブログの更新内容を PingHook を使用して他サービスに Hook し、任意の 処理を追加することができた。 今回は単純なケースだったが、記事に画像が含まれていたら twitter に post、記事に特定 のニュースサイトへのリンクが含まれていたら facebook に投稿、といったような処理も WebHook を使用することで容易に実現が可能である。 4 PubSubHubBub(パブサブハバブ)について PubSubHubBub は、Google が実装した WebHook の考え方を取り入れた一実装である。 更新情報を通知する Publisher と受信する Subscriber の間に Hub を用意し、Hub を介し て更新情報の通知を行えるようにしている。 日本では、livedoor blog ならびに livedoor reader が PubSubHubBub 対応をしたことで知 名度が上がった[7]。 4.1 PubSubHubBub の処理の流れ 以下の図は、PubSubHubBub の説明として Google が用意しているスライド資料から引用 したものである[8]。 まず Subscriber は、自分が購読をしたい URL を Hub に登録する。 7
  • 8. Hub とのネゴシエーションに成功すると、購読 URL の登録が行える。 この方式により一方的に Subscriber に情報を通知することが出来ないため、spam などの 抑制が可能である。 Publisher は、自身のサービスでコンテンツが更新された際に Hub に情報を通知する。 初回については、更新通知した内容が本当に存在するかどうかを確認するために、 Hub が Publisher に対してリクエストを発行し、情報の所在有無を確認する。 8
  • 9. 一度登録された Publisher の URL は 、都度更新しなくても自動的にクローリングされる ようだ。 (こちらについては Hub の内部実装次第の可能性があるため、必ずそうであるかどうかは 定かではない) Subscriber が登録した URL に更新情報が存在する場合は、Hub が Subscriber に対して情 報を通知する。 PubSubHubBub のプロトコルについては以下の URL にて記載されているので、詳しくは こちらを参照いただきたい。 http://pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.2.html 9
  • 10. 4.2 PubSubHubBub のメリット いくつか考えられるが、  プロトコル・仕様が規定されることで実装の混乱が防げること  Publisher は Hub の存在だけを知っていれば良いこと。データの受信先が増えても Publisher が複数のデータ通知をしなくても済む。  同様に、Subscriber も Hub の存在だけを知っていれば良いこと。Publisher から不 要なトラフィックが直接送られてくることも無い といった事が挙げられる。 Publisher~Subscriber 間の無駄なトラフィックが抑制できること。信頼されたメッセー ジのみ授受ができることが大きなメリットと考えられる。 デメリットとしては、Hub にトラフィックが集中する可能性があること、だろうか。 5 考察とまとめ Web のリアルタイム性を向上するための方法として注目を集めている WebHook について、 調査ならびにデモアプリの実装を行った。 今後 Web の世界は、twitter などの隆盛でも感じられるように、よりリアルタイム性が求 められてくると考えられる。 Web サービスの開発担当者も、この潮流と、その中で用いられている技術トレンドについ てキャッチアップし、サービスに展開していく事が望ましいと思われる。 6 参考文献・URL [1]http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA %A5%D6%A5%C3%A5%AF%A5%DE%A1%BC%A5%AF%20Web%20Hook [2] http://code.google.com/p/pubsubhubbub/ [3] http://just-do-pinghook.appspot.com/top [4] http://www.hookhub.com/ [5] http://www.hookhub.com/moaikids/hook/13002 [6] http://ameblo.jp/ [7] http://www.itmedia.co.jp/news/articles/0908/18/news090.html [8] http://docs.google.com/present/view?id=ajd8t6gk4mh2_34dvbpchfs 10