Movable Type CMSプラットフォーム Movable Type
ドキュメントサイト

Manualマニュアル

独自の Action Streams プラグインを作成する

最終更新日: 2017.10.06

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式
titletitle
urllink
vialink
created_onpubDate
thumbnailmedia:thumbnail/@url
via_idguid
identifierguid

atom, rss については、一部の要素のみ取得ルールを変更をすることも可能です。変更する要素名をキーに、置き換える情報をXPathで指定した値をもつハッシュを指定します。

rss:
    title: hoge
目次