#!/usr/bin/env python

import sys,requests,json

REDDIT=sys.argv[1]
CHANNEL=sys.argv[2]
FEED=sys.argv[3]
# Test mode:
if len(sys.argv) == 5:
  print "running in test mode"
  data = json.loads(open(sys.argv[4]).read())
  writer=sys.stdout
else:
  req = requests.get("http://www.reddit.com/r/%s/%s.json" %(REDDIT,FEED))
  if req.status_code != 200:
    print "Kabloom!"
    print req.text
    sys.exit(1)
  data = req.json()
  writer=open("/home/ircbot/irc/irc.mozilla.org/%s/in"%CHANNEL, "a")

STATEFILE="/home/ircbot/state/reddit-%s-%s-storyids"%(CHANNEL,REDDIT)
sf = open(STATEFILE)
seen = set(sf.read().split("\n"))
sf.close()

new=[]
for post in data["data"]["children"]:
  post = post['data']
  if not post["id"] in seen:
    writer.write(post["title"]+"\n")
    if post["domain"] == "self.%s" % REDDIT:
      writer.write(post["url"]+"\n")
    else:
      writer.write(post["url"]+" "+post["permalink"]+"\n")
    new.append(post["id"])
if len(new) != 0:
  f = open(STATEFILE, "a")
  for new in new:
    f.write(new+"\n")
  f.close()

#!/usr/bin/env python

import sys,requests

REDDIT=sys.argv[1]
CHANNEL=sys.argv[2]
FEED=sys.argv[3]

STATEFILE="/home/ircbot/state/reddit-%s-%s-storyids"%(CHANNEL,REDDIT)
seen = set(open(STATEFILE).read().split("\n"))

data = requests.get("http://www.reddit.com/r/%s/%s.json" %(REDDIT,FEED)).json()
new=[]
writer=open("/home/ircbot/irc/irc.mozilla.org/%s/in"%CHANNEL, "a")
for post in data["data"]["children"]:
  post = post['data']
  if not post["id"] in seen:
    writer.write(post["title"]+"\n")
    if post["domain"] == "self.%s" % REDDIT:
      writer.write(post["url"]+"\n")
    else:
      writer.write(post["url"]+" "+post["permalink"]+"\n")
    new.append(post["id"])
if len(new) != 0:
  f = open(STATEFILE, "a")
  f.write("\n".join(new))

--- 
+++ 
@@ -1,17 +1,30 @@
 #!/usr/bin/env python
 
-import sys,requests
+import sys,requests,json
 
 REDDIT=sys.argv[1]
 CHANNEL=sys.argv[2]
 FEED=sys.argv[3]
+# Test mode:
+if len(sys.argv) == 5:
+  print "running in test mode"
+  data = json.loads(open(sys.argv[4]).read())
+  writer=sys.stdout
+else:
+  req = requests.get("http://www.reddit.com/r/%s/%s.json" %(REDDIT,FEED))
+  if req.status_code != 200:
+    print "Kabloom!"
+    print req.text
+    sys.exit(1)
+  data = req.json()
+  writer=open("/home/ircbot/irc/irc.mozilla.org/%s/in"%CHANNEL, "a")
 
 STATEFILE="/home/ircbot/state/reddit-%s-%s-storyids"%(CHANNEL,REDDIT)
-seen = set(open(STATEFILE).read().split("\n"))
+sf = open(STATEFILE)
+seen = set(sf.read().split("\n"))
+sf.close()
 
-data = requests.get("http://www.reddit.com/r/%s/%s.json" %(REDDIT,FEED)).json()
 new=[]
-writer=open("/home/ircbot/irc/irc.mozilla.org/%s/in"%CHANNEL, "a")
 for post in data["data"]["children"]:
   post = post['data']
   if not post["id"] in seen:
@@ -23,4 +36,6 @@
     new.append(post["id"])
 if len(new) != 0:
   f = open(STATEFILE, "a")
-  f.write("\n".join(new))
+  for new in new:
+    f.write(new+"\n")
+  f.close()
Add a test mode, handle 429 errors, stop corrupting state file
