API za komentiranje za žive razprave

Komentarji, moderiranje in družbeni viri prek enega samega REST API-ja in SDK-jev za več kot 10 jezikov. Pridobivajte, objavljajte in moderirajte iz svojega zaledja ter nato pretakajte novo aktivnost vsakemu bralcu v realnem času prek WebSocketov.

Ena platforma, trije API-ji

FastComments je več kot le komentarji. Gradite razprave, moderiranje in družbene vire na istem naboru API-ja in SDK-jev.

API za komentarje

Navojni komentarji in klepet v živo. Pridobivajte, objavljajte, glasujte, pripenjajte, odgovarjajte in iščite, z vgrajenim SSO in posodobitvami v realnem času.

API za moderiranje

Namenska površina za moderiranje z več kot 40 končnimi točkami. Odobravajte, označujte, blokirajte, prepovejte, zaklepajte in beležite, s podporo samodejnega filtriranja neželene pošte.

API za družbeni vir

Gradite vire aktivnosti in družbene vire z objavami, mediji, reakcijami in sledenji ter nato pošiljajte nove objave vsakemu odjemalcu v živo.

Kličite API iz katerega koli sklada

cURL in tipizirani SDK-ji za Node, Python, PHP, Ruby, Go, Java, Rust, Swift in C++. Več kot 200 končnih točk pokriva komentarje, glasove, strani, SSO uporabnike, objave v viru, moderiranje in obvestila, vse za enim samim API ključem.

Namestitenpm install fastcomments-sdk
import { createFastCommentsSDK } from 'fastcomments-sdk/server';

const sdk = createFastCommentsSDK({
  apiKey: 'your-api-key',               // server-side only
  basePath: 'https://fastcomments.com'  // optional (default)
});

// Fetch comments for a page
const { comments } = await sdk.publicApi.getCommentsPublic({
  tenantId: 'your-tenant-id',
  urlId: 'page-url-id'
});

// Post a comment
await sdk.publicApi.createCommentPublic({
  tenantId: 'your-tenant-id',
  broadcastId: crypto.randomUUID(),
  createComment: {
    urlId: 'page-url-id',
    url: 'https://example.com/post',
    comment: 'Hello from the API!',
    commenterName: 'Alice'
  }
});
# Fetch comments for a page
curl -s 'https://fastcomments.com/api/v1/comments?tenantId=your-tenant-id&urlId=page-url-id' \
  -H 'x-api-key: YOUR_API_KEY'
Namestitepip install fastcomments
import client
from client.api.public_api import GetCommentsPublicOptions

configuration = client.Configuration(host="https://fastcomments.com")
with client.ApiClient(configuration) as api_client:
    api = client.PublicApi(api_client)
    response = api.get_comments_public(
        "your-tenant-id",
        "page-url-id",
        GetCommentsPublicOptions(page=0, limit=30),
    )
    for comment in response.comments:
        print(comment.commenter_name, comment.comment)
Namestitecomposer require fastcomments/fastcomments-php
<?php
require_once(__DIR__ . '/vendor/autoload.php');

$api = new FastComments\Client\Api\PublicApi(new GuzzleHttp\Client());

$result = $api->getCommentsPublic('your-tenant-id', 'page-url-id', [
    'page'  => 0,
    'limit' => 30,
]);

foreach ($result->getComments() as $comment) {
    echo $comment->getCommenterName() . ': ' . $comment->getComment() . PHP_EOL;
}
Namestitegem install fastcomments
require 'fastcomments-client'

api = FastCommentsClient::PublicApi.new
result = api.get_comments_public('your-tenant-id', 'page-url-id', { page: 0, limit: 30 })

result.comments.each do |comment|
  puts "#{comment.commenter_name}: #{comment.comment}"
end
Namestitego get github.com/fastcomments/fastcomments-go
package main

import (
	"context"
	"fmt"
	openapiclient "github.com/fastcomments/fastcomments-go/client"
)

func main() {
	client := openapiclient.NewAPIClient(openapiclient.NewConfiguration())

	resp, _, err := client.PublicAPI.
		GetCommentsPublic(context.Background(), "your-tenant-id").
		UrlId("page-url-id").Page(0).Limit(30).Execute()
	if err != nil {
		panic(err)
	}
	for _, c := range resp.Comments {
		fmt.Printf("%s: %s\n", c.GetCommenterName(), c.GetComment())
	}
}
import com.fastcomments.invoker.ApiClient;
import com.fastcomments.invoker.Configuration;
import com.fastcomments.api.PublicApi;

ApiClient client = Configuration.getDefaultApiClient();
client.setBasePath("https://fastcomments.com");

PublicApi api = new PublicApi(client);
var result = api.getCommentsPublic("your-tenant-id", "page-url-id")
                .page(0)
                .limit(30)
                .execute();
System.out.println(result.getComments());
use fastcomments_sdk::client::apis::configuration::Configuration;
use fastcomments_sdk::client::apis::public_api::{get_comments_public, GetCommentsPublicParams};

let config = Configuration::new();
let params = GetCommentsPublicParams {
    tenant_id: "your-tenant-id".to_string(),
    url_id: "page-url-id".to_string(),
    page: Some(0),
    limit: Some(30),
    ..Default::default()
};
let result = get_comments_public(&config, params).await.unwrap();
for comment in result.comments {
    println!("{:?}: {:?}", comment.commenter_name, comment.comment);
}
import FastCommentsSwift

var options = PublicAPI.GetCommentsPublicOptions()
options.page = 0
options.limit = 30

let result = try await PublicAPI.getCommentsPublic(
    tenantId: "your-tenant-id",
    urlId: "page-url-id",
    options: options
)
print(result.comments ?? [])
#include "FastCommentsClient/api/PublicApi.h"
#include "FastCommentsClient/ApiClient.h"
#include "FastCommentsClient/ApiConfiguration.h"

using namespace org::openapitools::client::api;

auto config = std::make_shared<ApiConfiguration>();
config->setBaseUrl(utility::conversions::to_string_t("https://fastcomments.com"));

PublicApi publicApi(std::make_shared<ApiClient>(config));

auto resp = publicApi.getCommentsPublic(
    utility::conversions::to_string_t("your-tenant-id"),
    utility::conversions::to_string_t("page-url-id")
).get();

Naročite se na vir v živo

Odprite eno povezavo in prejmite vsak nov komentar, urejanje, glas in posodobitev prisotnosti v trenutku, ko se zgodi. Noben dogodek ni izgubljen: ob ponovni povezavi se event log znova pridobi, da se predvaja vse, kar je bilo poslano, medtem ko je bil odjemalec brez povezave. Nativni WebSocket naročniki so na voljo za Node, React Native, Java, Swift in C++. Vsi drugi jeziki ostanejo v realnem času s poizvedovanjem event log-a.

Namestitenpm install fastcomments-sdk
import { subscribeToChanges, LiveEventType } from 'fastcomments-sdk/browser';

const config = { tenantId: 'your-tenant-id', urlId: 'page-url-id' };

const subscription = subscribeToChanges(
  config,
  'your-tenant-id',   // tenantIdWS
  'page-url-id',      // urlIdWS
  'user-session-id',  // userIdWS (from the getComments response)
  (event) => {
    if (event.type === LiveEventType.new_comment) {
      console.log('New comment:', event.comment?.comment);
    }
    return true;      // event handled
  },
  (isConnected) => console.log(isConnected ? 'connected' : 'disconnected')
);

// later: subscription.close();
Namestitenpm install fastcomments-react-native-sdk
import React, { useState } from 'react';
import { FastCommentsLiveCommenting } from 'fastcomments-react-native-sdk';
import { FastCommentsCommentWidgetConfig } from 'fastcomments-typescript';

export default function Comments() {
  // <FastCommentsLiveCommenting> subscribes to the live feed automatically.
  const [config] = useState<FastCommentsCommentWidgetConfig>({
    tenantId: 'your-tenant-id',
    urlId: 'page-url-id',
    showLiveRightAway: true,
    countAll: true,
  });

  return <FastCommentsLiveCommenting config={config} />;
}
import com.fastcomments.pubsub.LiveEventSubscriber;
import com.fastcomments.pubsub.SubscribeToChangesResult;
import com.fastcomments.core.CommentWidgetConfig;
import com.fastcomments.model.LiveEventType;

CommentWidgetConfig config = new CommentWidgetConfig();
config.tenant = "your-tenant-id";
config.urlId = "page-url-id";

LiveEventSubscriber subscriber = new LiveEventSubscriber();
SubscribeToChangesResult result = subscriber.subscribeToChanges(
    config,
    "your-tenant-id",   // tenantIdWS
    "page-url-id",      // urlId
    "page-url-id",      // urlIdWS
    "my-presence-id",   // userIdWS
    null,               // canSeeCommentsCallback (optional)
    (event) -> {
        if (event.getType() == LiveEventType.NEW_COMMENT) {
            System.out.println("New comment: " + event.getComment().getId());
        }
    }
);
// later: result.close();
import FastCommentsSwift

