独自の 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 - titlehtml_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