Timeline Aggregationsは、構造化された興味深い形態にAggregate Stories(要約されたアクション投稿)を並べて、タイムライン上に表示する方式です。Dev AppでAggregate Storiesをカスタマイズし、サンプルデータを基にプレビューすることができます。Open Graphを用いることで、permission dialogでもタイムライン上の要約プレビューが表示されます。

ユーザがアプリケーションをインストールし、アクションがTimelineに投稿されると、アクティビティ投稿はAggregated Stories上に最適に表示されるようになります。タイムライン表示上での最適化には、以下の二つの要素が用いられます。

  • Data availability - 任意の期間において、要約を形成するに足る十分なアクション量とユーザのフィードバック
  • Feedback - ユーザがタイムライン上でどのように要約と関わったか(いいね!、コメント、ピンなどのポジティブな動作と、アプリケーション削除、要約削除などのネガティブな動作)を基にして算出されます。アプリケーションのanalyticsでユーザのフィードバックを見て、Open Graphアプリケーションを最適化してください。
アプリケーションが複数のAggregate Storiesを定義すると、Timeline上にReportsとして表示されます。Reportsは要約された投稿の集合で、Graph上で表示する期間に応じて表示されます。これにより、一貫性のある閲覧体験が提供され、アプリケーションからの情報が消化しやすくなります。dev app上でAggregated Storiesの設定をするときは、重要度順にソートして、最も重要な要約から順に表示することを確かめてください。アプリケーションのReportが生成されるとき、主要なAggregate Storyが上部にあり、(要約を作るだけの情報があれば)他の要約は二番目以降の場所に表示されます。以下はReport for a Recipeアプリケーションの例で、Recipes I'm Planning on Makingの4つの要約が上部に表示されています。

attachment


Defining Aggregate Stories

Dev AppのOpen GraphタブにあるAdd Aggregate Storyをクリックして設定を始めます。



attachment2


Aggregate Storyは以下の各フィールドで設定します。
  • Data to Display - 要約に表示されるデータのタイプを指定します。要約にはオブジェクトもしくはアクションを表示できます。
  • Layout Style - 要約表示のフォーマットです。Timeline Previewを使ってプレビューできます。
  • Sort By - 要約中で表示されるアイテムを選びます。現在選べるのは、"Most Recent X", "Favorite X"と"Custom..."です。Xには表示するデータのオブジェクトタイプもしくはアクションタイプが入ります。カスタムを選択すると、アクションの終了時刻やアクションのカウント(最大もしくは最小)など、データのカスタムプロパティに基づいて表示順を選べます。
  • Aggregation Title - ユーザが見ることになる要約タイトルを設定します。タイトルが正しくアクションを表すように気をつけてください。例えば"Favorite Run"と設定したのなら、人気の有無ではなくお気に入りののアクションが出るようにします。人気のものを出すのなら"Most popular Runs"と設定すべきです。Timeline Previewを使ってプレビューできます。
  • Caption Lines - 要約に表示されるキャプションを指定します。テキストとTemplate Languageを用いて生成することができます。In Timelineボックスでプレビューが可能です。
  • Advanced - オプションのパラメータ設定用に開閉するセクションです。Group By(アクション表示の要約には使えません)とFilterの設定です。

Data to Display

要約には、いかなるアクションタイプやオブジェクトタイプでも表示できます。

Object Type

要約が"Routes I run most"や"Restaurants I visit most"と表示されるように"[Object Types] I [Action Type] most"形式で設定するには、オブジェクトタイプ(例えばRoutesもしくはRestaurants)をAggregation Contentとして選択します。オブジェクトに対してgroup byを指定することで、オブジェクトに対して行われた個々のアクションは見れなくなり、{count}プロパティを用いて、オブジェクトに対して行われたアクションの回数が表示されるようになります。

Action Type
"Most Recent Books Read"や"Most Recent Books Read"のように"Most Recent [Action Type]"を指定してアクションの要約を表示する場合、アクションタイプ(例えばrunやread)をAggregation contentに指定します。アクションタイプを表示する要約の場合、個々のアクションにもアクセスできます。要約に基づくアクション{count}は常に1となります。

