Created
November 6, 2012 04:27
Revisions
-
MercuryRising created this gist
Nov 6, 2012 .There are no files selected for viewing
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 charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,97 @@ #! /usr/bin/env python2 # Requests is much easier to use than urllib import requests # needed for sys.exit() import sys # Wrap it in a function you can, you might find a use for it later # We're adding subreddit functionality, but still providing a default def print_top(subreddit='all'): # Make it fancy! Let's let the user pick the subreddit url = "http://www.reddit.com/r/"+subreddit+".json" # This line r = requests.get(url) # replaces this # all = urllib.urlopen(url).read() # content = json.loads(all.decode("utf8")) # Little bit easier to remember, r.get(URL) than that monstrosity stories = {} # We're going to get a little fancy and allow the user to enter the subreddit they'd like to see # We want to see how many stories we're getting before, by calling len() on the data's children print "\nTop %s stories for %s\n" %(len(r.json['data']['children']), subreddit) # Use enumerate to keep track of your position in a loop. # We could say content = r.json['data']['children'] if we wanted # r.json is just what it sounds like, a dictionary of the json in the response for index, x in enumerate(r.json["data"]["children"]): # A couple helper variables to keep the sanity data = x['data'] # Converting the index to a string allows greater flexibility when we want to interact # Instead of trying to convert the entries into an int, we can just use strings index = str(index) # This was more of an cosmetic change, but it's a little easier to parse if the self # indicator is closer to the data you care about (the position) if data['selftext'] != "": # Might as well be consistent and either use string concatenation or formatting. # Switched to %s because we're using strings now. # Call strip to prevent newlines from being added where they shouldn't print "[%s][S] %s" % (index, data['title'].strip()) # Either join or concat, I like concat more (it's easier to see what's going on) # When we call a self post, we'll see the title, and the body, with a little bit of # newline formatting to make it easier to read (less like a wall of text) story_data = "\nTitle: " + data['title'] + "\n\n" + data['selftext'] + "\n" stories[index] = story_data else: # If it's not a self post, we just print it and forget it. print "[%s] %s" %(index, data['title'].strip()) # add a newline after the subreddit list print "\n" # return stories so we can access the data outside the function return stories print "Amazing reddit loader" print "enter 'exit' to quit" print "enter /r/SUBREDDIT to load a specific subreddit" print "enter blank to reload the last subreddit" # Call our function to print the top of all stories = print_top() subreddit = "all" while True: st = raw_input("Which selfpost would you like to view? > ") if st == "exit": sys.exit() # This is our fancy subreddit picker # The usage is /r/SUBREDDIT and that will load the new subreddit elif "/r/" in st: subreddit = st.strip("/r/") stories = print_top(subreddit) elif st == "": # This lets us reload the last picked subreddit stories = print_top(subreddit) else: # A better way to get values from dictionaries if the value might not be there # (better than a try except) is to use get # get allows you to defined a default value if the key is not in the dictionary # This is great for programs that aren't always going to give you back a well formed # value, you can do this to give a good default value that makes your program not choke print stories.get(st, "Sorry, that is not a self-post")