Publisks datu interfeiss
X Feed API dokumentācija
Vienkāršs, publiski pieejams JSON API, kas nodrošina @billiejs6 X profila saglabātās publikācijas un atbildes. Dati tiek sinhronizēti no X un piegādāti no Cloudflare D1 kešatmiņas.
Pieprasījuma adrese
Galvenais lasīšanas galapunkts. Tam nav vajadzīga API atslēga.
https://x-feed.blakusprojekts.lv/api/x-feed?limit=50Lapu ielāde
Pieprasījumā vari norādīt limit (1–100; pēc noklusējuma 50). Nākamajai lapai nodod iepriekšējās atbildes nextCursor vērtību. Ieraksti tiek kārtoti pēc created_at un tweet_id dilstošā secībā; limit attiecas uz posts un replies kopējo ierakstu skaitu.
GET /api/x-feed?limit=50
GET /api/x-feed?limit=50&cursor=<nextCursor>
Atbilde satur nextCursor (null, ja nākamās lapas nav) un hasMore (vai ir vēl ieraksti). Nederīgs limit vai cursor atgriež HTTP 400.
Atbildes struktūra
Veiksmīga atbilde satur profila identifikatoru, pēdējās sinhronizācijas laiku un divus masīvus.
{
"service": "blakusprojekts-x-feed",
"type": "api",
"purpose": "data-retrieval",
"profile": "billiejs6",
"updatedAt": "2026-11-04T12:00:00.000Z",
"limit": 50,
"nextCursor": "eyJjcmVhdGVkQXQiOiIyMDI2LTExLTA0VDEwOjAwOjAwLjAwMFoiLCJ0d2VldElkIjoiMTIzNDU2Nzg5MDEyMzQ1Njc4OSJ9",
"hasMore": true,
"posts": [
{
"tweet_id": "1234567890123456789",
"kind": "post",
"text": "Publikācijas teksts",
"created_at": "2026-11-04T10:00:00.000Z",
"fetched_at": "2026-11-04T12:00:00.000Z"
}
],
"replies": []
}
Datu lauki
Katrs ieraksts satur tweet_id (X ieraksta ID), kind (post vai reply), text (teksts), created_at (publicēšanas laiks) un fetched_at (lejupielādes laiks).
Izmantošanas piemēri
JavaScript pārlūkā vai Node.js
const response = await fetch(
'https://x-feed.blakusprojekts.lv/api/x-feed?limit=50',
{ headers: { Accept: 'application/json' } }
);
if (!response.ok) throw new Error(`API kļūda: ${response.status}`);
const feed = await response.json();
console.log('Publikācijas:', feed.posts);
console.log('Atbildes:', feed.replies);
cURL
curl -H "Accept: application/json" \
https://x-feed.blakusprojekts.lv/api/x-feed
Vienkārša ierakstu attēlošana
const list = document.querySelector('#x-posts');
feed.posts.forEach((post) => {
const item = document.createElement('article');
item.textContent = post.text; // textContent novērš HTML ievadīšanu
list.append(item);
});
CORS un piekļuve
Pārlūka pieprasījumi no citām izcelsmēm ir ierobežoti līdz blakusprojekts.lv domēniem. Servera puses integrācijas var izsaukt publisko GET galapunktu tieši. CORS nav autentifikācija — tas tikai kontrolē pārlūku piekļuvi.
Kešatmiņa un ierobežojumi
Atbilde tiek kešota 5 minūtes, ar stale-while-revalidate līdz 30 minūtēm. Pašreizējais labākās piepūles limits ir 120 lasīšanas pieprasījumi minūtē uz IP vienā Worker instancē. Lielākai slodzei jāizmanto Cloudflare WAF/rate limiting.
Drošība
Publisks ir tikai lasīšanas galapunkts. Datu sinhronizācijas galapunkts ir privāts un pieprasa Bearer noslēpumu; nekad neievieto šo noslēpumu pārlūka kodā. API atbildēs ir drošības un noindeksēšanas galvenes.
Kļūdas un dokumentācija
Neveiksmīgas atbildes izmanto HTTP statusa kodus un JSON error lauku. 429 atbilde satur Retry-After. Katra JSON atbilde un Link galvene norāda uz šo dokumentāciju.
401— neatļauta piekļuve iekšējam refresh galapunktam404— galapunkts nav atrasts405— neatbalstīta HTTP metode429— sasniegts pieprasījumu limits; ievēroRetry-After503— datu plūsma īslaicīgi nav pieejama