たとえば、RecipeアプリケーションがCook, Planning to MakeというアクションとRecipe, Mealというオブジェクトを持っているとしたら、、、

  • Recipeオブジェクトでgroup byする設定で、オブジェクトに対して何回アクションが行われたかを得ることができます。例えばRecipe I Make The Mostを設定するとして、RecipeオブジェクトをAggregation Contentに指定します。
  • アクションインスタンスのプロパティを設定すると、インスタンス固有の情報に対してアクセスできるようになります。例えば、RecipeをAggregation Contentに指定していては得られないような、レシピに対する評価にアクセスできます。



attachment3


Layout Style

選択できるレイアウトテンプレートの種類は以下の通りです。
  • List: ユーザのアクティビティを表示するにはこれです
  • Number: 単一の意味ある数値をハイライトするならこれを使用します。任意の期間中の走行距離や、投稿したレビューの数などです。
  • Poster: 単一の興味深いアクションもしくはオブジェクトが興味深い画像を持っていて、それをハイライトするにはこれを使います。画像はメインのTimeline上では90x90になり、アプリケーションのタブには(より大きな画像が用意されていれば)379x379の画像が使われます。より大きな画像を取得するには、オブジェクト生成時に複数の画像を指定し、高さ/横幅アトリビュートを指定してください。そうすると、大きなフォーマット時には大きな画像が選ばれます。
  • Gallery: オブジェクトの画像群が意味をなす場合はこれを使います。アルバムのカバー画像や、ランニングのコースの写真などです。

Sort By

要約の表示順を設定します。以下の選択肢から選択することができます。

  • "Most Recent": アクションのstart_timeプロパティの順に表示します。
  • "Favorite": 特定のアクションをオブジェクトに対して取った回数順に表示します。例えば"favorite songs"では、listenアクションを多く取ったsongオブジェクト順に表示されます。
  • Custom: アクションもしくはオブジェクトのプロパティでソートします。たとえばランニングの距離やペース順です。また、映画の評価順などです。

Aggregation Title

ユーザはTimeline上の各要約のタイトルを見ることになります。正確なタイトルを選択するよう気をつけてください。Timelineのどの箇所に要約が出るか分からないので、時間枠にとらわれるようなタイトルは避けてください。"Most Recent Photo Uploads"の代わりに"Photo Uploads"を使うなどです。

Captions using Text Templates

要約時には、Open Graph action / objectプロパティを閲覧用にフォーマットするテキストテンプレート言語を使うことができます。このテキストテンプレート言語は日付、時刻、通貨、その他をサポートしています。テンプレートは{...}の間に記述されます。

Example:

コースオブジェクトに紐づくRunアクションがあるとします。runの距離とペースを表示するには以下のようにします。

