Does not provide fallback content when JavaScript is not available. このサイトを視聴するにはJavaScriptを有効にしてください。Redditの簡単なbotを作ってみる | blog.potproject.net

Redditの簡単なbotを作ってみる

海外最大手のフォーラムサイトredditにも、最近大量に日本人の人口が増えました。

redditは最大手のフォーラムサイトのくせにオープンソースであり、スパム以外のソースを全部公開しているという大盤振る舞い。

APIも公開しているので、そのAPIに対するラッパー、ソフトウェア、OAuthアプリが大量にあるのです。 なので、botを作るくらいなら簡単に出来るようです。

ここを見ても、かなりの数の言語に対応したラッパーが作られていたりします。 なんというかすごくオープンな感じです。もっと日本で流行ってほしいですな。

その中でも今回は代表的なReddit APIラッパーであるPRAWを使用して作っていきます。 PRAWはpythonで動作するreddit APIラッパーです。かなり簡単にAPIを操作してコメント・submit・subredditの取得・subredditの立ち上げ・UPVOTE/DOWNVOTEなど大体のことができます。 pythonパッケージ管理ソフトpipが導入されていればコンソールから"pip install praw"でモジュールインストール完了。簡単です。

subreddit注目の上位5つのタイトルとスコアを取得

japanのsubredditを取得してみる。

# -*- coding: utf-8 -*-
import praw

#user agentを設定します。多分何にしても問題ないです
user_agent = ("Python bots")
r = praw.Reddit(user_agent=user_agent)
subreddit = r.get_subreddit("japan")
for submission in subreddit.get_hot(limit = 5):
    print "Title: ", submission.title
    print "Score: ", submission.score

結果:

C:\>python C:\Python27\test.py
Title:  European products not available in Japan (for a present)?
Score:  13
Title:  For non-language teachers, how did you end up in Japan, and what do you
do for a living?
Score:  8
Title:  Prime Minister Shinzo Abe says Japan will provide 4 billion dollars in a
id for global efforts to promote disaster management over the next 4 years.
Score:  6
Title:  Japan budgets over $15 million for overseas universities in soft power p
ush
Score:  44
Title:  Extended Hokuriku shinkansen line goes into service
Score:  7

これだけで取得できます。非常に簡単です。

submit(テキストポストの投稿)を行う

# -*- coding: utf-8 -*-
import praw
user_agent = ("Python bots")
r = praw.Reddit(user_agent=user_agent)
r.login('username', 'password') #ユーザー名とパスワードを入力
r.submit('投稿したいsubreddit', 'タイトル', text="本文")

実際に投稿も簡単にできます。投稿にはアカウント必須です。 しかし、redditは投稿数やカルマで監視してbotかどうかを判断されるため、 作り立てで投稿もしていないアカウントだとほぼcapture認証を食らいます。

ユーザー名パスワードをそのまま書くのはどうよって場合は、OAuth認証も可能なようです。

cronなんかを使えば定期的な自動投稿なんかが可能となると思います。・・・が、監視しておかないとcapture認証に引っかかる気もします・・・。