let config = LiveEventConfig(
    tenantId: "your-tenant-id",
    urlId: "page-url-id",
    urlIdWS: "page-url-id",   // URL-safe id for the WS server
    userIdWS: "my-presence-id"
)

let subscriber = LiveEventSubscriber()
let result = subscriber.subscribeToChanges(config: config) { event in
    if event.type == .newComment, let comment = event.comment {
        print("New comment: \(comment.id ?? "")")
    }
}
// later: result?.close()
#include <fastcomments/live/live_stream.hpp>
#include <iostream>

using namespace fastcomments::live;

LiveStreamConfig cfg;
cfg.wsBaseUrl = "wss://fastcomments.com";   // no trailing slash

LiveStream stream(cfg);
stream.onEvent([](const LiveEvent& ev) {
    if (ev.type == EventType::NewComment) {
        std::cout << "New comment at " << ev.timestamp << std::endl;
    }
});

stream.subscribe("your-tenant-id", "page-url-id", "my-presence-id").wait();
// later: stream.close().wait();
Namestitepip install fastcomments
import time
import client

configuration = client.Configuration(host="https://fastcomments.com")
with client.ApiClient(configuration) as api_client:
    api = client.PublicApi(api_client)
    start_time = int(time.time() * 1000)  # ms epoch
    while True:
        result = api.get_event_log(
            "your-tenant-id", "page-url-id", "my-user-id", start_time
        )
        for event in result.events:
            print("event:", event.data)
            start_time = int(event.created_at.timestamp() * 1000) + 1
        time.sleep(2)
# startTime = epoch millis to replay from; advance it past the last event you saw
curl -s 'https://fastcomments.com/api/v1/event-log/your-tenant-id?urlId=page-url-id&userIdWS=my-user-id&startTime=1720560000000' \
  -H 'x-api-key: YOUR_API_KEY'

Nativni mobilni SDK-ji, pripravljeni za vključitev

Preskočite izdelavo in vzdrževanje lastnega vmesnika za komentarje. Naši namenski, vzdrževani SDK-ji za React Native, Android in iOS vključujejo nativne komponente vmesnika za navojne komentarje, klepet v živo in vire. Vključite pogled, podajte konfiguracijo in končali ste.

React Native

npm: fastcomments-react-native-sdk

Nativne komponente, brez webview. Vključite FastCommentsLiveCommenting, FastCommentsLiveChat ali FastCommentsFeed in podajte konfiguracijo.

Oglejte si demo v živo

Android

com.fastcomments:sdk

Nativne Android komponente vmesnika. Dodajte FastCommentsView v svojo postavitev za navojne komentarje, glasovanje, obvestila in vire. Android 8.0+.

Oglejte si na GitHubu

iOS

Swift Package: FastCommentsUI

Nativna SwiftUI knjižnica za navojne komentarje, družbene vire in klepet v živo. iOS 16+ in macOS 14+.

Oglejte si na GitHubu

Deli, ki bi jih sicer gradili sami

Več kot 200 REST končnih točk

En API ključ, en osnovni URL. Vse, kar zmore nadzorna plošča, zmore tudi vaša koda.

SDK-ji za več kot 10 jezikov

Tipizirani odjemalci za Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ in več, tako da gradite v svojem skladu namesto v našem.

Realni čas prek WebSocketov

Novi komentarji dosežejo vsakega bralca v trenutku objave, brez osveževanja in brez poizvedovanja. Če se bralec znova poveže, se zamujeni dogodki predvajajo iz dnevnika.

Moderiranje, SSO in zaščita pred neželeno pošto

Enotna prijava, moderiranje komentarjev in filtriranje neželene pošte so vgrajeni, tako da so težki deli urejeni, preden napišete eno samo vrstico.

Gostovano in prilagojeno za vas

Mi upravljamo shranjevanje in infrastrukturo za realni čas po globalnem omrežju. Vi kličete API in objavite.

Kaj lahko zgradite

En nabor API-ja in SDK-jev za komentarje, klepet in aktivnost v živo po spletnih, mobilnih in strežniških aplikacijah.

Klepetalnice v živo

Pretakajte sporočila vsem v sobi v realnem času, s štetjem prisotnosti in aktivnostjo tipkanja.

Niti komentarjev

Dodajte gnezdene razdelke komentarjev z možnostjo glasovanja v članke, izdelke in objave z nekaj klici API-ja.

Viri aktivnosti

