Radioactivity
ページビューでエネルギーレベルが増加し、設定可能な減衰プロファイルに従って時間とともに減少するエネルギーレベルを通じて、コンテンツの人気度を追跡するフィールドタイプを提供するDrupalモジュールです。
radioactivity
インストール
composer require 'drupal/radioactivity:^4.1'
composer require 'drupal/radioactivity:^4.0'
概要
Radioactivityモジュールは、革新的なエネルギーベースのシステムを通じて、サイト構築者がコンテンツの人気度を測定・追跡できるようにします。コンテンツが閲覧されると、エネルギーが「放出」され、コンテンツのradioactivityフィールドに追加されます。時間の経過とともに、このエネルギーは設定可能なプロファイルに従って減衰し、履歴的な閲覧数と最近の関心の両方を反映した動的な人気ランキングを可能にします。
このモジュールは2つのフィールドタイプを提供します:推奨される「Radioactivity Reference」フィールド(より良い編集ワークフローのために別のエンティティにエネルギーを保存)と、レガシーの「Radioactivity」フィールド(非推奨、エンティティに直接エネルギーを保存)です。Viewsモジュールと組み合わせることで、古いコンテンツが自動的に減衰する人気コンテンツ、トレンド記事、最も閲覧されたアイテムのリストを作成できます。
主な機能には、3つのエネルギープロファイル(単純な閲覧カウント用のCount、時間ベースの減衰用のLinear、半減期指数減衰用のDecay)、cron処理のための設定可能な粒度、処理オーバーヘッドを制限するカットオフ閾値、人気ベースのリスト作成のための完全なViews統合が含まれます。また、referenceフィールドタイプを通じて多言語サイトもサポートしています。
Features
- cronの更新中に編集上の競合を防ぐため、エネルギー値を別のエンティティに保存するRadioactivity Referenceフィールドタイプ
- コンテンツエンティティに直接エネルギーを保存するレガシーRadioactivityフィールドタイプ(非推奨)
- 3つのエネルギープロファイルオプション:Count(増加のみ)、Linear(1秒ごとに1減少)、Decay(半減期ごとに50%減少)
- cron中に減衰計算が処理される頻度を制御する設定可能な粒度
- 人気度の減衰率を微調整するための指数減衰プロファイル用の半減期時間設定
- 低エネルギー値を自動的にゼロにして処理オーバーヘッドを削減するカットオフ閾値
- 新しいコンテンツに初期の人気ブーストを与えるデフォルトエネルギー設定
- コンテンツが表示されたときにエネルギーを追加し、オプションで現在のエネルギー値を表示するEmitterフォーマッター
- 追加のエネルギーを放出せずに現在のエネルギーレベルのみを表示するValueフォーマッター
- 人気順にソートされたコンテンツリストを作成するためのエンティティリレーションシップを通じたViews統合
- 言語ごとまたは共有の人気追跡が可能なRadioactivity Referenceフィールドの多言語サポート
- 自動化されたワークフローのための「Energy is below cutoff」イベントによるRulesモジュール統合
- 柔軟なストレージオプション:データベース(デフォルト)または高トラフィックサイト向けのファイルベースRESTストレージ
- 既存のコンテンツの空のreferenceフィールドを修正するDrushコマンド
- 大量のエンティティを処理する際のメモリ問題を防ぐキューベースの処理
Use Cases
人気記事ブロック
サイトで最も人気のある10件の記事を表示するブロックを作成します。decayプロファイルを持つRadioactivity Referenceフィールドを記事コンテンツタイプに追加します。Full content表示モードでEmitterフォーマッターを設定します。radioactivityフィールドへのリレーションシップを持つ記事のViewを作成し、Energy降順でソートし、10件に制限します。ビューをサイドバーにブロックとして配置します。より多くの閲覧を受けた記事はより高いエネルギーを持ち上部に表示され、古い記事は減衰してリストから外れます。
トレンドトピックセクション
最近注目を集めているコンテンツをハイライトするトレンドトピック機能を構築します。短い半減期(例:12時間)を持つDecayプロファイルを使用して、コンテンツが「ホット」な状態を維持するには継続的に閲覧を受ける必要があるようにします。エンゲージメントが最小限のコンテンツをフィルタリングするために高いカットオフ値を設定します。結果として、現在のユーザーの関心に素早く反応する動的なリストが得られます。
シンプルなビューカウンター
減衰なしでコンテンツの総ページビューを追跡します。エネルギーが増加するだけで減少しないCountプロファイルを使用します。これにより、シンプルな累積ビューカウンターが提供されます。Valueフォーマッターを使用してエネルギー値を表示し、ユーザーに総閲覧数を表示します。
編集ダッシュボード
コンテンツの人気度を表示する編集者向けのバックエンドビューを作成します。ダッシュボードを閲覧しても人気スコアが人為的に膨らまないように、Valueフォーマッター(Emitterではなく)を使用します。他のフィルター(コンテンツタイプ、公開日、著者)と組み合わせて、編集者がコンテンツのパフォーマンスを理解できるようにします。
多言語での人気追跡
コンテンツの各言語バージョンの人気度を個別に追跡します。Radioactivity Referenceフィールドでフィールド翻訳を有効にします。各言語翻訳は独立したエネルギー値を持つ独自のradioactivityエンティティを持ちます。これにより、コンテンツの人気度が言語によって異なる可能性がある多言語サイトでの正確な人気追跡が可能になります。
Tips
- 控えめな設定から始めてください:長い半減期(1週間)、低いカットオフ(0.1)、適度な粒度(15分)。観察された動作に基づいて調整してください。
- 異なる表示モードで異なるエネルギー emission値を使用して、インタラクションに異なる重みを付けてください(例:全ページビュー:10、ティーザー:1)。
- radioactivity_incidentテーブルのサイズを監視してください。cron実行間で大きくなりすぎる場合は、cronをより頻繁に実行するかRESTストレージを使用してください。
- 高トラフィックサイトでは、メインデータベースからincident収集を移動するためにRESTストレージオプションを検討してください。
- 新しい実装には常にRadioactivity Referenceフィールドを使用してください - レガシーフィールドは非推奨であり削除される予定です。
- 閲覧が蓄積される前に新しいコンテンツに人気リストでの「ブースト」を与えるためにデフォルトエネルギー値を設定してください。
Technical Details
Hooks 5
hook_cron
cron実行中にradioactivityの減衰とemission incidentを処理します。減衰は粒度設定に基づいて処理され、incidentはすべてのcron実行で処理されます。
hook_entity_load
エンティティがロードされたときにradioactivityフィールドの値を初期化し、表示用のエネルギー値が利用可能であることを保証します。
hook_entity_presave
タイムスタンプの更新やradioactivity更新中の不要なリビジョンの防止など、エンティティ保存時のradioactivity関連のロジックを処理します。
hook_page_attachments_alter
JavaScriptトリガーライブラリ用にradioactivityエンドポイントURLをdrupalSettingsに注入します。
hook_queue_info_alter
radioactivityキューワーカーが正しい順序(減衰の前にincident)で処理されることを保証します。
Drush Commands 1
drush radioactivity:fix-references
radioactivityエンティティを作成し参照を更新することで、空のradioactivity referenceフィールドを修正します。既存のコンテンツがあるコンテンツタイプにradioactivity referenceフィールドを追加する際に必須です。
Troubleshooting 5
1)閲覧している表示モードでEmitterフォーマッターが設定されていることを確認してください。2)ブラウザのネットワークタブで/radioactivity/emitへのPOSTリクエストを確認してください。3)「access content」権限が付与されていることを確認してください。4)保留中のincidentを処理するためにcronを実行してください。5)エラーがないかDrupalログを確認してください。
1)フィールドがLinearまたはDecayプロファイルを使用していることを確認してください(Countプロファイルは減少しません)。2)cronが定期的に実行されていることを確認してください(少なくとも粒度期間ごとに1回)。3)前回のcron以降に粒度閾値に達しているか確認してください。4)テスト用に粒度を1に設定して、すべてのcron実行で減衰を処理します。
「drush radioactivity:fix-references」を実行して、既存のコンテンツ用のradioactivityエンティティを作成してください。これは、既存のデータを持つコンテンツタイプにフィールドを追加する際に必要です。
「drush radioactivity:fix-references」を実行して、欠落しているradioactivityエンティティを作成してください。このエラーは、対応するradioactivityエンティティなしでreferenceフィールドが存在することを示しています。
1)粒度を増やして減衰計算の頻度を減らしてください。2)カットオフ値を増やして処理されるエンティティ数を減らしてください。3)高トラフィック時のデータベース書き込みを減らすために、incident収集にRESTストレージの使用を検討してください。
Security Notes 3
- emissionデータは、偽造された人気度の増加を防ぐためにサイトのhash saltから生成されたハッシュを使用して検証されます。
- /radioactivity/emitエンドポイントには「access content」権限が必要であり、その権限が付与されていない場合は匿名のemissionを防ぎます。
- RESTストレージエンドポイントは、外部に公開する場合は適切に保護する必要があります。