Dane X
Dostawca: Felo · Płatność z salda platformy
Wybierz operację dla danych, których potrzebujesz. Wszystkie pięć punktów końcowych używa POST i zwraca JSON w korzeniu, bez wspólnego opakowania data.
Wszystkie przykłady używają FELO_API_KEY z przeglądu. Wywołania korzystają z salda platformy, a nie z kredytów Felo Pro. Przykłady odpowiedzi mają charakter poglądowy; rzeczywista treść i opcjonalne pola mogą się różnić.
Wybierz operację
| Potrzeba | Punkt końcowy |
|---|---|
| Profile dla znanych nazw użytkowników | POST /api/v1/data/x/user/info |
| Znajdź użytkowników według zapytania | POST /api/v1/data/x/user/search |
| Posty jednego użytkownika | POST /api/v1/data/x/user/tweets |
| Posty pasujące do zapytania | POST /api/v1/data/x/tweet/search |
| Odpowiedzi na znane posty | POST /api/v1/data/x/tweet/replies |
1. Pobierz profile użytkowników
POST /api/v1/data/x/user/info
| Pole | Typ | Wymagane | Znaczenie |
|---|---|---|---|
usernames | tablica stringów | Tak | 1–100 nazw użytkowników; podawaj uchwyty bez @ |
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/x/user/info" \
-H "Authorization: Bearer $FELO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"usernames":["OpenAI"]}'Odpowiedź zawiera users i total. Każdy użytkownik zawiera user_id, username i display_name; tekst profilu, liczba obserwujących, weryfikacja i inne metadane również mogą być obecne. Partia może zwrócić mniej profili niż żądano. Dopasowuj po nazwie użytkownika lub ID, a nie po pozycji w tablicy.
{"users":[{"user_id":"example-user-id","username":"example","display_name":"Example"}],"total":1}2. Wyszukaj użytkowników
POST /api/v1/data/x/user/search
| Pole | Typ | Wymagane | Znaczenie |
|---|---|---|---|
query | string | Tak | 1–1 000 znaków |
cursor | string | Nie | Kursor stronicowania, do 4 000 znaków |
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/x/user/search" \
-H "Authorization: Bearer $FELO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"AI research"}'Odpowiedź zawiera users, total, has_next i next_cursor. W tej operacji nie ma parametru limit.
{"users":[],"total":0,"has_next":false,"next_cursor":null}3. Pobierz oś czasu użytkownika
POST /api/v1/data/x/user/tweets
| Pole | Typ | Wymagane | Znaczenie |
|---|---|---|---|
username | string | Wymagany jeden identyfikator | Nazwa użytkownika, do 100 znaków |
x_user_id | string | Wymagany jeden identyfikator | ID użytkownika, do 100 znaków; ma pierwszeństwo przed username |
limit | integer | Nie | 1–1 000; bieżąca implementacja używa co najmniej 20, z domyślną wartością 20 |
cursor | string | Nie | Kursor stronicowania, do 4 000 znaków |
include_replies | boolean | Nie | Uwzględnij zagnieżdżone odpowiedzi; domyślnie false |
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/x/user/tweets" \
-H "Authorization: Bearer $FELO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"username":"OpenAI","limit":20,"include_replies":false}'Odpowiedź zawiera tweets, total, has_next i next_cursor. Ustawienie limit poniżej 20 nie gwarantuje mniejszej liczby zwróconych elementów ani niższej opłaty. Uwzględnienie odpowiedzi może dodać zwrócone dane i płatne wyniki.
Limity wyników i zagnieżdżonych odpowiedzi
limit jest docelową liczbą postów najwyższego poziomu dla tego żądania, a nie gwarantowaną liczbą wyników. Bieżąca implementacja używa celu co najmniej 20: cel 20 odczytuje jedną nadrzędną stronę; większe cele automatycznie pobierają do 50 stron. Przed każdą stroną sprawdzany jest upływ czasu i pobieranie kolejnych stron zatrzymuje się po przekroczeniu 60 sekund. To sprawdzenie nie gwarantuje, że całe żądanie HTTP zakończy się w ciągu 60 sekund.
Zbieranie zatrzymuje się również, gdy osiągnięto cel, nadrzędne źródło nie ma następnej strony, strona jest pusta lub kursor jest brakujący. Udana odpowiedź może więc zawierać mniej niż limit postów. Użyj has_next i next_cursor, aby kontynuować, gdy są dostępne.
Przy include_replies=true każdy zwrócony post otrzymuje do 5 dodatkowych stron i maksymalnie 100 zagnieżdżonych odpowiedzi. Zbieranie może zakończyć się wcześniej, gdy nie ma następnej strony, strona jest pusta lub kursor nie może przejść dalej. Te zagnieżdżone odpowiedzi są poza górnym limit i total, ale mogą zwiększać liczbę wyników podlegających rozliczeniu.
Zagnieżdżone replies nie stanowią kompletnego archiwum odpowiedzi i nie udostępniają osobnego kursora kontynuacji dla tego dodatkowego zbierania. Aby stronicować odpowiedzi niezależnie, użyj operacji odczytu odpowiedzi i zwróconego przez nią kursora. Nie używaj ponownie kursora postu najwyższego poziomu do odpowiedzi.
4. Wyszukaj posty
POST /api/v1/data/x/tweet/search
| Pole | Typ | Wymagane | Znaczenie |
|---|---|---|---|
query | string | Tak | Tekst wyszukiwania, 1–1 000 znaków |
query_type | string | Nie | Latest (domyślnie) lub Top |
limit | integer | Nie | 1–1 000; bieżąca implementacja używa co najmniej 20, z domyślną wartością 20 |
cursor | string | Nie | Kursor stronicowania, do 4 000 znaków |
since_time | integer or string | Nie | Czas początkowy; użyj sekund Unix dla jednoznacznej wartości liczbowej |
until_time | integer or string | Nie | Czas końcowy; użyj sekund Unix, nie milisekund |
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/x/tweet/search" \
-H "Authorization: Bearer $FELO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query":"retrieval augmented generation","query_type":"Latest","limit":20}'Odpowiedź zawiera tweets, total, has_next i next_cursor. Obiekty postów zawierają id, content, author, created_at i metrics; odpowiedzi oraz cytowane/przekazane dalej posty mogą być zagnieżdżone. Traktuj identyfikatory jako ciągi znaków.
Limity liczby wyników
limit jest celem, a nie gwarancją. Bieżąca implementacja używa celu co najmniej 20: cel 20 odczytuje jedną nadrzędną stronę; większe cele automatycznie pobierają do 50 stron. Upływ czasu jest sprawdzany przed każdą stroną i nie są pobierane dalsze strony po przekroczeniu 60 sekund. Trwające żądanie do źródła nadrzędnego nadal może zająć czas, więc nie jest to ogólny limit czasu HTTP.
Zbieranie zatrzymuje się również, gdy osiągnięto cel, nadrzędne źródło nie ma następnej strony, strona jest pusta lub kursor jest brakujący. Zwrócenie mniejszej liczby niż limit postów nie oznacza, że żądanie się nie powiodło lub że każdy pasujący post został pobrany. Sprawdź has_next i next_cursor przed kontynuacją.
{
"tweets": [{
"id":"example-post-id",
"content":"Example post content",
"author":{"user_id":"example-user-id","username":"example","display_name":"Example"},
"created_at":"2026-11-01T00:00:00Z",
"metrics":{},
"replies":[]
}],
"total":1,
"has_next":false,
"next_cursor":null
}5. Odczytaj odpowiedzi
POST /api/v1/data/x/tweet/replies
| Pole | Typ | Wymagane | Znaczenie |
|---|---|---|---|
tweet_ids | string or string array | Tak | Jedno ID posta lub partia do 20 ID |
cursor | string | Nie | Do 4 000 znaków; używaj z jednym ID posta |
since_time | integer | Nie | Czas początkowy w sekundach Unix |
until_time | integer | Nie | Czas końcowy w sekundach Unix |
Zastąp symbol zastępczy rzeczywistym ID posta:
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/x/tweet/replies" \
-H "Authorization: Bearer $FELO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"tweet_ids":["POST_ID"]}'W przeciwieństwie do osi czasu i wyszukiwania postów, odpowiedzi są grupowane pod results. Każdy wpis ma własny stan stronicowania:
{"results":[{"tweet_id":"POST_ID","replies":[],"total":0,"has_next":false,"next_cursor":null}]}Limity odpowiedzi na żądanie
Każde żądanie odczytuje jedną nadrzędną stronę odpowiedzi na każde tweet_id i zachowuje najwyżej 100 odpowiedzi; nie pobiera automatycznie każdej strony odpowiedzi. W partii do 20 ID limit 100 odpowiedzi obowiązuje osobno dla każdego wpisu results. Rzeczywiste liczby mogą być niższe.
total każdego wpisu to liczba odpowiedzi zwróconych w tym wpisie, a nie pełna liczba odpowiedzi na post. Aby kontynuować, użyj next_cursor tego wpisu i w następnym żądaniu wyślij tylko jego pojedyncze ID posta. Nie ma parametru limit, który zwiększałby limit na żądanie.
Stronicowanie i kontrola kosztów
total zlicza odpowiednią tablicę w bieżącej odpowiedzi: posty najwyższego poziomu dla zapytań o posty albo odpowiedzi w każdym wpisie wyniku dla zapytań o odpowiedzi. Nie jest to globalna liczba dopasowań, pełna liczba odpowiedzi posta ani końcowa liczba rozliczeniowa.
- Wyślij pierwsze żądanie bez
cursor. - Odczytaj
has_nextinext_cursorz odpowiedzi. W przypadku odpowiedzi odczytuj je w każdym wpisie wyniku. - Jeśli istnieje kolejna strona, a kursor nie jest pusty, wyślij go bez zmian z tym samym zapytaniem. W przypadku partii odpowiedzi kontynuuj każdy post osobno.
- Zatrzymaj się, gdy nie ma następnej strony, gdy kursor się powtarza lub gdy osiągnięto własny limit strony albo wydatków.
Metadane stronicowania odzwierciedlają ostatnią odpowiedź nadrzędną; zwrócony zbiór może zostać obcięty przez limit wyników. Nawet has_next=false nie gwarantuje, że cała historia X lub wszystkie odpowiedzi zostały pobrane. Wyświetlaj rzeczywistą liczbę zwróconych elementów zamiast oznaczać ograniczony zbiór jako wszystkie dostępne dane.
Każda udana strona może generować opłatę. Te pięć operacji jest rozliczanych według zwróconych wyników, a nie według stałej opłaty za żądanie. Zagnieżdżone odpowiedzi i inne zwrócone rekordy mogą wpływać na liczbę rozliczanych wyników; nie szacuj kosztu wyłącznie na podstawie długości tablicy najwyższego poziomu. Sprawdź bieżące ceny i użycie w konsoli. Pełne pola obiektów znajdują się w schemacie OpenAPI.