独自の Action Streams プラグインを作成する
Action Streams では、簡単なプラグインを作成することで、独自に外部サービスを追加することが可能です。以下、Action Streams に外部サービスを追加するプラグインの作成方法を説明します。
外部サービスを追加するためには Movable Type のプラグインを作成し、リポジトリにウェブサービスの情報を追加します。プラグイン作成の詳細については、以下のドキュメントをご確認ください。
外部サービスの更新情報の取得はXPathまたはWeb::Scraperを利用します。XPathおよびWeb::Scraperの詳細については、ここでは説明しません。記事の最後に参考となるリンクを載せてありますので、ご参照ください。
profile_services と action_streams
新しいウェブサービスを追加するためには、profile_services と action_streams という二種類のリポジトリに情報を追加します。
profile_services は、ウェブサービス単位で作成し、アカウント情報を管理するさいのふるまいを指定します。一方、action_streams は、profile_services で管理されているアカウント情報にもとづいて、外部サービスの更新情報を取得する際のふるまいを指定します。
以下は、実際の ActionStreams プラグインでの、「Vox」に関する部分を抜粋したものです。
profile_services:
vox:
name: Vox
url: http://{{ident}}.vox.com/
ident_label: Vox name
ident_suffix: .vox.com
service_type: blog
action_streams:
vox:
favorites:
name: Favorites
description: Public assets you saved as favorites
html_form: '[_1] saved <a href="[_2]">[_3]</a> as a favorite'
html_params:
- url
- title
class: Vox
photos:
name: Photos
description: Your public photos in your Vox library
html_form: '[_1] posted <a href="[_2]">[_3]</a>'
html_params:
- url
- title
url: 'http://{{ident}}.vox.com/library/photos/rss.xml'
rss:
thumbnail: media:thumbnail/@url
tags: category
posts:
name: Posts
description: Your public posts to your Vox
html_form: '[_1] posted <a href="[_2]">[_3]</a>'
html_params:
- url
- title
url: 'http://{{ident}}.vox.com/library/posts/atom.xml'
atom:
tags: category/@label
profile_services と action_streams の二つのトップレベルのエントリ以下に、同じ識別子をキーに持つハッシュを追加していきます。
識別子となるキー名には英数のみとしてください。アンダーバー『_
』は利用できません。
profile_services に指定する項目の詳細
name
-
サービスの名前を指定します。
url
-
そのサービスでのユーザープロフィールのページを指定します。
{{ident}}
の部分が、ユーザーが入力したアカウント名に置き換えられます。 icon
-
アイコンの URL を指定します。アイコンは mt-static 以下に保存し、プラグインのスタティックルートディレクトリからの相対 URL を書くとよいでしょう。
ident_label
-
ユーザーがアカウント名を入力する入力欄のラベルです。
ident_example
-
アカウント名の例です。アカウントは、サービスによってユーザー入力の英数字だったり、自動生成された数字列だったりとさまざまです。ユーザーが迷わないように、適切な例を指定しましょう。
ident_hint
-
アカウント入力画面にヒントを表示できます。
can_many
-
各ユーザーごとに複数のプロフィールを作成可能とする場合には1を指定します。
deprecated
-
サービスが停止した場合など、更新情報の取得を行いたくない場合に
1
を指定します。 service_type
-
サービスの種類を指定します。
mt:OtherProfiles
タグでサービスの種類によって絞り込みを行う場合などに利用されます。
action_streams に指定する項目の詳細
profile_services で登録した各サービスについて、更新情報を取得可能なストリームの詳細を記述します。一つのプロフィールごとに、複数のストリームを結びつけることができます。
name
-
ストリームの名前を指定します。
description
-
ストリームの説明を記述します。
html_form
-
html_form: '[_1] commented on <a href="[_2]">[_3]</a>'
テンプレートタグ
mt:StreamAction
で、各アクションの内容を表示する場合のテンプレートを指定します。各空欄 ([_1]
のような表記)には、サービス登録者の表示名と、次項で指定したパラメータが入ります。 html_params
-
html_params: - url - title
html_form の空欄を埋めるイベントの要素を配列で指定します。順番がそのまま空欄の番号に対応します。
html_params の要素数が html_form の空欄数よりひとつ少ない場合、最初の空欄 (
[_1]
) には該当するユーザーのユーザー名が入ります。 url
-
url: 'http://feeds.backtype.com/{{ident}}'
ストリームのURLを指定します。
{{ident}}
の部分が、このサービスのアカウント名に置き換えられます。 atom
,rss
,xpath
,scraper
-
フィードの解析についてのルールを指定します。詳細は後述します。
fields
-
追加フィールドが必要な場合に、フィールド名を配列で指定します。
fields: - queue
以下のフィールドについては、デフォルトで準備されていますので、記述する必要はありません。
- title
- url
- thumbnail
- via
- via_id
- tags
上記のうち
tags
フィールドには配列を指定してください。 class
-
より複雑な処理が必要な場合など、Perl で直接動作をプログラミングしたい場合に指定します。ActionStreams::Event を継承した独自クラスを作成し、そのクラス名を指定してください。詳細については、ActionStreams プラグインの Event クラスのソースコードを参考にしてください。
フィードの解析について
ActionStreams では、各ストリームのフィード (またはWebページ) を定期的に取得します。フィードの内容は各ストリームごとに異なりますため、具体的な取得方法を指定する必要があります。
atom
, rss
, xpath
, scraper
のどれかひとつを指定します。
xpath
-
xpath を利用して XML 文章から更新情報を取得します。
scraper
-
Web::Scraper を利用して HTML ページから更新情報を取得します。
atom
-
ストリームの更新情報が典型的な atom フィードの場合に利用します。
atom: 1
以下、デフォルトの設定の場合に解析する atom フィードの各要素と、それらを保存する ActionStreams のフィールド名の対応表です。
フィールド名 XPath 式 created_on published modified_on updated title title url q{link[@rel='alternate']/@href} via q{link[@rel='alternate']/@href} via_id id identifier id rss
-
ストリームの更新情報が典型的な rss フィードの場合に利用します。
rss: 1
以下、デフォルトの設定の場合に解析する rss フィードの各要素と、それらを保存する ActionStreams のフィールド名の対応表です。
フィールド名 XPath式 title title url link via link created_on pubDate thumbnail media:thumbnail/@url via_id guid identifier guid atom
,rss
については、一部の要素のみ取得ルールを変更をすることも可能です。変更する要素名をキーに、置き換える情報をXPathで指定した値をもつハッシュを指定します。rss: title: hoge