Last active
August 29, 2015 13:56
-
-
Save ZacSweers/8877826 to your computer and use it in GitHub Desktop.
Python Bot Presentation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# http://goo.gl/sxbh65 | |
# Presentbot.py | |
import praw | |
import pickle | |
import time | |
# log in | |
# reading login info from a file, it should be username \n password | |
with open("login.properties", "r") as loginFile: | |
login_info = loginFile.readlines() | |
login_info[0] = login_info[0].replace('\n', '') | |
login_info[1] = login_info[1].replace('\n', '') | |
# Set up praw | |
r = praw.Reddit('trollbot') | |
r.login(login_info[0], login_info[1]) | |
# User to troll | |
USER="pandanomic" | |
# Message | |
# print "Sending message" | |
# r.send_message(USER, 'Test?', 'sup bro') | |
# print "Message sent" | |
# Get submissions from subreddit | |
subreddit = r.get_subreddit('soccer') | |
submissions = subreddit.get_hot(limit=10) | |
for submission in submissions: | |
print submission.title | |
# get top post | |
top_submission = next(subreddit.get_hot(limit=10)) | |
print top_submission.title | |
print len(top_submission.comments) | |
# Comment on top post | |
new_comment = top_submission.add_comment('test') | |
# Reply to top comment of top post | |
new_comment2 = top_submission.comments[0].reply('test') | |
# Delete stuff | |
new_comment.delete() | |
new_comment2.delete() | |
# URL Submission | |
new_submission = r.submit('reddit_api_test', 'Test', url='http://google.com') | |
new_submission.delete() | |
# Self submission | |
new_submission = r.submit('reddit_api_test', 'Test', text='This is a self post') | |
new_submission.delete() | |
# User stuff | |
user = r.get_redditor(USER) | |
print user.comment_karma | |
for comment in user.get_comments(limit=10): | |
print comment.body | |
comment.upvote() | |
# Caching | |
already_done = dict() | |
subreddit = r.get_subreddit('aww') | |
for post in subreddit.get_new(limit=10): | |
if post.id not in already_done: | |
# Do whatever you want with the post | |
# Cache it | |
print 'New post' | |
already_done[post.id] = post.url | |
else: | |
print 'Already done' | |
CACHE_FILE = "testcache" | |
# Save cache | |
with open(CACHE_FILE, 'w+') as file_save: | |
pickle.dump(already_done, file_save) | |
# Load cache | |
if os.path.isfile(cache_file): | |
with open("cache_file", 'r+') as file_load: | |
already_done_copy = pickle.load(file_load) | |
# Good thing to do is extract this stuff out to methods | |
# while true, time.sleep(1800) # this is seconds | |
# link to spursgifsbot | |
# https://github.com/pandanomic/SpursGifs_xposterbot | |
# We can also do this with facebook's api using pip install facebook-sdk | |
# link to gist | |
# https://gist.github.com/pandanomic/8577232 | |
# Say you moderate a group, and want to automate some price checking | |
import facebook | |
access_token = "blah" # https://developers.facebook.com/tools/explorer | |
group_id = "blah" # 458528044205531 | |
posts_query = "SELECT post_id, message FROM stream WHERE source_id=" + group_id + " LIMIT 50" | |
graph = facebook.GraphAPI(access_token) | |
posts = graph.fql(query=posts_query) | |
already_done2 = [] | |
for post in posts: | |
message = post['message'] | |
postid = post['post_id'] | |
if postid not in already_done2 and '$' not in message: | |
# OFF WITH THEIR HEADS! | |
# ...just kidding, we're going to post a comment | |
graph.put_object(postid, "comments", message="Bro you didn't mention pricing") | |
# and cache | |
already_done2.append(postid) | |
# link to mod bot | |
# https://github.com/pandanomic/FB_Mod_Bot | |
# Git and Heroku time | |
# Could use cron jobs or other things, but difficult if you have your own laptop | |
# Automation is lovely | |
# Same logic applies, but we need to use heroku's tools | |
# Link to gist, Q/A time? | |
# https://gist.github.com/pandanomic/8595628 | |
# git init | |
# touch README.md | |
# touch .gitignore | |
# # Stuff we'll need, different for various languages | |
# requirements.txt | |
# git add . | |
# git commit -m 'Yay adding stuff' | |
# # Github stuff | |
# # Make a github account and repo (private or public) | |
# git remote add origin <git@......> | |
# git push -u origin master | |
# # Git has some commandline tools you can install | |
# # Set up your heroku account | |
# heroku create | |
# git remote -v | |
# heroku git:remote -a <the new name> | |
# git push heroku master | |
# heroku addons:add memcachedcloud:25 | |
# heroku addons:add scheduler | |
# # Set up scheduler | |
# heroku run python | |
# | |
# | |
# We have a problem now though. This pickle stuff won't work here, so we need to use Heroku's stuff instead | |
# running_on_heroku = True | |
# # Cache stuff | |
# # Add python-binary-memcached==0.21 to your requirements.txt | |
# $ heroku run python 1 ↵ | |
# Running `python` attached to terminal... up, run.9520 | |
# Python 2.7.5 (default, May 17 2013, 06:45:09) | |
# [GCC 4.4.3] on linux2 | |
# Type "help", "copyright", "credits" or "license" for more information. | |
# >>> import bmemcached | |
# >>> import os | |
# >>> mc = bmemcached.Client(os.environ.get('MEMCACHEDCLOUD_SERVERS').split(','), os.environ.get('MEMCACHEDCLOUD_USERNAME'), os.environ.get('MEMCACHEDCLOUD_PASSWORD')) | |
# >>> new_dict = {'example': 'yay'} | |
# >>> new_list = [1, 2, 3, 4, 5] | |
# >>> new_dict['list_test'] = new_list | |
# >>> mc.set('dict', new_dict) | |
# True | |
# >>> mc.set('list', new_list) | |
# True | |
# >>> print mc.get('dict') | |
# {'example': 'yay', 'list_test': [1, 2, 3, 4, 5]} | |
# >>> print mc.get('list') | |
# [1, 2, 3, 4, 5] | |
# >>> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment