Twitterの非公式APIから、ツイートやユーザーを高速に切り抜きするためのPythonライブラリです。
このツールは、検索フレーズによるツイート、IDによるツイート、ユーザー名によるユーザーを切り取ること支援します。TwitterのAPIを使用していますが、Webサイトでも同じAPIが使用されます。
ライブラリーの主な利点
- シンプルなコード – ユーザがライブラリに貢献可能。
- ドメインオブジェクトとインターフェース – 機能の主要部分は置き換えることができる(例:Webリクエストの呼び出し)、ライブラリは基本的なシンプルなソリューションを持っている。
拡張したい場合、フォークすることも可能。 - 統合テストによる100%のカバレッジ – この利点は、APIの変更を見つけることができ、テストは毎週実施され、タスクが失敗したときに、簡単に変更のソースを見つけることができる。
- カスタムツイートとユーザー出力 – ツイートやユーザーのカスタムフォーマットを保存することが可能。
インストール
pip install -U stweet
基本的な使い方
簡単な依頼をするためには、切り取り・タスクが準備する必要がある。次のタスクはRunnerで処理。
import stweet as st
search_tweets_task = st.SearchTweetsTask(
all_words='#covid19'
)
tweets_collector = st.CollectorTweetOutput()
st.TweetSearchRunner(
search_tweets_task=search_tweets_task,
tweet_outputs=[tweets_collector, st.CsvTweetOutput('output_file.csv')]
).run()
tweets = tweets_collector.get_scrapped_tweets()
このコードでは、ハッシュタグ #covid19 を持つすべてのツイートを呼び出しています。その結果、tweetsオブジェクトに切り取りされたツイートのリストが格納されます。
上記の例は、検索フレーズでツイートを切り取りする方法を示しています。Stweetでは、ツイートIDでスクラップすることもできます。
以下がその例です。
import stweet as st
tweets_by_ids_task = st.TweetsByIdsTask(['1336002732717727752', '1338916735479496704'])
tweets_collector = st.CollectorTweetOutput()
st.TweetsByIdsRunner(
tweets_by_ids_task=tweets_by_ids_task,
tweet_outputs=[tweets_collector, st.CsvTweetOutput('output_file.csv')]
).run()
tweets = tweets_collector.get_scrapped_tweets()
Stweetは、ユーザーのスクリーンネームでユーザー情報を切り取りすることができます。
import stweet as st
get_users_task = st.GetUsersTask(['donaldtuskEPP', 'JoeBiden', 'realDonaldTrump'])
users_collector = st.CollectorUserOutput()
st.GetUsersRunner(
get_user_task=get_users_task,
user_outputs=[users_collector]
).run()
users = users_collector.get_scrapped_users()
Stweetでは、リクエストライブラリであるst.RequestsWebClientをベースにしたデフォルトのWebClientを実装しています。クラスはすべてのプロパティをデフォルト値で持っているが、それらを変更することで、ユーザーはプロキシを設定したり、ssl検証を無効にしたりすることができます。
このスニペットでは、その使い方を紹介しています。
import stweet as st
search_tweets_task = st.SearchTweetsTask(
all_words='#covid19',
)
tweets_collector = st.CollectorTweetOutput()
proxies_config = st.RequestsWebClientProxyConfig(
http_proxy="<Your http proxy URL>",
https_proxy="<Your https proxy URL>"
)
st.TweetSearchRunner(
search_tweets_task=search_tweets_task,
tweet_outputs=[tweets_collector, st.CsvTweetOutput('output_file.csv')],
web_client=st.RequestsWebClient(proxy=proxies_config, verify=False),
).run()
tweets = tweets_collector.get_scrapped_tweets()
本ライブラリの重要な詳細とクラスはすべて以下のとおりです。
SearchTweetsTaskクラス
このクラスは、ツイートをスクラップするタスクを表します。以下のプロパティを含む。
Property | Type | Description |
---|---|---|
all_words | Optional[str] | プロパティにすべての単語を含むツイートを検索 |
exact_words | Optional[str] | プロパティの語順が変わっていないツイートを検索する |
any_word | Optional[str] | このプロパティに含まれる任意の単語を含むツイートを検索します。 |
from_username | Optional[str] | そのユーザーのつぶやきを検索 |
to_username | Optional[str] | ユーザーへのツイート検索(ユーザーへの言及からツイートが始まる) |
since | Optional[Arrow] | 時刻以降のつぶやきを検索 |
until | Optional[Arrow] | 時間までのつぶやきを検索 |
language | Optional[st.Language] | 言語によるツイート検索 |
tweets_count | Optional[int] | 検索最初のツイート_ツイート数 |
replies_filter | Optional[st.RepliesFilter] | 返信・原文ありのツイートのフィルタリング |
すべてのプロパティはTwitterの詳細検索から取得したもので、デフォルトでは「なし」となっています。
SearchRunnerクラス
SearchRunnerクラスは、SearchTweetsTaskで指定されたツイートをスクラップすることができるライブラリです。ランナーには以下のプロパティがあります。
Property | Type | Default value | Description |
---|---|---|---|
search_run_context | st.SearchRunContext | None, in __init__() assign SearchRunContext() | 検索コンテキスト、Twitterへの次のリクエストを行うための重要なすべてのプロパティを含む |
search_tweets_task | st.SearchTweetsTask | Obligatory property | Runnerでダウンロードするツイートを指定するプロパティ。 |
tweet_outputs | List[st.TweetOutput] | Obligatory property | ダウンロードしたツイートをエクスポートするオブジェクトのリスト |
web_client | st.WebClient | stweet.http_request.WebClientRequests() | WebClient の実装。カスタムの実装に置き換えることができる。 |
tweet_parser | st.TweetParser | stweet.parse.TwintBasedTweetParser() | Web APIレスポンスからのツイートの構文解析。 |
auth_token_provider_factory | st.auth.AuthTokenProviderFactory | st.auth.SimpleAuthTokenProviderFactory() | 認証トークンを提供する AuthTokenProvider のファクトリ |
TweetsByIdsTaskクラス
ツイートをIDでスクラップするタスクを表すクラスで、シンプルなプロパティを持ちます。
Property | Type | Description |
---|---|---|
tweet_ids | List[str] | Tweet IDのつぶやきを切り取る |
TweetsByIdsRunnerクラス
TweetByIdsRunnerクラスは、TweetByIdsTaskで指定されたツイートをスクラップすることができるライブラリです。ランナーには以下のプロパティがあります。
Property | Type | Default value | Description |
---|---|---|---|
tweets_by_ids_task | st.TweetsByIdsTask | Obligatory property | Runnerでダウンロードするツイートを指定するプロパティ。 |
tweet_outputs | List[st.TweetOutput] | Obligatory property | ダウンロードしたツイートをエクスポートするオブジェクトのリスト。 |
search_run_context | st.SearchRunContext | None, in __init__() assign SearchRunContext() | 検索コンテキスト、Twitterへの次のリクエストを行うための重要なすべてのプロパティを含む。 |
web_client | st.WebClient | stweet.http_request.WebClientRequests() | WebClient の実装。カスタムの実装に置き換えることができる。 |
tweet_parser | st.TweetParser | stweet.parse.TwintBasedTweetParser() | Web APIレスポンスからのツイートの構文解析。 |
auth_token_provider_factory | st.auth.AuthTokenProviderFactory | st.auth.SimpleAuthTokenProviderFactory() | 認証トークンを提供する AuthTokenProvider のファクトリ |
GetUsersTaskクラス
スクラップユーザーに対するタスクを表すクラスで、シンプルなプロパティを持っています。
Property | Type | Description |
---|---|---|
usernames | List[str] | スクラップするユーザのユーザ名。ユーザ名は通常 Twitter では ‘@’ 接頭辞付きで使用されます。 |
GetUsersRunnerクラス
GetUsersRunner クラスを使用すると、GetUsersTask で指定されたユーザーをスクラップすることができます。ランナーには以下のプロパティがあります。
Property | Type | Default value | Description |
---|---|---|---|
get_user_task | st.GetUsersTask | Obligatory property | プロパティは、Runnerによってダウンロードされるべきユーザーを指定する |
user_outputs | List[st.UserOutput] | Obligatory property | ダウンロードしたユーザーをエクスポートするオブジェクトのリスト |
get_user_context | st.GetUsersContext | None, in __init__() assign GetUsersContext() | 検索コンテキスト、Twitterへの次のリクエストを行うための重要なすべてのプロパティを含む |
web_client | st.WebClient | stweet.http_request.WebClientRequests() | WebClient の実装。カスタムの実装に置き換えることができる。 |
auth_token_provider_factory | st.auth.AuthTokenProviderFactory | st.auth.SimpleAuthTokenProviderFactory() | 認証トークンを提供する AuthTokenProvider のファクトリ |
TweetOutputクラス
TweetOutputは、スクラップされたツイートをエクスポートするためのインターフェースです。Stweetには、以下のような実装がある。
TweetOutput implementation | Description |
---|---|
CollectorTweetOutput | 出力はメモリ内にツイートを保存し、ツイートのリストを返す get_scrapped_tweets() メソッドを備えている |
CsvTweetOutput | 出力は、ツイートをcsvファイルにエクスポートします。 |
JsonLineFileTweetOutput | 出力はツイートをJSONオブジェクトとしてエクスポートし、ファイルの各行にはツイートを含む1つのJSONオブジェクトが存在する |
PrintEveryNTweetOutput | N個のつぶやきを画面に出力する。N個の値はコンストラクタで指定する。 |
PrintFirstInRequestTweetOutput | 受信したリクエストの最初のツイートを出力する |
PrintTweetOutput | 出力はすべてのツイートを表示 |
さらに、TweetOutputは他にも様々な方法で実装することができます。
UserOutputクラス
UserOutputは、スクラップされたユーザをエクスポートするためのインターフェースです。Stweetには、以下のような実装があります。
UserOutput implementation | Description |
---|---|
CollectorUserOutput | 出力はユーザーをメモリに保存し、メソッド get_scrapped_users() でユーザーのリストを返す。 |
CsvUserOutput | 出力はcsvファイルにユーザーを書き出す |
JsonLineFileUserOutput | 出力はユーザーをJSONオブジェクトとしてエクスポートし、ファイルの各行にはユーザーを持つ1つのJSONオブジェクトがあります。 |
PrintEveryNUserOutput | 出力はN人ごとに画面に表示され、Nの値はコンストラクタで指定できる |
PrintFirstInRequestUserOutput | 出力は、受信したリクエストの最初のユーザーを表示します。 |
PrintUserOutput | 出力はすべてのユーザーを印刷します。 |
さらに、UserOutputは、他の多くの方法で実装することができます。
ProxyClientRequestsクラス
ProxyClientRequestsは、st.WebClientの実装で、プロキシを使用することができ、request.requestメソッドで使用できる追加オプションを提供することができます。
Property | Type | Description |
---|---|---|
proxies | Dict[str, str] | プロキシの URL にマッピングするプロトコルを指定する辞書。 |
options | Dict[str, Any] | プロキシの URL にマッピングするディクショナリ。 |
さらに、独自のWebClientを実装することも可能です。