2014/08/12

[Mikutter] データソースを作ってみたい!

データソースの作成がしてみたいので、ホームタイムラインと同じ物を表示するだけのデータソースを定義してみる。

そもそもデータソースって何?

「抽出タブ」で選択できるデータの取得元。抽出タブの設定でチェックを入れると、そのデータソースのメッセージがタブに表示されるようになる。

「抽出タブ」を全く使っていなかったので、自分にとって「得体のしれない何か」であったが、今回の勉強でこんなもんかと解った気がしますわ。

「抽出タブで対応できないような特定のツイートを抽出する」、「外から情報撮ってきて表示する」ような機能はデータソース使うのがスマートっぽいですね。

じゃあ作ってみる

はい、やっていきましょう。

前準備

勉強用プラグイン作成。

cd ~/.mikutter/plugin/
mikutter.rb generate study_datasource
mikutter.rb spec study_datasource

コーディング

データソースを作成するにあたり、最低限必要な作業は下記の通り。

  1. 提供するデータソースの宣言(登録)
  2. 1 で宣言したデータソースにメッセージを追加する

これだけ。以下、今回作った具体的なコード。

.mikutter.yml

---
slug: :study_datasource
depends:
  mikutter: 3.0.4
  plugin: []
version: '1.0'
author: 
name: study_datasource
description: データソースの勉強するよー

study_datasource.rb

# -*- coding: utf-8 -*-
# mikutter datasource の勉強。
# ホームタイムラインのクローンデータソースを作成する。
#
# データソース作成手順としては、
#     1. filter_extract_datasources で、「こんなデータソースを作るよー」と宣言
#     2. データソースにメッセージを追加したいタイミングで
#        「:extract_receive_message」を呼ぶ。
#         その際、引数に「データソースに紐付くシンボル」を渡す。
# という感じ良いみたい。
#
# 既存タイムラインからの抽出でない場合は、
#     1. 自前でデータ取得ループ作成
#     2. 自前でメッセージ作成
#     3. 「:extract_receive_message」を呼ぶ
# となる感じですね。

Plugin.create(:study_datasource) do
    DATASOURCE_NAME = 'clone_home_timeline'

    # このプラグインが提供するデータソースの定義を組み立てて返却
    def datasources
        ds = {clone_home_timeline: "ホームタイムラインのクローン".freeze}
        ds[DATASOURCE_NAME.to_sym] = DATASOURCE_NAME
        ds
    end

    # 提供するデータソースの登録
    # 登録は、このプラグインで定義したデータソースを
    # 引数で渡ってきたデータソースにマージすることで行う。
    filter_extract_datasources { |ds|
        p "Add My Datasources"
        [ds.merge(datasources)]
    }

    # データソースにメッセージを追加
    # on_update で受け取ったメッセージ全てをデータソースに突っ込んでいる。
    on_update do |service, messages|
        messages.each do |message|
            p "Add message to #{DATASOURCE_NAME}"
            Plugin.call(:extract_receive_message, DATASOURCE_NAME.to_sym, [message])
        end
    end
end

参考文献

0 件のコメント: