twitter スクレイピング, twitter スクレイピング 禁止, twitter スクレイピング python
600, 200, 60
TwitterでAPIを用いてスクレイピングを行う方法について、設定例を含めて解説。各APIプランによる過去ツイート検索制限の違いや、サンドボックス環境について、API利用を簡素化してくれるPythonライブラリについても紹介しています。
目次:
- TwitterではAPIを介さないスクレイピング行為が明確に禁止されている
- Twitter APIの各プランによる過去ツイート検索の違いについて
- 通常のstandardプランでは、ツイート検索は直近7日間以内を対象した”Recent Search”のみ利用可能
- 過去30日間または全期間からの検索は”Sandbox”であれば無料で利用できる
- Sandboxで利用できる呼び出し回数などのAPI利用制限について
- Sandboxの作成・設定方法
- Twitter API v2でできること・Pythonライブラリ
- Twitter API v2でできることの例
- Pythonの場合はライブラリ"Tweepy"を使えばAPI接続を簡略化できる
- Twitter API設定例)Twitter API経由でユーザー情報を取得する
- APIを使わずにTwintでユーザー情報を取得: twintを利用
- 実装するのが面倒くさい、という方はOctoparseやBlockspringなどのノーコードツールでスクレイピングを行なう手も
TwitterではAPIを介さないスクレイピング行為が明確に禁止されている
Twitterでは、APIを介さないスクレイピング行為が明確に禁止されています。そのため、基本的には公式Twitter APIを用いてスクレイピングを行うこととなります。
ユーザーはまた、たとえばTwitterサービスの妨害や当社が提供するインターフェースおよび手順以外の方法を使ったTwitterサービスへのアクセスにより、Twitterサービスの不正利用をしないことにも同意するものとします。ユーザーは、本サービスへのアクセスまたはその使用中に、次のいずれも行ってはなりません。
(iii)Twitterから提供される(かつ該当する利用条件に従う場合にのみ提供される)、当社の現在利用可能な公開インターフェース以外の方法(自動プログラムか否かを問わない)で、本サービスへのアクセスもしくはその探索またはアクセスもしくは探索の試み(ただし、Twitterとの個別契約で特に許可されている場合は除く)(注:本サービスへのクローリングは、robots.txtファイルの定めによる場合は認められていますが、Twitterによる事前の同意がないまま本サービスのスクレイピングをすることは明示的に禁止されています)
Twitterが提供するインターフェイスであるAPIを介して行うスクレイピングはOKだが、それ以外のマニュアル的なスクレイピングは事前の同意がなければ明確にNGだと書かれています。
「そもそも同意のとり方が『みなし同意』であり、同意の有効性に疑問が大きい。同意した覚えのない利用規約に従う必要はない」、「自分は登録しておらず、ユーザーではないからユーザーとの取り決めである利用規約の適用は受けない」(著者まとめ)
のように解釈している記事を見かけました。確かにと思える節はありますが、グレーゾーンであり、APIを利用しない方法でのスクレイピングには大なり小なりリスクがある点をご承知おきください。
どうやって自動化禁止サイトをスマートに確認できるか? 基本的には利用規約を見ましょう。 私はだいたい「Ctrl + F」でページ内検索をかけて、「自動」「ボット」「スクレイピング」などで検索してヒットした部分しか読んでいません。
【※絶対に自動化してはいけない】自動化禁止サイトまとめ! - Qiita
Twitter APIの各プランによる過去ツイート検索の違いについて
Twitter APIにおいてできることは、利用するプランによって異なります。”Sandbox”を利用すれば、無料でもかなりの機能を利用することが可能です。
通常のstandardプランでは、ツイート検索は直近7日間以内を対象した”Recent Search”のみ利用可能
Standardプランでは、ツイート検索については直近7日間のツイートデータのみ検索対象の"Recent Search"のみ利用可能。
Search Tweets > Recent search
直近7日間のツイートから情報を取得。
過去30日間または全期間からの検索は”Sandbox”であれば無料で利用できる
直近7日間だけでなく、過去30日間からの検索"Premium Search”または期間をさだめず全ての期間で検索可能な"Full-archive search"を行なうには、原則として有料プラン契約が必要です。
しかし、Premiumプラン内の”Sandbox”(サンドボックス)による利用であれば、取得できるツイート数に制限があるものの、過去30日間の検索または全期間検索を無料で実行することができるとのこと。
Standardは過去7日間のツイートデータを無料で手に入れることができ、Premiumは過去30日間/もしくは2006年過去ログ全てからの抽出(一部無料で使えるので混乱しやすい)という分類となります。
取得できるデータ上限数は少ないものの、PremiumプランにSandboxという、一部無料で使うことができるプランがあることが分かります。
無料で使うにはPremiumプランのSandboxが最適(過去30日データなら月間25,000ツイート、フルアーカイブなら月間5,000ツイートまで取得可能)
【難解!?】Twitter APIを使って投稿データを収集する方法 | 広報・PR支援の株式会社ガーオン
広告アカウントと紐付けたりしない限り、Sandboxのみの利用も可能のようです。
Sandbox has lower rate limits because it’s only for trying out calls if you do not have an ads account set up (or for trying different configurations of funding instruments).
アクセス数の制限について - Advertiser Tools and APIs / Ads API Japanese - Twitter Developers
私もSandboxを利用してみましたが、クレジットカードの登録も不要で利用できました。
下記はFull Archive Searchの設定方法についての説明動画。
Sandboxで利用できる呼び出し回数などのAPI利用制限について
2022/12/09時点でのSandboxにおけるPremium SearchのAPI利用制限は下記のとおり。
■ 過去30日間のツイートデータ検索(Search Tweets: 30-Days / Sandbox)
- 月間リクエスト回数: 250回まで
- 1ヶ月に取得できるツイート数: 25,000ツイートまで
■ 全期間のツイートデータ検索(Search Tweets: Full Archive / Sandbox)
- 月間リクエスト回数: 50回まで
- 1ヶ月に取得できるツイート数: 5,000ツイートまで
Sandboxの作成・設定方法
過去30日間のツイートデータ検索や全期間のツイートデータ検索を無料で可能とするサンドボックス環境の設定方法について。
サンドボックス | Docs | Twitter Developer
以下の手順が必要です。
- サンドボックス環境を作成し、ラベル名をつけてプロジェクトアプリに紐付ける
- Premiumプランを契約(Premiumアカウント用のトークン等でAPI接続?)
- Sandboxのラベルを指定してAPIコール
サンドボックス環境の作成は、Developer Portalから簡単にできました。
Sandbox環境を作成するには、 まずSandbox環境が利用できるアクセス権が必要です。
Sandbox・アクセス権の申請方法詳細については、 Twitter API Sandboxの作成・申請方法。30日間検索と全期間検索を無料で実行 の記事で画面キャプチャつきで解説しています。
左側メニュー:Products > Premium > Dev Environments
で各Sandbox環境を作成してラベル名をつけ、プロジェクトアプリに紐付ける
Sandbox作成が完了したら、左側メニュー: Products > PremiumからSandboxにおけるAPI使用状況ダッシュボードを確認できます。
参考: Sandboxのラベルを指定してAPIコールする方法
Premium search APIs | Docs | Twitter Developer Platform
Twitter API v2でできること・Pythonライブラリ
Twitter API v2でできることの例
Twitter API v2でできること たとえばTwitter API v2に搭載されている「Twitter APIの中の Search API」という機能を使い、特定の条件に合わせたツイートやフォロワー数といった情報の収集を行います。 収集する情報の精度は、書き込む内容によって異なります。
Twitter API アップデート 何が変わって何ができるようになった?|SNSマーケティングの?を!にするナレッジベース
Pythonの場合はライブラリ"Tweepy"を使えばAPI接続を簡略化できる
後述するTwintとは異なり、TweepyはあくまでTwitter APIを介しての接続・設定を簡単にしてくれるPythonライブラリです。
試しにTweepyを利用してRecent Search(最新7日間ツイートからの検索)を行ってみました。詳細な使い方など、 TweepyをTwitter API v2経由で利用する をご覧ください。
Tweepyについてのリンク集:
Twitter APIを使った情報収集のやり方【備忘録】 | GMの抵抗ワショーイ - 楽天ブログ
Python Twitterからツイートを取得してテキスト分析(wordcloudで見える化) - Qiita
Twitter APIで遊んでみた ~2. ツイートの投稿と取得~ | SIOS Tech. Lab
【コピペOK】Pythonでツイート情報を取得する方法【初心者でもわかる】
Twitter API設定例)Twitter API経由でユーザー情報を取得する
以下、Recent searchでの設定例です。キーワードを指定してAPIを呼び出し、該当のキーワードに関連するつぶやきを行ったユーザーの情報を取得します。
queryキーの値に対象となるキーワードを設定。フィールドに設定を行います。
フィールドについて参考: PythonでTwitter API v2を使ってみよう。ツイートを探す編 - Qiita
今回は該当のキーワードについて発信したTwitterユーザーの情報を取得したいので、user.fieldsキーの値に下記fieldsなどを設定。
- create_at // ユーザーアカウントが作成された時刻
- description // ユーザーのプロフィール文 (bio)
- public_metrics // フォロワー数、フォロー数、累計つぶやき回数、リスト被登録数
- url // ユーザーが自身のTwitterのURL欄に入力しているURL。(Twitterユーザープロフィールページのurlではなく、たとえば自身のWebサイトやブログ、ECサイトなどの主に外部サイトへのリンク)
これらをコンマ区切りでuser.fieldsに設定しますが、コンマの前後に半角スペースなどを入れてはいけません。空白等なく、コンマ区切りでfieldを入力します。
該当ユーザーTwitterプロフィールページへのリンクは、username情報を利用することで取得可能。
https://twitter.com/username が該当ユーザーのプロフィールページURLとなります。
なお、id, name, usernameの値はデフォルトで入力済として扱われるので、特にuser.fieldsキーの値として入力する必要はありません。
Userオブジェクトでのfieldの値については下記URL参照。
User object | Docs | Twitter Developer Platform
さらに、Userオブジェクト(user.fields)を利用するためには、expansionキーの値に下記いずれかを入力する必要があります。
- author_id
- in_reply_to_user_id
このexpansionキーを入力しないと、Tweet内容とUserオブジェクトを紐付けて検索・取得してくることができないようです。
The user object can also be found as a child object and expanded in the Tweet object. The object is available for expansion with ?expansions=author_id or ?expansions=in_reply_to_user_id to get the condensed object with only default fields.
User object | Docs | Twitter Developer Platform
ほか参考: User.fields not working - Twitter API / Twitter API v2 (Early Access) - Twitter Developers
参考: PythonでTwitter API v2を使ってみよう。ツイートを探す編 - Qiita
このようなAPIテストを実施する際には、APIテストツールであるPostmanまたはVS Code拡張機能でAPIテストが可能なThunder Clientがおすすめです。
PostmanおよびThunder ClientでTwitter API v2のAPIテストを実施してみました。 Twitter API v2をPostman, Thunder Clientでテスト の記事をご覧ください。
APIを使わずにTwintでユーザー情報を取得: twintを利用
■ APIを経由しないTwitterのスクレイピングは利用規約違反となるおそれが大きい
APIを利用せず、マニュアルでスクレイピングを行う方法です。
冒頭でも説明しましたが、利用規約違反となる可能性が大きい行為なので、その点ご注意ください。
APIを利用しない場合のスクレイピングの利点としては、各APIプランの上限など制限にこだわらず、柔軟に取得ができるという点でしょうか。
■ APIを経由しないTwitterスクレイピングを実現させるPythonライブラリ: “twint”
twintとは、Twitter APIを使わずにツイートを抽出できるPythonライブラリである。Pythonだけでなく、コマンドラインからの実行も可能となっている。
実装するのが面倒くさい、という方はOctoparseやBlockspringなどのノーコードツールでスクレイピングを行なう手も
ボリュームが少なく、定型的なTwitter上のユーザーリサーチやつぶやき検索を実施したいだけならOctoparseやデータ収集ツールBlockspringなどのノーコードツールを利用してみるのも1つの手です。
有料ではありますが、特にBlockspringはTwitterスクレイピングツールとして有能です。Reports機能では定期実行をさせたうえでGoogle Sheetに結果を吐き出させることが可能。
詳細はWebスクレイピングツール7選!ノーコード・無料で高機能なおすすめを紹介 の記事で紹介していますので、ご覧ください。
この記事の気になる箇所を読みかえす:
- TwitterではAPIを介さないスクレイピング行為が明確に禁止されている
- Twitter APIの各プランによる過去ツイート検索の違いについて
- 通常のstandardプランでは、ツイート検索は直近7日間以内を対象した”Recent Search”のみ利用可能
- 過去30日間または全期間からの検索は”Sandbox”であれば無料で利用できる
- Sandboxで利用できる呼び出し回数などのAPI利用制限について
- Sandboxの作成・設定方法
- Twitter API v2でできること・Pythonライブラリ
- Twitter API v2でできることの例
- Pythonの場合はライブラリ"Tweepy"を使えばAPI接続を簡略化できる
- Twitter API設定例)Twitter API経由でユーザー情報を取得する
- APIを使わずにTwintでユーザー情報を取得: twintを利用
- 実装するのが面倒くさい、という方はOctoparseやBlockspringなどのノーコードツールでスクレイピングを行なう手も
Category: 開発・プログラミング | エンジニアリング