カテゴリー
ブログ

LOTD の仕組み

備忘録として、LOTD (Lisf Of The Day) の仕組みを記述する。

概要

公開されたリスト投稿から適切なリストランダムに選んでLOTDとし、1日に1回配信する。

詳細

公開されたリスト投稿

公開されたリスト投稿とは、次の条件をすべて満たす投稿(記事)。

  • 投稿タイプ: 投稿 (post)
  • カテゴリ: list
  • ステータス: 公開

適切なリスト

適切なリストとは、公開されたリスト投稿のなかで次の条件をすべて満たす投稿。

  • “ASIN” タクソノミーのタームが関連付けられている
    (書籍からのリストを配信対象とする。書籍が引用されていないリストは自作リストやまとめリストなど配信向きでないものが多いと考えた)
  • “not-lotd” カスタムフィールドが存在しない
    (書籍を含んでいても配信向きでないと判断したものを手動で排除するための識別フィールドを設けた)

ランダムに選んで

上記の条件を満たすリストから、MySQL の RAND(seed) 関数を使ってリストを1つ選ぶ。seed に ”20201231” のような日付を元にした文字列を与えることで、日替わりでランダムなリストを選べる。

// 今日の日付を YYYYMMDD 形式で取得
$seed = date_i18n( 'Ymd' );

// リスト投稿が属するカテゴリ
$list_cat = get_category_by_slug( 'list' );

// LOTD の選択
$lotd = get_posts( array(
	'post_type'      => 'post',
	'category'       => $list_cat->cat_ID,
	'post_status'    => 'publish',
	'tax_query'      => array(
		array(
			'taxonomy' => 'asin',
			'operator' => 'EXISTS',
		),
	),
	'meta_query' => array(
		array(
			'key'     => 'not-lotd',
			'compare' => 'NOT EXISTS',
		)
	),
	'posts_per_page' => 1,
	'orderby'        => "RAND($seed)",
) );

RAND(seed) の結果は seed に対して一意に定まる。したがって日付をseedに用いれば、母集団が変わらないかぎりは、何日にどのリストがLOTDとして選ばれるかを事前に知ることができる。この性質を利用して、事前に「明日のLOTD」を運営者に配信して内容をチェックしている。

LOTD

システム上、LOTD とは次の条件を満たす投稿。

  • カテゴリ: 今日のリスト

毎日 0:01 にバッチ処理を走らせ、「今日のリスト」カテゴリを空にしたうえで、上記のロジックで選んだリストを「今日のリスト」カテゴリに入れる。

1日1回配信

メール

毎日 6:05 にバッチ処理を走らせ、LOTD を エックスサーバーのメーリングリストに投稿する。

Feed

WordPress の標準機能でカテゴリごとの feed が出力されるので、「今日のリスト」カテゴリのフィードが LOTD のフィードになる。

twitter

上記のFeedを delvr.it を利用して @listfreak にツイートさせる。

「LOTD の仕組み」への1件の返信

コメントを残す