mcpField
S
scraping-tweets-by-keyword

scraping-tweets-by-keyword

github.com/apidojo-ioデータ・データベース1766 回インストール24 週間前に更新
リポジトリ

scraping-tweets-by-keyword について

Apify の tweet-scraper を実行し、キーワード、ハッシュタグ、高度な検索式に一致するツイートを収集するスキルです。取得データは後続の分析に使えます。

主な機能

  1. 01キーワード、ハッシュタグ、ブール検索
  2. 02投稿者、日付、言語、場所での絞り込み
  3. 03メディア種別と反応数での絞り込み
  4. 04検索語の追加と出力変換

活用シーン

  1. 01トピックやハッシュタグの投稿収集
  2. 02特定アカウントや場所の投稿収集
  3. 03日付や反応数で絞ったデータセット作成

MCP 対応

Apify MCP サーバーが利用可能な場合、run-actor ツールから Apify Actor を実行できます。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/apidojo-io/apidojo-skills --skill scraping-tweets-by-keyword

インストール後、Claude Code で/scraping-tweets-by-keywordを入力して読み込まれたか確認します。

詳細

キーワードでツイートをスクレイピング

任意のキーワード、ハッシュタグ、ブール検索クエリを使ってツイートを生の状態で収集します。想定されるユースケースはありません。後続の分析で利用できるツイートデータセット全体を返します。

前提条件

  • APIFY_TOKEN 環境変数が設定されていること
  • 任意:Apify MCP サーバーがインストールされていること

入力

パラメーター型必須デフォルト備考
searchTermsarray✅[]Twitter の高度な検索クエリ(例:["#AI lang:en", "from:NASA"])
sortstring任意Top並べ替え順:Latest、Top、Latest+Top
tweetLanguagestring任意—ISO 639-1 言語コード(例:en)
maxItemsnumber任意無制限返すツイートの最大数
onlyVerifiedUsersboolean任意false認証済みユーザーのツイートのみ
onlyTwitterBlueboolean任意falseTwitter Blue 登録者のツイートのみ
onlyImageboolean任意false画像付きのツイートのみ
onlyVideoboolean任意false動画付きのツイートのみ
onlyQuoteboolean任意false引用ツイートのみ
authorstring任意—特定のユーザーハンドルに絞り込む
inReplyTostring任意—特定のユーザーハンドルへの返信ツイート
mentioningstring任意—特定のユーザーハンドルに言及しているツイート
geotaggedNearstring任意—場所の近くにあるツイート
withinRadiusstring任意—geotaggedNear の周囲の半径
geocodestring任意—緯度・経度と半径の文字列
placeObjectIdstring任意—場所がタグ付けされたツイート
minimumRetweetsnumber任意—リツイート数の最小値
minimumFavoritesnumber任意—いいね数の最小値
minimumRepliesnumber任意—返信数の最小値
startstring任意—この日付以降のツイート(YYYY-MM-DD)
endstring任意—この日付より前のツイート(YYYY-MM-DD)
includeSearchTermsboolean任意false一致した検索語を各ツイートに追加する
customMapFunctionstring任意—各出力オブジェクトを変換する JavaScript 関数

ワークフロー

Progress:
- [ ] Step 1: Build search query string
- [ ] Step 2: Run tweet-scraper
- [ ] Step 3: Poll for SUCCEEDED
- [ ] Step 4: Fetch and deliver dataset
ステップ 1:検索クエリを作成する
  • ハッシュタグ検索 → #keyword
  • 完全一致フレーズ → "exact phrase"
  • ブール検索 → word1 AND word2 -exclude
  • アカウント指定 → from:username
  • メンション → @username
ステップ 2:Actor を実行する

推奨 — run_actor.js(待機、出力、ファイル保存を自動処理します):

# Quick answer (prints table to chat)
node scripts/run_actor.js \
  --actor "apidojo~tweet-scraper" \
  --input '{"param": "value"}'

# Save as CSV
node scripts/run_actor.js \
  --actor "apidojo~tweet-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.csv --format csv

# Save as JSON
node scripts/run_actor.js \
  --actor "apidojo~tweet-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.json --format json

APIFY_TOKEN は環境変数または .env ファイルに設定する必要があります。

Apify MCP を利用できる場合:

Tool: apify:run-actor
Actor: "apidojo~tweet-scraper"
Input:
{
  "searchTerms": ["<query>"],
  "maxItems": 200,
  "since": "<YYYY-MM-DD>",
  "lang": "<lang_code>"
}

REST API を使う場合:

curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["<query>"], "maxItems": 200}'

id を RUN_ID として保存します。status = SUCCEEDED になるまでポーリングします:

curl "https://api.apify.com/v2/actor-runs/$RUN_ID?token=$APIFY_TOKEN" | grep '"status"'

結果を取得します:

curl "https://api.apify.com/v2/actor-runs/$RUN_ID/dataset/items?token=$APIFY_TOKEN&format=json"
ステップ 3:エッジケースに対処する
  • 結果が 0 件:クエリが絞り込みすぎている、スペルミスがある、または言語でフィルタリングされている可能性があります。検索語を広げ、言語フィルターを削除し、日付範囲を広げてください。
  • 結果が 20 件未満:since/until の制約を削除してみてください。検索ボリュームが少ない語句では、データがまばらな場合があります。
  • ツイート ID の重複:返す前に id フィールドを使って重複を除去してください。
  • 凍結/削除されたアカウント:凍結されたアカウントのツイートは、投稿者フィールドが空の状態で返されます。これらの行にフラグを付けてください。

出力形式

# Tweet Dataset: "<query>"
Total collected: N | Date range: SINCE – UNTIL | Language: LANG

| Tweet ID | Author | Text (truncated) | Likes | Retweets | Replies | Timestamp |
|----------|--------|-----------------|-------|----------|---------|-----------|
| ...      | ...    | ...             | ...   | ...      | ...     | ...       |

Full dataset: N rows × 15 fields
Available fields: id, text, author_id, author_username, likeCount, retweetCount,
replyCount, quoteCount, lang, createdAt, tweetUrl, media, isRetweet, isQuote, source

トラブルシューティング

有効なハッシュタグなのに結果が空の場合: Twitter API のインデックス反映に遅延がある可能性があります。15 分後にもう一度試してください。 レート制限エラー: maxItems を 100 に減らして再試行してください。 大きなリクエストがタイムアウトする場合: 1 回の実行につき maxItems: 500 を上限に設定し、より大きなデータセットの場合は日付範囲を指定して複数回実行してください。

コメント