メインコンテンツへスキップ
Pro プラン10 minutes中級

リアルタイムデータアクセス

Zenovay上にライブダッシュボードを構築する — ポーリング戦略、外部API、およびリアルタイムデータの出所。

apirealtimestreamingdeveloper
最終更新日:

Zenovayからアナリティクスデータを取得して、独自のダッシュボードと監視ツールを構築します。

Zenovayはパブリックなウェブソケットストリームを公開していません。ダッシュボードは内部的にリアルタイムの訪問者アクティビティを表示しますが、独自の統合については、サポートされているパターンは外部APIのポーリングです。このガイドは、これを効率的に行う方法を示します。

情報

外部APIは有料機能です。ProScaleEnterpriseプラン で利用可能です — フリープランのキーは 403 API_PAID_PLAN_REQUIRED で拒否されます。APIキーを取得するを参照してください。

リアルタイムデータはどこにあるか

ユースケース最適なアプローチ
ライブ訪問者を自分で監視するダッシュボードのライブビュータブ(リアルタイムで更新)
カスタムダッシュボード外部APIのポーリング
過去のデータrangeフィルター付き外部API
サイトにライブ訪問者カウンターを埋め込むウィジェット機能(自己完結的なHTMLウィジェット)

現在サイトに誰がいるかを確認するには、ウェブサイトのダッシュボードを開いてライブビュータブを選択します — 自動的に更新されます。以下のセクションでは、API上に独自の外部統合を構築する方法について説明します。

外部APIのポーリング

アナリティクスデータの場合は、APIキーで外部APIを使用します。ベースURLは次のとおりです:

https://api.zenovay.com/api/external/v1

以下のヘッダーのいずれかで認証します:

X-API-Key: zv_YOUR_API_KEY
Authorization: Bearer zv_YOUR_API_KEY

最近のアナリティクス

アナリティクスサマリーエンドポイントは range クエリパラメータを受け入れます(24h7d30d90d1y — デフォルト 7d):

const API_KEY = process.env.ZENOVAY_API_KEY;
const WEBSITE_ID = 'your-website-id';

async function getRecentAnalytics() {
  const response = await fetch(
    `https://api.zenovay.com/api/external/v1/analytics/${WEBSITE_ID}?range=24h`,
    {
      headers: { 'X-API-Key': API_KEY }
    }
  );

  return await response.json();
}

外部APIのすべてのレスポンスは { success, data, timestamp } エンベロープでラップされており、合計は data.summary の下にあります:

{
  "success": true,
  "data": {
    "summary": {
      "total_visitors": 1247,
      "total_page_views": 3891,
      "unique_visitors": 1102
    },
    "time_range": "24h",
    "daily_stats": [ /* ... */ ]
  },
  "timestamp": "2026-06-13T00:00:00.000Z"
}

訪問者データ

async function getVisitors() {
  const response = await fetch(
    `https://api.zenovay.com/api/external/v1/analytics/${WEBSITE_ID}/visitors`,
    {
      headers: { 'X-API-Key': API_KEY }
    }
  );

  return await response.json();
}

data エンベロープ内では、visitors 配列と pagination オブジェクト(limitoffsethas_more)を返します。limitoffset クエリパラメータを使用して、結果をページネーションしてください。

カスタムダッシュボードの構築

React の例

import { useState, useEffect } from 'react';

function LiveDashboard({ websiteId, apiKey }) {
  const [analytics, setAnalytics] = useState(null);

  // レート制限を尊重するインターバルでアナリティクスサマリーを更新
  useEffect(() => {
    async function fetchAnalytics() {
      try {
        const response = await fetch(
          `https://api.zenovay.com/api/external/v1/analytics/${websiteId}?range=24h`,
          {
            headers: { 'X-API-Key': apiKey }
          }
        );
        const body = await response.json();
        // レスポンスは { success, data, timestamp } エンベロープでラップされています。
        setAnalytics(body.data);
      } catch (error) {
        console.error('Analytics fetch error:', error);
      }
    }

    fetchAnalytics();
    const interval = setInterval(fetchAnalytics, 5 * 60 * 1000);
    return () => clearInterval(interval);
  }, [websiteId, apiKey]);

  return (
    <div>
      {analytics && (
        <div>
          <h2>過去 24 時間</h2>
          <p>訪問者:{analytics.summary.total_visitors}</p>
          <p>ページビュー:{analytics.summary.total_page_views}</p>
          <p>ユニーク訪問者:{analytics.summary.unique_visitors}</p>
        </div>
      )}
    </div>
  );
}

レート制限に関する考慮事項

外部APIのレート制限はAPIキーごとであり、APIは有料のみです — フリー行は完全性のために表示されていますが、フリープランのキーは呼び出すことができません。

プランリクエスト/分推奨ポーリング間隔
Free利用不可
Pro305分ごと
Scale602分ごと
Enterprise1201分ごと

レスポンスには X-RateLimit-Limit および X-RateLimit-Remaining ヘッダーが含まれます(フォールバックパスで)。これらを読み取り、制限に近づくにつれてバックオフできます。

ベストプラクティス

  • プランのレート制限が許可するより速くポーリングしないでください — アナリティクスデータは分単位で更新されます。秒単位ではありません。
  • ポーリング間でレスポンスをローカルにキャッシュしてください。
  • 指数バックオフでエラー処理を実装してください。
  • ライブ訪問者を自分で見るには、ポーリングではなくライブビュータブを使用してください — それのために構築されています。

次のステップ

この記事は役に立ちましたか?