Objavite v vir in pošljite nove elemente in reakcije povezanim odjemalcem, ko prispejo.

Vprašanja, odgovori in ankete

Zbirajte vprašanja, odgovore, glasove in rezultate anket ter jih nato razvrstite in prikažite v živo.

V živo v treh korakih

1

Pridobite svoj API ključ

Začnite brezplačno preizkusno obdobje in pridobite svoj ID najemnika in API ključ iz nadzorne plošče.

2

Namestite SDK

Dodajte SDK za svoj jezik ali kličite REST API neposredno s cURL in svojo glavo x-api-key.

3

Pridobite, objavite in pojdite v živo

Naložite komentarje, objavite iz svojega zaledja in se naročite na spremembe za pretakanje posodobitev vsakemu bralcu.

Globalno porazdeljeno in visoko razpoložljivo

FastComments deluje v več regijah na naši lastni infrastrukturi. Zapisi se replicirajo med regijami, vozlišča se samodejno preklopijo ob napaki, bralci pa so postreženi iz lokacije, ki jim je najbližja.

Multi-master, več regij

Zapisi so sprejeti v več kot eni regiji in replicirani med njimi, tako da ni ene same točke odpovedi.

Naše lastno robno omrežje

Komentarji in mediji so postreženi iz našega lastnega globalnega CDN in DNS, dostavljeni iz lokacije, ki je najbližja vašim uporabnikom. Brez CDN tretjih oseb.

Samodejno preklapljanje ob napaki

Redundantna vozlišča se samodejno preklopijo, tako da promet med izpadom teče naprej. Podprto z 99.99% razpoložljivostjo.

Regijsko bivališče podatkov

Delujte v regiji US ali EU. Regija EU na eu.fastcomments.com ohranja podatke znotraj regije za skladnost.

Pridružite se našim zadovoljnim strankam

Na tisoče zadovoljnih strank nam zaupa zaradi naše izjemne storitve, zanesljivosti in inovativnih rešitev. Pridružite se naši rastoči skupnosti in izkusite razliko še danes!

Začnite

Pogosta vprašanja o API-ju za komentiranje

Ali moram uporabljati gradnik FastComments?

Ne. Gradnik je izbiren. Celotno izkušnjo komentiranja lahko zgradite na REST API-ju in SDK-jih ter vse izrišete sami.

Kateri jeziki imajo SDK?

Node, Python, PHP, Ruby, Go, Java, Rust, Swift, C++ in Nim, poleg React Native SDK-ja za mobilne naprave. Vsak jezik lahko tudi neposredno kliče REST API.

Kako deluje realni čas?

Odjemalci odprejo WebSocket in prejemajo nove komentarje, urejanja, glasove in posodobitve prisotnosti kot dogodke, tako da ni osveževanja in ni poizvedovanja. Noben dogodek ni izgubljen: če se odjemalec prekine, ob ponovni povezavi znova pridobi event log, da predvaja vse, kar je bilo poslano, medtem ko je bil brez povezave.

Ali moram poganjati svoj lasten WebSocket strežnik?

Ne. FastComments gosti infrastrukturo za realni čas. Vaš odjemalec se naroči s SDK-jem, mi pa dostavljamo dogodke.

Kako jeziki brez nativnega naročnika ostanejo v živo?

Poizvedujejo končno točko event log-a, ki vrne vsako spremembo od določenega časovnega žiga. SDK-ji za Node, React Native, Java, Swift in C++ namesto tega vključujejo nativnega WebSocket naročnika.

Kako deluje paginacija?

Posebej za komentarje FastComments predizračuna paginacijo ob vsakem zapisu za optimalne čase nalaganja, tako da se tudi zelo velike niti paginirajo hitro.

Ali obstaja brezplačno preizkusno obdobje?

Da. Začnite brezplačno preizkusno obdobje s polnim dostopom do API-ja in SDK-jev, brez kreditne kartice. Po preizkusnem obdobju se plačljivi paketi prilagajajo vašemu prometu.

Kje je dokumentacija API?

Celotna referenca REST API-ja in SDK-jev je na docs.fastcomments.com, kjer so dokumentirani vsaka končna točka, parameter in odgovor.

Ali lahko ohranim podatke v EU?

Da. FastComments zagotavlja regijo EU na eu.fastcomments.com, SDK-ji pa podpirajo usmerjanje vanjo.

Začnite graditi v nekaj minutah

Začnite brezplačno preizkusno obdobje, pridobite svoj API ključ in še danes dodajte žive razprave v svojo aplikacijo.