データソースの作成がしてみたいので、ホームタイムラインと同じ物を表示するだけのデータソースを定義してみる。
そもそもデータソースって何?
「抽出タブ」で選択できるデータの取得元。抽出タブの設定でチェックを入れると、そのデータソースのメッセージがタブに表示されるようになる。
「抽出タブ」を全く使っていなかったので、自分にとって「得体のしれない何か」であったが、今回の勉強でこんなもんかと解った気がしますわ。
「抽出タブで対応できないような特定のツイートを抽出する」、「外から情報撮ってきて表示する」ような機能はデータソース使うのがスマートっぽいですね。
じゃあ作ってみる
はい、やっていきましょう。
前準備
勉強用プラグイン作成。
cd ~/.mikutter/plugin/
mikutter.rb generate study_datasource
mikutter.rb spec study_datasource
コーディング
データソースを作成するにあたり、最低限必要な作業は下記の通り。
- 提供するデータソースの宣言(登録)
- 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
参考文献
- mikutter-nested-quote/nested_quote.rb at master · toshia/mikutter-nested-quote : https://github.com/toshia/mikutter-nested-quote/blob/master/nested_quote.rb
- mikutter-datasource-rss/mikutter-datasource-rss.rb at master · moguno/mikutter-datasource-rss : https://github.com/moguno/mikutter-datasource-rss/blob/master/mikutter-datasource-rss.rb
0 件のコメント:
コメントを投稿