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}")
…
Practice test-driven development for Spring Boot features, fixes, and refactoring.
Get idiomatic C# and .NET guidance for architecture, async, and dependency injection.
Build thread-safe Swift persistence with actors, cache, and file-backed storage.
Analyze and refine raw prompts into ready-to-use high-quality prompts.
Audit ECC Tools cost anomalies and trace misuse, leakage, and duplicate jobs.
Learn Laravel production architecture patterns and core backend implementation practices.
Post, search, read timelines, and analyze data via the X API.
Read X/Twitter posts, threads, replies, and search results without API keys.
Download tweets and optimize X content with hashtags, hooks, and revenue insights.
Automate Twitter/X interactions, posting, and management with AI agents.
Search public X/Twitter posts and retrieve tweet details through a read-only MCP tool.
Read and search X posts, threads, replies, and quotes without an API key.