Ran {course.distance | sprintf(“%.2f”} miles in {time | duration}

これは、“Ran 7.4 miles in 42:37.”のように書き出されます。

Advanced

Filters - これが真の場合のみに要約を表示するオプションです。たとえば、映画のタイプ("タイプ"は映画オブジェクトのプロパティ)によってフィルタリングできます。

Group by - オブジェクトを表示する要約の場合にのみ有効なオプションです。このオプションでは、オブジェクトのプロパティによってgroup byできます。たとえば映画オブジェクトによってgroup byして、任意のタイプの映画を何回見たことがあるか表示できます。


Captions Using Text Templates

Aggregations Displaying Actions

アクションタイプのプロパティは{property-name}という形で参照します。たとえば、music.listenアクションからは、{song.title}のようにしてsongのtitleにアクセスします。

Aggregations Displaying Objects

オブジェクトタイプのプロパティは{property-name}という形で参照します。たとえばSongsの要約からは、{title}でアクセスします。アーティストの名前には{musician.title}で、アルバムのリリース日には{album.release_date}という具合です。

追加のプロパティには、アクションタイプもしくはオブジェクトタイプにプロパティ名を"."でつなげてアクセスします。いったんプロパティを参照したら、それをユーザの見やすい形にフォーマットし直す必要があるかもしれません。とくに数値や日付の場合です。

Referencing Properties within Nested Objects

アクションタイプやオブジェクトタイプの要約表示の際、一次プロパティには{property-name}のようにアクセスします。他のオブジェクトタイプを指し示している二次プロパティには、{property-name.second-level-property-name}のようにアクセスします。


Formatters

アクションタイプとオブジェクトタイプのプロパティは表示する前にフォーマットし直すべき場合があります。たとえば秒数や金額はコロンや"$"でフォーマットする必要があります。

プロパティ名とフォーマッター名をパイプで繋ぐことでフォーマットできます。以下のような形式で3つまでのフォーマッターを繋ぐことができます。

{property-name | formatter-name}

例:アクションのstart_dateをフォーマットします : {start_date | date}

"watch"アクションニはmovieプロパティがあります。movieのリリース日をフォーマットするには以下のようにします。
{movie.release_date | date(“F d, Y”)}

runアクションにはelapsed_timeプロパティがあります。時間を意味ある時間表示にフォーマットするには{elapsed_time | duration}の用に書きます。

projectオブジェクトに紐づくcompileアクションがあるとして、エラー数をフォーマットするには下記のように書きます。

There {count | pluralize(“was”, “were”)} {count | pluralize(“no”, “one”, count)} error{count | pluralize(“s”)}

Formatter NameDescription
dateDateTimeを可読性ある文字列へ変えます。デフォルトは“D, d M Y H:i:s”です。

例:
{start_time | date} => Wed, 10 Aug 2011 12:07:12
{start_time | date(“M d, Y”)} => Aug 10, 2011
{start_time | date(“F d, Y”)} => August 10, 2011
{start_time | date("fb_absolute")} => July 24
{start_time | date("fb_relative")} => One week ago

それ以外の利用可能な日付フォーマットはhttp://php.net/manual/en/function.date.phpをご覧ください。
duration秒数を{hours}:{minutes}:{seconds}へ(hoursがなかったら{minutes}:{seconds}へ)と切り替えます。

例: {run_duration | duration}

run_duration = 42;
{run_duration | duration} => 0:42

run_duration = 360
{run_duration | duration} => 6:00

サポートされるタイプ: Integer / Float
currency数値を小数点以下2桁までの数値へと切り替えます。"$"のような通貨マークは文字列で追加すべきです。

例: {price | currency}
price = 42
{price | currency} => 42.00

price = 1234.5678
{price | currency} => 1234.56

サポートされるタイプ: Integer / Float
sprintfPHPのフォーマットを用いて任意のフォーマッティングを行います。扱うことができる文字列はこちらを参照してください

サポートされるタイプ: Integer / Float
fb_number_formatサポートされるタイプ: Integer
pluralize以下をご覧ください

サポートされるタイプ: Integer

Pluralization

場合によっては、数値が0, 1もしくは2以上であるかによってフォーマットには異なる単語が使われるべきです。特殊な"pluralize"フォーマッターがこの目的用に用意されていて、以下のように利用できます。

numeric-value | pluralize(“{zero-string}”, “{one-string}”, “{many-string}”)

例: {integer | pluralize("no things", "1 thing", "value things")}

上記のvalueはフォーマットされる数値で置き換えられるマジックストリングだということに気をつけてください。上記のケースでは、"integer"が42だった場合、"42 things"へと変換されます。

例: There {count | pluralize(“was”, “were”)} {count | pluralize(“no”, “one”, count)} error{count | pluralize(“s”)}

There was no error. There was one error. There were no errors.

Note: 連結できるフォーマッターは3つまでです。それ以上はエラーとなります。


Operators

Operatorはデータのリストに対して算術処理を行います。例えばrunアクションが要約表示されるとして、最も長い距離を走ったデータは以下のように算出できます。

{course.distance | max}

もしくは、歌を聴いた時間の合計は以下のように算出します。

{song.duration | sum}

Operator NameDescription
sumサポートされるタイプ: Integer / Float
maxサポートされるタイプ: Integer / Float
minサポートされるタイプ: Integer / Float