Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 8522

Reddit APIで投稿・コメント情報を収集する方法【サンプルコード有】 - ぼっちエンジニアの備忘録

$
0
0

はじめに

この記事では、RedditAPIの概要とその利用方法について詳しく解説する。
RedditAPIを使用すると、Reddit上の投稿やコメントを効率的に収集でき、データ分析自動化に非常に役立つ。

さらに、サンプルコードも記載しているため、プログラミング初心者でもすぐに実践できる。ぜひ試してほしい。

Redditとは?

Redditは、ユーザーが投稿したコンテンツを共有し、ディスカッションするための世界最大級のオンラインフォーラム掲示板)だ。
各トピックは「サブレディット」と呼ばれるテーマ別のコミュニティに分類されており、プログラミング、エンタメ、ニュース、趣味など多岐にわたるテーマが扱われている。
Redditの特徴として、ユーザーが投稿やコメントに対して投票を行うシステムがあり、評価の高いものが上位に表示される。このため、人気のある投稿や話題がすぐに目に留まる仕組みだ。

RedditAPIを利用すれば、特定の投稿やコメントをプログラムから取得し、データ分析やツール開発に活用できる。

RedditAPIの利用方法

RedditAPIを利用するには、まずRedditAPIクライアントを作成し、認証情報を取得する必要がある。ここではその具体的な手順を説明する。

実施環境

項目 内容
OS Windows 11 Pro
言語(バージョン) Python (3.12.7)

RedditAPIの設定手順

RedditAPIトークンの発行

次に、RedditAPIをOAuth2認証で利用できるようにセットアップを行う。以下のリンクを参考にCLIENT_IDCLIENT_SECRETUSER_AGENTを取得しよう。 Reddit API OAuth2 設定ガイド

OAuth2認証の設定

RedditAPIを使用するにはOAuth2認証が必須だ。以下のサンプルコードを使い、トークンを取得する。

import requests

CLIENT_ID = 'your_client_id'
SECRET_KEY = 'your_secret_key'

auth = requests.auth.HTTPBasicAuth(CLIENT_ID, SECRET_KEY)
data = {'grant_type': 'client_credentials'}
headers = {'User-Agent': 'MyRedditBot/0.0.1'}

res = requests.post('https://www.reddit.com/api/v1/access_token', auth=auth, data=data, headers=headers)
TOKEN = res.json()['access_token']
headers['Authorization'] = f'bearer {TOKEN}'print(headers)

このコードを使えば、取得したトークを基に、RedditAPIを通じてデータを取得することが可能になる。

サンプルコード

次に、特定のサブレディットから人気の投稿を取得し、各投稿のコメントを収集する方法を紹介する。

人気投稿の取得

以下は、特定のサブレディット(例: python)から人気投稿を取得するサンプルコードだ。

RedditAPIを使ってデータを取得する際には、まずOAuth2認証で取得したトークンを使用する。次に、/r/{subreddit}/hotエンドポイントを使い、人気投稿を最大10件まで取得する。このデータはJSON形式で提供される。

import requests

defget_popular_posts(subreddit, headers, limit=10):
    subreddit = 'python'
    url = f'https://oauth.reddit.com/r/{subreddit}/hot?limit={limit}'
    
    response = requests.get(url, headers=headers)
    
    if response.status_code == 200:
        posts = response.json()['data']['children']
        return [{
            'title': post['data']['title'],
            'selftext': post['data']['selftext'],
            'upvote_ratio': post['data']['upvote_ratio'],
            'ups': post['data']['ups'],
            'downs': post['data']['downs'],
            'score': post['data']['score'],
            'id': post['data']['id'],
            'permalink': post['data']['permalink']
        } for post in posts]
    else:
        print(f"Error: {response.status_code}")
        returnNone

popular_posts = get_popular_posts(subreddit, headers)

for post in popular_posts:
    print(post)

コメントの取得

以下は、特定の投稿に関連するコメントを取得するサンプルコードだ。

defget_comments(post_id, subreddit, headers):
    url = f'https://oauth.reddit.com/r/{subreddit}/comments/{post_id}'
    
    response = requests.get(url, headers=headers)
    
    if response.status_code == 200:
        comments = response.json()[1]['data']['children']
        return [{
            'author': comment['data']['author'],
            'body': comment['data']['body'],
            'score': comment['data']['score'],
            'ups': comment['data']['ups'],
            'downs': comment['data']['downs']
        } for comment in comments]
    else:
        print(f"Error: {response.status_code}")
        returnNone

comments = get_comments(post_id, subreddit, headers)

for comment in comments:
    print(comment)

取得したデータのパラメータ解説

RedditAPIから取得したデータはJSON形式で提供される。主に投稿やコメントに関する以下の情報を取得できる。

投稿データのパラメータ

  • title: 投稿のタイトル。
  • selftext: 投稿の本文。リンク投稿の場合は空。
  • upvote_ratio: アップボートとダウンボートの比率(0-1の範囲)。
  • ups: アップボート(賛成票)の数。
  • downs: ダウンボート(反対票)の数。
  • score: スコア(アップボートからダウンボートを引いた値)。
  • id: 投稿の一意なID。
  • permalink: 投稿のパーマリンクReddit内でのリンク)。

コメントデータのパラメータ

  • author: コメントの投稿者。
  • body: コメント本文。
  • score: コメントのスコア(アップボート - ダウンボート)。
  • ups: アップボートの数。
  • downs: ダウンボートの数。

APIレスポンスの例

{"data": {"children": [{"data": {"title": "Why people still using flask after fastapi release",
                    "selftext": "I was interviewing...",
                    "upvote_ratio": 0.97,
                    "ups": 134,
                    "downs": 2,
                    "score": 132,
                    "id": "abc123",
                    "permalink": "/r/Python/comments/abc123/why_people_still_using_flask_after_fastapi_release/"
                }}]}}

まとめ

Reddit Data APIを使用することで、Redditの投稿やコメントをプログラムで収集し、データ分析アプリケーション開発に役立てることが可能だ。
この記事では、APIの概要から認証方法、実際にデータを取得するサンプルコードまでを紹介した。RedditAPIを活用し、興味のあるサブレディットのデータ収集に挑戦してみてほしい。



Viewing all articles
Browse latest Browse all 8522

Trending Articles