Pushshift.io Reddit API は、Reddit のコメントや投稿を検索するための拡張機能と検索機能を提供するために、/r/datasets mod チームによって設計および作成されました。プロジェクト リーダーの /u/stuck_in_the_matrix は、https://files.pushshift.io にある Reddit のコメントと投稿のアーカイブの管理者です。
この RESTful API は、Reddit データを検索するための完全な機能を提供し、強力なデータ集約を作成する機能も含みます。この API を使用すると、興味のあるデータをすばやく見つけて、興味深い相関関係を見つけることができます。
Reddit のコメントおよび投稿データベースにアクセスするには、主に 2 つの方法があります。 1 つは https://api.pushshift.io/ 経由で API を直接使用する方法、もう 1 つは https://elastic.pushshift.io/ 経由でバックエンド Elasticsearch 検索エンジンにアクセスする方法です。このドキュメントでは両方のアプローチについて説明し、次のことを行います。 API を効果的に使用する方法の例。このドキュメントでは、より焦点を絞った検索を利用するための API パラメーターの使用法についても説明します。
Reddit で公開されているすべてのコメントと投稿を検索するために使用される主なエンドポイントは 2 つあります。
次のセクションでは、コメント検索エンドポイントを使用してより効果的な検索を実行する方法を検討します。
コメントを検索するには、https://api.pushshift.io/reddit/search/comment/ エンドポイントを使用します。いくつかの例から始めて、このエンドポイントを使用するときに使用できるさまざまなパラメーターを見てみましょう。最も単純な検索の 1 つは、q パラメーターのみを使用することです。 q パラメータは、特定の単語または語句を検索するために使用されます。以下に例を示します。
「科学」という単語に言及した最新のコメントを検索する
https://api.pushshift.io/reddit/search/comment/?q=science
これにより、コメント本文に「科学」という用語が含まれる最新のコメントが検索されます。この検索では大文字と小文字が区別されないため、大文字と小文字に関係なく、「science」という用語が出現すると検索されます。 API のデフォルトでは、最近作成されたコメントが最初に並べ替えられます。この検索を実行すると、25 件の結果が返されます。これは検索のデフォルトのサイズであり、size パラメーターを使用して調整できます。これについてはパラメータのセクションでさらに詳しく説明します。データは JSON 形式で返され、実際の検索結果は「data」キーに含まれます。見つかった結果の総数、検索の処理にかかった時間など、検索に関する追加情報を提供する「メタデータ」キーもあります。集計が要求された場合、すべての集計データが aggs キーで返されます。
コメント検索を実行するときに使用できる追加パラメータが多数あります。それらを見て、それぞれの例を示してみましょう。
パラメータ | 説明 | デフォルト | 受け入れられる値 |
---|---|---|---|
q | 検索語。 | 該当なし | フレーズの文字列/引用符で囲まれた文字列 |
ID | ID を介して特定のコメントを取得する | 該当なし | カンマ区切りのbase36 ID |
サイズ | 返される結果の数 | 25 | 整数 <= 500 |
フィールド | 1 つは特定のフィールドを返します (カンマ区切り) | 返されるすべてのフィールド | 文字列またはカンマ区切りの文字列 |
選別 | 結果を特定の順序で並べ替える | 「デスク」 | 「asc」、「desc」 |
並べ替えタイプ | 特定の属性で並べ替える | 「作成された_utc」 | 「スコア」、「コメント数」、「作成された_utc」 |
集合体 | 集計の概要を返す | 該当なし | ["作成者"、"リンクID"、"作成された_utc"、"サブレディット"] |
著者 | 特定の著者に限定する | 該当なし | 弦 |
サブレディット | 特定のサブレディットに制限する | 該当なし | 弦 |
後 | この日付以降の結果を返す | 該当なし | エポック値または整数 + "s,m,h,d" (つまり、30 日を表す 30d) |
前に | この日付より前の結果を返す | 該当なし | エポック値または整数 + "s,m,h,d" (つまり、30 日を表す 30d) |
頻度 | created_utc に設定されている場合は、aggs パラメーターとともに使用されます。 | 該当なし | 「秒」、「分」、「時」、「日」 |
メタデータ | クエリに関するメタデータを表示する | 間違い | 「真」、「偽」 |
ids パラメーターを使用して、コメントを直接取得できます。 ID によってコメントのバッチを取得するには、次の例を使用します。
Base 36 ID 値を使用して 3 つのコメントを取得します。
https://api.pushshift.io/reddit/comment/search?ids=dlrezc8,dlrawgw,dlrhbkq
確認すべきパラメータがかなり多くあるため、より複雑な例と上記のパラメータの使用方法をいくつか紹介することから始めましょう。上記の例を続けて、「科学」キーワード検索を拡張してみましょう。 「科学」という用語を検索したいが、それを特定のサブレディットに限定したい場合はどうすればよいでしょうか? subreddit パラメータを使用すると、次のようにすることができます。
サブレディット /r/askscience 内で「サイエンス」という単語に言及している最新のコメントを検索します
https://api.pushshift.io/reddit/search/comment/?q=science&subreddit=askscience
これにより、「サイエンス」という用語を含む 25 件のコメントが返されますが、/r/askscience サブレディットからのみ返されます。特定の並べ替え方法を要求していないため、最新のコメントが返されます (並べ替えパラメータのデフォルトは「desc」です)。 /r/askscience に「科学」という単語について言及した最初のコメントを付けたい場合はどうすればよいでしょうか?これを処理するには、sort パラメーターと size パラメーターを使用できます。
サブレディット /r/askscience 内で「サイエンス」という単語に言及している最新のコメントを検索します
https://api.pushshift.io/reddit/search/comment/?q=science&subreddit=askscience&sort=asc&size=1
結果は次のとおりです。
{
"data": [
{
"author": "MockDeath",
"author_flair_css_class": null,
"author_flair_text": null,
"body": "Knowing more would definitely help. I guess all you can do is find out if they know the basics like you said then take it from there. That COu00b2 has the carbon turned to the isotope carbon14 in the upper atmosphere by cosmic radiation. This causes a specific percentage of carbon in the atmosphere to be carbon14.nnNow we are carbon based life forms and we have to get the carbon we are built out of from some where. We get it from eating plants, and the plants get it from absorbing COu00b2 from the air. So so long as we are alive, we uptake new carbon14. So this gives you a pretty good base line for dating.nnNow to fight arguments against carbon dating you could use the example of how we can see proton collisions in the LHC for sensitivity of our equipment. Nuclear decay is very accurate in how fast it happens, this is why atomic clocks work to a much higher degree of accuracy than other methods of time keeping. Also, you might want to make a general appeal for science. Science works, that is why we have TV's, robots, particle accelerators, satellites, computers, MRI and CAT scanners, nuclear power, etc etc. Scientists are not just willy nilly making shit up, or these kinds of things wouldn't work.",
"created_utc": 1270637661,
"id": "c0nn9iq",
"link_id": "t3_bne3u",
"parent_id": "t1_c0nn5ux",
"score": 2,
"subreddit": "askscience",
"subreddit_id": "t5_2qm4e"
}
],
"metadata": {
"execution_time_milliseconds": 30.52,
"results_returned": 1,
"shards": {
"failed": 0,
"successful": 36,
"total": 36
},
"size": 1,
"sort": "asc",
"sort_type": "created_utc",
"timed_out": false,
"total_results": 134785,
"version": "v3.0"
}
}
返された結果から、「サイエンス」について言及した /r/askscience への最初のコメントがエポック日 1270637661 に発生したことがわかります。これは、2010 年 4 月 7 日水曜日、午前 10 時 54 分 21 秒 (GMT) に変換されます。メタデータ部分を簡単に見てみましょう。この検索の実行時間は約 30 ミリ秒だったことがわかります。合計 36 個のシャードが検索され、すべてが成功しました。検索はタイムアウトしませんでした (timed_out パラメーター)。これは良好です。より複雑な一部の検索ではタイムアウトになる可能性があるため、プログラムで API を使用する場合は、これを確認する必要がある属性です。 total_results の値は 134,785 です。これにより、/r/askscience 内にある、science という単語に言及したコメントの総数がわかります。 before または after パラメーターを使用しなかったため、この数値は /r/askscience に対して行われたコメント全体を表します。
引き続き、追加のパラメーターを使用して、検索 API の機能を強調しましょう。 before パラメータと after パラメータを使用すると、両方にエポック タイムスタンプを与えることで、検索の時間枠を制限できます。ただし、API は、before および after パラメーターについて、より人間に近い値も理解します。数字の後に文字 s、m、h、d (秒、分、時、日を表す) を使用して、時間枠を制限することもできます。いくつかの例を見てみましょう。
サブレディット /r/askhistorians で「Rome」を検索したいが、過去 30 日間のみに限定したい場合は、値 30d (30 日) を指定して after パラメーターを使用できます。
サブレディット /r/askhistorian で過去 30 日以内にローマに言及したコメントを検索する
https://api.pushshift.io/reddit/search/comment/?q=rome&subreddit=askhistorians&after=30d
3 日前に最近のニュース記事があったが、検索ウィンドウを 4 日前から 2 日前までに制限したい場合はどうすればよいでしょうか?これを行うには、before パラメータと after パラメータの両方を使用できます。次の例では、4 日前から 2 日前までに作成されたトランプに言及したコメントを検索し、昇順に並べ替えます。
「トランプ」という用語ですべてのサブレディットを検索し、2 ~ 4 日前に作成されたコメントを返します
https://api.pushshift.io/reddit/search/comment/?q=trump&after=4d&before=2d&sort=asc
最新の 150 件のコメントを検索したいとしますが、必要なのはコメントごとに作成者フィールドと本文フィールドだけを返す必要があるとします。フィールド パラメータを使用すると、どの情報をフィルタリングするかを API に指示できます。これは主に、大量のリクエストを実行し、特定のフィールドのみを返す必要がある場合に、帯域幅を削減するのに役立ちます。
以下は、fields パラメーターを使用して、「政府」に言及している過去 150 件のコメントを検索し、作成者フィールドと本文フィールドのみを返す例です。
すべてのサブレディットで「政府」という用語を検索し、本文キーと作成者キーのみを含むコメントを返します。
https://api.pushshift.io/reddit/search/comment/?q=government&size=150&fields=body,author
サブレディット /r/askscience 内で最初に出現する「science」という単語を検索する上記の例の 1 つを使用すると、コメントの作成者が「MockDeath」であることがわかりました。 「MockDeath」が Reddit に対して行った最初の 100 件のコメントを取得したい場合はどうすればよいでしょうか? author パラメータを、sort および size パラメータとともに使用できます。
すべてのサブレディットを検索し、ユーザー /u/MockDeath によってこれまでに作成された最初の 100 件のコメントを取得します
https://api.pushshift.io/reddit/search/comment/?author=MockDeath&sort=asc&size=100
集計は、検索に概要データを提供する強力な方法です。 aggs パラメーターを使用すると、特定のパラメーターを中心にファセットをすばやく作成し、時間の経過とともにデータがどのように変化するかを確認できます。コメント検索の aggs パラメータは、author、subreddit、reated_utc、link_id の値を受け入れます。このパラメータを使用すると、非常に素晴らしいことがたくさんできるので、いくつかの例を見てみましょう。
「トランプ」という用語の長期にわたる使用頻度を確認したいとします。今期、過去 7 日間に 1 時間あたりに投稿されたコメントの数を確認したいと考えています。集計と aggs パラメータを使用すると、そのデータをすばやく取得できます。この基準を使用した例を次に示します。
「トランプ」という用語を使用して時間集計を作成し、過去 7 日間の 1 時間ごとにトランプに言及したコメントの数を表示します。
https://api.pushshift.io/reddit/search/comment/?q=trump&after=7d&aggs=created_utc&frequency=hour&size=0
私たちは、頻度パラメータと aggs パラメータを使用して時間ごとのバケットを作成し、過去 7 日間のトランプに言及したコメントの総数を表示しました。コメント データではなく集計データのみを取得することに関心があるため、サイズ パラメーターは 0 に設定されました。集計データは、キー aggs -> created_utc の下の応答で返されます。以下はリターンの最初の部分の抜粋です。
{
"aggs": {
"created_utc": [
{
"doc_count": 685,
"key": 1502406000
},
{
"doc_count": 1238,
"key": 1502409600
},
{
"doc_count": 1100,
"key": 1502413200
},
doc_count 値は、「トランプ」という用語を含むコメントの総数です。キー値は、その特定のバケットのエポック時間です。この例では、最初のバケットのエポック時間は 1502406000 で、2017 年 8 月 10 日木曜日の午後 11:00:00 に相当します。このキー値はバケットの開始時刻であるため、この例では、2017 年 8 月 10 日木曜日午後 11:00:00 から 2017 年 8 月 10 日木曜日 12:00 までの間、685 件のコメントに「トランプ」という用語が含まれています。午後00時。頻度パラメーターを使用すると、秒、分、時間、日、週、月、年ごとにバケットを作成できます。この集計を使用すると、データを使用してチャート (ハイチャート) を作成し、特定の用語、作成者、サブレディットなどのコメントのアクティビティをグラフ化できます。これは非常に強力なデータ分析ツールです。
一定の期間にわたる特定のコメント用語の頻度を取得するだけでなく、その期間にわたって特定の用語に対してどのサブレディットが最も人気があるかを確認したい場合はどうすればよいでしょうか?以下は、aggs パラメーターを使用して、特定の用語に対してどのサブレディットが最も活発であったかを示す例です。
トランプという用語を使用してサブレディット集計を作成し、過去 7 日間にトランプに言及した上位のサブレディットを表示します
https://api.pushshift.io/reddit/search/comment/?q=trump&after=7d&aggs=subreddit&size=0
結果の一部を次に示します。
{
"aggs": {
"subreddit": [
{
"bg_count": 66,
"doc_count": 44,
"key": "lovetrumpshaters",
"score": 0.6666666666666666
},
{
"bg_count": 20,
"doc_count": 9,
"key": "Denmark_Uncensored",
"score": 0.45
},
{
"bg_count": 51,
"doc_count": 16,
"key": "WhoRedditHatesNow",
"score": 0.3137254901960784
},
subreddit の集計は、そのサブレディット内のクエリ用語に言及したコメントの合計数 (doc_count) と、その期間中にそのサブレディットに対して行われたコメントの合計数 (bg_count) を返します。これにより、どのサブレディットがトランプについて最も頻繁に言及したかが表示されるだけでなく、正規化された結果も得られるため、そのサブレディットのコメントの何パーセントに検索語が含まれているかも確認できます。 「トランプ」という検索語を最も頻繁に言及したサブレディットを単純にランク付けした場合、結果は、一般に最も多くのアクティビティが含まれているサブレディットに偏ることになります。このアプローチを使用すると、生のカウントと正規化されたデータの両方を確認できます。
API では、link_id での集計も可能です。これは、特定の検索用語に基づいてどの投稿が最も人気があるかを確認するためのもう 1 つの非常に強力な方法です。上記の例を続けて、これが非常に役立つシナリオを示してみましょう。過去 24 時間以内に、ドナルド トランプに関する数多くの大きなニュースが投下されました。 API を使用して、投稿内で彼に言及したコメントの数に基づいて、どの投稿がトランプに関連しているかを確認したいと考えています。この情報をすばやく取得するには、再び aggs パラメータを使用して link_id に設定します。別の例を見てみましょう。
過去 24 時間以内に投稿された、コメント内で頻繁にトランプに言及した投稿を表示します
https://api.pushshift.io/reddit/search/comment/?q=trump&after=24h&aggs=link_id&size=0
これにより、aggs -> link_id キーの下に送信オブジェクトの配列が返されます。 doc_count は、検索語 (「トランプ」) に言及する各投稿のコメントの合計数を示し、bg_count は、その投稿に対して行われたコメントの合計数を示します。これは、特定の検索語またはフレーズに基づいて「注目の」投稿をすばやく見つけるための優れた方法です。
API を使用すると、著者に関する集計を作成できるため、特定の検索用語に対してどの著者が最も多くのコメントを作成したかをすぐに確認できます。著者集約の使用例を次に示します。
過去 24 時間に「トランプ」という用語に言及した上位の著者を表示します
https://api.pushshift.io/reddit/search/comment/?q=trump&after=24h&aggs=author&size=0
{
"aggs": {
"author": [
{
"doc_count": 605,
"key": "grrrrreat"
},
{
"doc_count": 329,
"key": "AutoModerator"
},
{
"doc_count": 168,
"key": "autotldr"
},
{
"doc_count": 73,
"key": "SnapshillBot"
},
著者の集計により、特定のクエリ用語を含む最も多くのコメントを作成した著者が表示されます。上の例から、「トランプ」という用語に言及しているトップ著者の多くは実際にはボットであることがわかります。
aggs パラメーターを使用すると、複数の集計を結合し、特定の用語に関する多くのファセット データを取得できます。上記の例を使用すると、すべての通話を 1 つの通話に結合し、過去 24 時間の上位の投稿、トランプに言及した 1 時間あたりのコメントの頻度、トランプについて投稿した上位の著者、およびコメントが行われた上位のサブレディットを表示できます。トランプ氏について言及した。
過去 24 時間における「トランプ」という用語の著者、投稿、サブレディット、および出現頻度の集計を表示します。
https://api.pushshift.io/reddit/search/comment/?q=trump&after=24h&aggs=author,link_id,subreddit,created_utc&frequency=hour&size=0
送信を検索するには、エンドポイント https://api.pushshift.io/reddit/search/submission/ エンドポイントを使用します。いくつかの例から始めて、このエンドポイントを使用するときに使用できるさまざまなパラメーターを見てみましょう。単純な検索では、q パラメーターを使用して特定の単語または語句を検索します。以下に例を示します。
「科学」という単語を含む最新の投稿を検索します
https://api.pushshift.io/reddit/search/submission/?q=science
これにより、タイトルまたはセルフテキストにサイエンスという単語が含まれる最新の投稿が検索されます。検索では大文字と小文字が区別されないため、大文字と小文字に関係なく、科学に関するあらゆる用語が検索されます。 API のデフォルトでは、最近送信されたものから順に並べ替えられます。この検索を実行すると、25 件の結果が返されます。これは検索のデフォルトのサイズであり、size パラメーターを使用して変更できます。これについてはパラメータのセクションでさらに詳しく説明します。データは JSON 形式で返され、結果は「data」キーに含まれます。
送信の検索を実行するときに使用できる追加パラメータが多数あります。それぞれについて説明し、それぞれの例を示しましょう。
パラメータ | 説明 | デフォルト | 受け入れられる値 |
---|---|---|---|
ID | ID を介して特定の送信を取得する | 該当なし | カンマ区切りのbase36 ID |
q | 検索語。可能なすべてのフィールドを検索します | 該当なし | フレーズの文字列/引用符で囲まれた文字列 |
Q:そうではありません | 検索語を除外します。これらの用語は除外されます | 該当なし | フレーズの文字列/引用符で囲まれた文字列 |
タイトル | タイトルフィールドのみを検索します | 該当なし | フレーズの文字列/引用符で囲まれた文字列 |
タイトル:ない | タイトルから検索語を除外します。これらの用語は除外されます | 該当なし | フレーズの文字列/引用符で囲まれた文字列 |
セルフテキスト | セルフテキストフィールドのみを検索します | 該当なし | フレーズの文字列/引用符で囲まれた文字列 |
自文:そうではありません | 検索語をセルフテキストから除外します。これらの用語は除外されます | 該当なし | フレーズの文字列/引用符で囲まれた文字列 |
サイズ | 返される結果の数 | 25 | 整数 <= 500 |
フィールド | 1 つは特定のフィールドを返します (カンマ区切り) | すべてのフィールド | 文字列またはカンマ区切りの文字列 (複数の値が許可されます) |
選別 | 結果を特定の順序で並べ替える | 「デスク」 | 「asc」、「desc」 |
並べ替えタイプ | 特定の属性で並べ替える | 「作成された_utc」 | 「スコア」、「コメント数」、「作成された_utc」 |
集合体 | 集計の概要を返す | 該当なし | ["作成者"、"リンクID"、"作成された_utc"、"サブレディット"] |
著者 | 特定の著者に限定する | 該当なし | 文字列またはカンマ区切りの文字列 (複数の値が許可されます) |
サブレディット | 特定のサブレディットに制限する | 該当なし | 文字列またはカンマ区切りの文字列 (複数の値が許可されます) |
後 | この日付以降の結果を返す | 該当なし | エポック値または整数 + "s,m,h,d" (つまり、30 日を表す 30d) |
前に | この日付より前の結果を返す | 該当なし | エポック値または整数 + "s,m,h,d" (つまり、30 日を表す 30d) |
スコア | スコアに基づいて結果を制限する | 該当なし | 整数、または > x または < x (つまり、スコア=>100 またはスコア=<25) |
num_comments | コメント数に基づいて結果を制限する | 該当なし | 整数、> x、または < x (つまり、num_comments=>100) |
18歳以上 | nsfw または sfw コンテンツに制限する | どちらも許可されています | 「真」または「偽」 |
is_video | 動画コンテンツに限定する | どちらも許可されています | 「真」または「偽」 |
ロックされた | ロックまたはロック解除されたスレッドのみを返します | どちらも許可されています | 「真」または「偽」 |
ベタベタした | 貼り付けられたコンテンツまたは貼り付けられていないコンテンツのみを返す | どちらも許可されています | 「真」または「偽」 |
スポイラー | ネタバレのみを除外または含める | どちらも許可されています | 「真」または「偽」 |
コンテストモード | コンテンツモードの送信を除外または含める | どちらも許可されています | 「真」または「偽」 |
頻度 | created_utc に設定されている場合は、aggs パラメーターとともに使用されます。 | 該当なし | 「秒」、「分」、「時」、「日」 |
メタデータ | クエリに関するメタデータを表示する | 間違い | [「真」、「偽」] |
この呼び出しは、Reddit の API と一緒に使用すると非常に役立ちます。数千のコメントを含む大規模な投稿がある場合、投稿のすべてのコメント ID を取得するのが困難なことがよくあります。この呼び出しは、送信 ID が渡されると、コメント ID の配列を返します。エンドポイントは次のとおりです: https://api.pushshift.io/reddit/submission/comment_ids/{base36 送信 ID}
この呼び出しは、コメント ID の配列を含むデータ キーを返します。その後、この API または Reddit API から実際のコメント情報を取得できます。投稿がかなり新しい場合は、Reddit API を使用してコメントの最新のスコアを取得することをお勧めします。
送信オブジェクトのすべてのコメント ID を取得する
https://api.pushshift.io/reddit/submission/comment_ids/6uey5x
終点 | 説明 | 状態 |
---|---|---|
/reddit/検索/コメント/ | Redditのコメントを検索 | アクティブ |
/reddit/検索/送信/ | Redditの投稿を検索 | アクティブ |
/reddit/submission/comment_ids/{base36-submission-id} | 送信オブジェクトのコメント ID を取得する | アクティブ |
/reddit/analyze/user/{著者名} | Reddit ユーザーのアクティビティを分析する | 開発中 |
/reddit/term/frequency/{用語} | アクティビティに基づいて用語を分析する | 開発中 |
/reddit/検索/すべて/ | コメントと投稿の両方を検索 | 開発中 |
/reddit/トレンド/人々 | Reddit で誰がトレンドになっているかを確認する | 開発中 |
/reddit/検索/リンク | Reddit で共有されている関連リンクを見つける | 開発中 |