Post, read, search, and analyze X data through the Twitter API.
Copy the install command and let the AI configure it · recommended for beginners
Please install the "x-api" skill from askskill: 1. Download https://raw.githubusercontent.com/affaan-m/ECC/main/docs/ja-JP/skills/x-api/SKILL.md 2. Save it as ~/.claude/skills/x-api/SKILL.md 3. Reload skills and tell me it's ready
Use the X API to design an automated posting workflow: publish one product promotion tweet every day at 9 AM, including OAuth authentication, error retry logic, rate-limit handling, and sample code.
An automated posting plan with authentication flow, API steps, error handling guidance, and sample code.
Using the X API, write a script to search tweets containing 'generative AI' from the past 7 days, then calculate post volume, engagement, and summarize frequent keywords.
A runnable query and analysis script, plus results describing trend metrics and keyword summaries.
Create an X API solution to read the recent timelines of five competitor accounts, compare posting frequency, content types, and engagement performance, and output an analysis framework.
A competitor monitoring plan with timeline retrieval methods, comparison dimensions, and a structured analysis framework.
投稿、読み取り、検索、分析のためにX(Twitter)とプログラムで対話する。
最適な用途:読み取り集中の操作、検索、公開データ。
# Environment setup
export X_BEARER_TOKEN="your-bearer-token"
import os
import requests
bearer = os.environ["X_BEARER_TOKEN"]
headers = {"Authorization": f"Bearer {bearer}"}
# Search recent tweets
resp = requests.get(
"https://api.x.com/2/tweets/search/recent",
headers=headers,
params={"query": "claude code", "max_results": 10}
)
tweets = resp.json()
以下に必要:ツイートの投稿、アカウント管理、DM。
# Environment setup — source before use
export X_API_KEY="your-api-key"
export X_API_SECRET="your-api-secret"
export X_ACCESS_TOKEN="your-access-token"
export X_ACCESS_SECRET="your-access-secret"
import os
from requests_oauthlib import OAuth1Session
oauth = OAuth1Session(
os.environ["X_API_KEY"],
client_secret=os.environ["X_API_SECRET"],
resource_owner_key=os.environ["X_ACCESS_TOKEN"],
resource_owner_secret=os.environ["X_ACCESS_SECRET"],
)
resp = oauth.post(
"https://api.x.com/2/tweets",
json={"text": "Hello from Claude Code"}
)
resp.raise_for_status()
tweet_id = resp.json()["data"]["id"]
def post_thread(oauth, tweets: list[str]) -> list[str]:
ids = []
reply_to = None
for text in tweets:
payload = {"text": text}
if reply_to:
payload["reply"] = {"in_reply_to_tweet_id": reply_to}
resp = oauth.post("https://api.x.com/2/tweets", json=payload)
tweet_id = resp.json()["data"]["id"]
ids.append(tweet_id)
reply_to = tweet_id
return ids
resp = requests.get(
f"https://api.x.com/2/users/{user_id}/tweets",
headers=headers,
params={
"max_results": 10,
"tweet.fields": "created_at,public_metrics",
}
)
resp = requests.get(
"https://api.x.com/2/tweets/search/recent",
headers=headers,
params={
"query": "from:affaanmustafa -is:retweet",
"max_results": 10,
"tweet.fields": "public_metrics,created_at",
}
)
resp = requests.get(
"https://api.x.com/2/users/by/username/affaanmustafa",
headers=headers,
params={"user.fields": "public_metrics,description,created_at"}
)
# Media upload uses v1.1 endpoint
# Step 1: Upload media
media_resp = oauth.post(
"https://upload.twitter.com/1.1/media/upload.json",
files={"media": open("image.png", "rb")}
)
media_id = media_resp.json()["media_id_string"]
# Step 2: Post with media
resp = oauth.post(
"https://api.x.com/2/tweets",
json={"text": "Check this out", "media": {"media_ids": [media_id]}}
)
X APIのレートリミットはエンドポイント、認証方法、アカウントティアによって異なり、時間とともに変化する。常に:
x-rate-limit-remaining と x-rate-limit-reset ヘッダーを読み取るimport time
remaining = int(resp.headers.get("x-rate-limit-remaining", 0))
if remaining < 5:
reset = int(resp.headers.get("x-rate-limit-reset", 0))
wait = max(0, reset - int(time.time()))
print(f"Rate limit approaching. Resets in {wait}s")
resp = oauth.post("https://api.x.com/2/tweets", json={"text": content})
if resp.status_code == 201:
return resp.json()["data"]["id"]
elif resp.status_code == 429:
reset = int(resp.headers["x-rate-limit-reset"])
raise Exception(f"Rate limited. Resets at {reset}")
elif resp.status_code == 403:
raise Exception(f"Forbidden: {resp.json().get('detail', 'check permissions')}")
else:
raise Exception(f"X API error {resp.status_code}: {resp.text}")
…
Coordinate multi-agent teamwork with ownership, Kanban flow, merge gates, and handoffs.
Forge complete OpenClaw lobster personas with lore, rules, names, and avatar prompts.
Audit repository assets, detect third-party code, and generate module-level verdict reports.
Automatically format, lint, and fix code issues on every edit.
Generate images, videos, and audio with one unified AI media workflow.
Scan Claude Code configs for vulnerabilities, misconfigurations, and prompt injection risks.
Post, search, read timelines, and analyze data via the X API.
Read and manage X content via twitterapi.io, including mentions and tweets.
Use natural language to post, search, and manage X accounts.
Analyze X history, draft posts in your voice, and schedule them.
Use Claude to post, search, like, and retweet on X/Twitter.
Download tweets and optimize X content with hashtags, hooks, and revenue insights.