スマホからはてなブックマークを効率的に収集するためのRuby DSLを作った


はてブ中毒なのでRubyPicoで動くDSLを書いてみました。

rubypico/hatebu

特徴

  • DSL: Rubyを使って効率的にブックマークを収集
  • 履歴: 同じURLを何度も表示しない

特に履歴機能が欲しくて作りました。特定のタグから情報を収集するときに何度も同じURLが表示されてしまうのを防いでくれます。

インストール

AppStoreからRubyPicoをインストールします。

rubypico/hatebu のソースコードを全てダウンロードすればよいのですが、GitHubからソースコードをダウンロードできるライブラリがあるので先にそれをインストールします。

  • RubyPicoGemsを参考にgithub_download.rbをインストール
  • github_download.rbを起動
  • hatebuを指定してライブラリをダウンロード
    • rubypico/xxxx のレポジトリは xxxx でインストール可能です

使い方

  1. 以下のスクリプトをRubyPicoの.appフォルダ以下にhatebuなどの名前で置きます
  2. Appタブにファイル名が表示されるのでタップして実行します
  3. 実行するたびに新しいブックマークが表示されれば成功です。
require "hatebu/dsl"

history_file = File.join(Dir.documents, "hatebu", ".hatebu_history")

history(history_file) do
  case rand(100)
  when 0..29
    show category("総合").take(4)
    c = ["テクノロジー", "アニメとゲーム"]
    show category(c.sample).take(3)
    show category("動画").take(2)
  when 30..59
    show tag("ruby").take(3)
    show tag("mruby").take(3)
    show text("docker").take(3)
  when 60..89
    show tag("mac").take(3)
    show title("airpods").take(3)
    show title("airpods", sort: "popular").take(3)
  else
    show category("世の中").take(2)
    show category("政治と経済").take(2)
    show category("暮らし").take(2)
    show category("エンタメ").take(2)
    show category("おもしろ").take(2)
  end
end

コメント付きのソースコードです。

require "hatebu/dsl"

# ヒストリファイルとして hatebu/.hatebu_history を選択
history_file = File.join(Dir.documents, "hatebu", ".hatebu_history")

# このブロック内は hatebu/.hatebu_history の影響を受ける
# 1. すでに履歴に含まれるURLは表示しない
# 2. ブロックを抜けたときに今回表示したURLを履歴ファイルに追加して保存
history(history_file) do
  # 乱数抽選して以下のどれかを表示する
  case rand(100)
  when 0..29
    # その1: 主要カテゴリから表示
    # 総合の上位4つを取り出して表示する
    show category("総合").take(4)
    # テクノロジーかアニメとゲームのどちらかの上位3つを表示
    c = ["テクノロジー", "アニメとゲーム"]
    show category(c.sample).take(3)
    # 動画の上位2つを表示 (はてブの動画カテゴリ割と好き)
    show category("動画").take(2)
  when 30..59
    # その2: テクノロジタグから表示
    # 興味の矛先はよく変わるので定期的に変更する、今だと"ディープラーニング"とか
    show tag("ruby").take(3)
    show tag("mruby").take(3)
    show text("docker").take(3)    
  when 60..89
    # その3: 趣味タグから表示
    show tag("mac").take(3)
    show title("airpods").take(3)
    # 普段は新着から表示されるがsort: popularだと人気順になる
    show title("airpods", sort: "popular").take(3)
  else
    # その4: 普段見ないカテゴリもたまに表示
    show category("世の中").take(2)
    show category("政治と経済").take(2)
    show category("暮らし").take(2)
    show category("エンタメ").take(2)
    show category("おもしろ").take(2)
  end
end

Rubyで書けるので他にも色々できるんじゃないかと思っています。今は曜日毎に表示するタグを変えてみようかな、とか思っています。

リファレンス

rubypico/hatebu#reference をどうぞ。DSL部分のソースコードはdsl.rbです。