Install
$ agentstack add skill-qwwiwi-agentos-skills-public-twitter ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Twitter/X Reader
Универсальный скилл для чтения Twitter/X. Два источника с автоматическим fallback.
API ключ
$SOCIALDATA_API_KEY -- переменная окружения (env var или ~/.claude/skills/twitter/.secrets/socialdata.env). Проверка: echo $SOCIALDATA_API_KEY -- должен начинаться с цифр и |.
Стратегия выбора источника
| Задача | Источник | Fallback | |--------|----------|----------| | Одиночный твит | FxTwitter (бесплатно) | SocialData | | Профиль | FxTwitter (бесплатно) | SocialData | | Статья (X Article) | FxTwitter (article в tweet) | SocialData article endpoint | | Тред (цепочка) | SocialData | -- | | Таймлайн (последние посты) | SocialData | -- | | Поиск | SocialData | -- | | Комментарии | SocialData | -- |
Принцип: бесплатное первым. SocialData только когда FxTwitter не может или не справился.
1. Одиночный твит
Шаг 1: FxTwitter (бесплатно)
Извлеки username и tweet_id из URL:
https://x.com/{username}/status/{tweet_id}https://twitter.com/{username}/status/{tweet_id}- URL может содержать
?s=46&t=...-- игнорируй query params.
curl -s "https://api.fxtwitter.com/{username}/status/{tweet_id}"
Ответ:
{
"code": 200,
"tweet": {
"text": "полный текст",
"author": { "name": "...", "screen_name": "...", "followers": 12345 },
"likes": 100, "retweets": 50, "replies": 10, "views": 5000,
"created_at": "...",
"media": { "photos": [...], "videos": [...] },
"quote": { ... },
"article": { ... }
}
}
Шаг 2: Fallback на SocialData (если code != 200)
curl -s -H "Authorization: Bearer $SOCIALDATA_API_KEY" \
"https://api.socialdata.tools/twitter/tweets/{tweet_id}"
2. Статья (X Article / X Notes)
X Articles -- длинные посты (до 25000 символов). Определяются по:
- URL ведёт на твит, но текст твита пустой или содержит только
t.coссылку - В ответе FxTwitter есть поле
tweet.article - В ответе SocialData в
entities.urlsестьx.com/i/article/{article_id}
Метод 1: FxTwitter (рекомендуемый)
FxTwitter возвращает article как часть tweet response:
curl -s "https://api.fxtwitter.com/{username}/status/{tweet_id}"
Если в ответе есть tweet.article, извлеки текст:
import json, sys
d = json.load(sys.stdin)
article = d.get('tweet', {}).get('article', {})
blocks = article.get('content', {}).get('blocks', [])
print(f"Title: {article.get('title', '')}")
print(f"Preview: {article.get('preview_text', '')}")
print()
for block in blocks:
text = block.get('text', '')
if text.strip():
print(text)
print()
Структура article:
{
"article": {
"id": "article_id",
"title": "Title of the article",
"preview_text": "First 200 chars...",
"created_at": "ISO datetime",
"modified_at": "ISO datetime",
"cover_media": { "media_info": { "original_img_url": "..." } },
"content": {
"blocks": [
{ "key": "...", "text": "Paragraph text", "type": "unstyled" },
{ "key": "...", "text": "Header", "type": "header-two" },
...
]
}
}
}
Типы блоков (block.type):
unstyled-- обычный параграфheader-one,header-two,header-three-- заголовкиunordered-list-item-- элемент спискаordered-list-item-- нумерованный списокblockquote-- цитатаatomic-- медиа (изображение/видео)
Метод 2: SocialData article endpoint (fallback)
Если FxTwitter не вернул article, попробуй SocialData:
- Сначала получи tweet через SocialData и найди article_id в entities:
curl -s -H "Authorization: Bearer $SOCIALDATA_API_KEY" \
"https://api.socialdata.tools/twitter/tweets/{tweet_id}"
- Найди article_id в
entities.urls[].expanded_url(формат:x.com/i/article/{article_id})
- Запроси статью:
curl -s -H "Authorization: Bearer $SOCIALDATA_API_KEY" \
"https://api.socialdata.tools/twitter/article/{article_id}"
Важно: SocialData article endpoint иногда возвращает "Tweet not found" даже для существующих статей. В таких случаях используй FxTwitter.
Полный pipeline для статей
# 1. Попробуй FxTwitter
RESPONSE=$(curl -s "https://api.fxtwitter.com/{username}/status/{tweet_id}")
# 2. Проверь есть ли article
HAS_ARTICLE=$(echo "$RESPONSE" | python3 -c "
import json,sys
d=json.load(sys.stdin)
a=d.get('tweet',{}).get('article')
print('yes' if a else 'no')
")
if [ "$HAS_ARTICLE" = "yes" ]; then
# Извлеки текст из FxTwitter article
echo "$RESPONSE" | python3 -c "
import json,sys
d=json.load(sys.stdin)
a=d['tweet']['article']
print(f\"Title: {a.get('title','')}\")
for b in a.get('content',{}).get('blocks',[]):
t=b.get('text','')
if t.strip(): print(t+'\n')
"
else
# Fallback: SocialData
# Получи article_id из entities
ARTICLE_ID=$(curl -s -H "Authorization: Bearer $SOCIALDATA_API_KEY" \
"https://api.socialdata.tools/twitter/tweets/{tweet_id}" | \
python3 -c "
import json,sys
d=json.load(sys.stdin)
for u in d.get('entities',{}).get('urls',[]):
eu=u.get('expanded_url','')
if '/article/' in eu:
print(eu.split('/article/')[-1])
break
")
if [ -n "$ARTICLE_ID" ]; then
curl -s -H "Authorization: Bearer $SOCIALDATA_API_KEY" \
"https://api.socialdata.tools/twitter/article/$ARTICLE_ID"
fi
fi
3. Тред (цепочка твитов)
Только через SocialData. Возвращает все твиты в треде за один запрос.
curl -s -H "Authorization: Bearer $SOCIALDATA_API_KEY" \
"https://api.socialdata.tools/twitter/thread/{tweet_id}"
tweet_id -- ID любого твита в треде (обычно первого).
4. Профиль пользователя
Шаг 1: FxTwitter (бесплатно)
curl -s "https://api.fxtwitter.com/{username}"
Шаг 2: Fallback на SocialData
curl -s -H "Authorization: Bearer $SOCIALDATA_API_KEY" \
"https://api.socialdata.tools/twitter/user/{screen_name}"
5. Таймлайн (последние посты пользователя)
Только через SocialData. Требует user_id (не username).
# Сначала получи user_id
USER_ID=$(curl -s -H "Authorization: Bearer $SOCIALDATA_API_KEY" \
"https://api.socialdata.tools/twitter/user/{screen_name}" | \
python3 -c "import json,sys; print(json.load(sys.stdin)['id'])")
# Затем таймлайн (до 20 твитов)
curl -s -H "Authorization: Bearer $SOCIALDATA_API_KEY" \
"https://api.socialdata.tools/twitter/user/$USER_ID/tweets"
Пагинация: ?cursor={next_cursor} из ответа.
6. Поиск твитов
Только через SocialData. Поддерживает Twitter Advanced Search операторы.
curl -s -H "Authorization: Bearer $SOCIALDATA_API_KEY" \
"https://api.socialdata.tools/twitter/search?query={query}&type=Latest"
type: Latest или Top.
Примеры запросов:
from:username-- твиты конкретного пользователя"exact phrase"-- точная фразаfilter:links-- только с ссылкамиmin_faves:100-- минимум 100 лайковlang:ru-- только русскийsince:2026-01-01 until:2026-03-28-- по дате
7. Комментарии к твиту
Только через SocialData.
curl -s -H "Authorization: Bearer $SOCIALDATA_API_KEY" \
"https://api.socialdata.tools/twitter/tweets/{tweet_id}/comments"
Пагинация: ?cursor={next_cursor}.
Формат вывода
При показе контента пользователю:
- Автор: имя + @handle + followers
- Дата публикации
- Полный текст (для статей -- title + body)
- Медиа (если есть): описание фото/видео
- Вовлечённость: лайки, ретвиты, просмотры, bookmarks
- Цитата (если есть)
Для статей:
- Title
- Автор + метрики
- Ключевые тезисы (summary)
- Полный текст (если просят)
Стоимость SocialData
| Endpoint | Цена | |----------|------| | Твиты, профили, таймлайны, поиск | $0.0002 / запрос | | Статьи | $0.0002 / шт | | Комментарии | $0.0002 / шт |
API key: $SOCIALDATA_API_KEY (env var или ~/.claude/skills/twitter/.secrets/socialdata.env). Dashboard: https://dashboard.socialdata.tools
Ошибки
| Ситуация | Что делать | |----------|-----------| | FxTwitter code 404 | Твит удалён/приватный. Попробуй SocialData | | FxTwitter таймаут | Fallback на SocialData | | SocialData 401 | Проверь $SOCIALDATAAPIKEY | | SocialData 429 | Rate limit. Подожди 60 сек | | SocialData article "Tweet not found" | Используй FxTwitter -- article в поле tweet.article | | Твит без текста + t.co ссылка | Это Article. Проверь tweet.article (FxTwitter) или entities.urls (SocialData) |
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: qwwiwi
- Source: qwwiwi/agentos-skills-public
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.