Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python2
- # -*- coding: utf-8 -*-
- ### DB Schema
- # CREATE TABLE `pics` ( `id`INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, `filename`TEXT NOT NULL UNIQUE, `description`TEXT NOT NULL DEFAULT '東山奈央', `added`INTEGER NOT NULL DEFAULT 0, `lastTimeTweeted`INTEGER NOT NULL DEFAULT 0 )
- from TwitterAPI import TwitterAPI
- import warnings, random, time, sqlite3, sys
- ### Variables
- # Time between each picture in seconds, this is just for checks, the script runs from a cronjob with a lower interval (for new pictures, eg every 30 minutes)
- tweetEvery = 3500
- ### Functions
- def log(message):
- print time.strftime("%Y/%m/%d %H:%M:%S") + " ~ " + message
- ### DB
- conn = sqlite3.connect('pics/up/naobou.db')
- c = conn.cursor()
- #Set up things for Twitter
- CONSUMER_KEY = ''
- CONSUMER_SECRET = ''
- ACCESS_KEY = ''
- ACCESS_SECRET = ''
- api = TwitterAPI(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_KEY, ACCESS_SECRET)
- filename = ""
- # Get oldest recently added pic
- c.execute("SELECT * FROM pics WHERE lastTimeTweeted = 0 ORDER BY added ASC LIMIT 1;")
- row = c.fetchone()
- # If there is an oldest new pic, set the variables
- if row:
- filename = row[1]
- status = row[2]
- else:
- # Else check when was the last pic tweeted
- c.execute("SELECT lastTimeTweeted FROM pics ORDER BY lastTimeTweeted DESC LIMIT 1;")
- row = c.fetchone()
- lastTimeTweeted = row[0]
- # If it's more than the interval tweet a random one
- if lastTimeTweeted < (time.time() - tweetEvery):
- c.execute("SELECT * FROM pics WHERE lastTimeTweeted < (strftime('%s', 'now') - 300000) ORDER BY RANDOM() LIMIT 1;")
- row = c.fetchone()
- filename = row[1]
- status = row[2]
- # If nothing is set, exit, otherwise tweet
- if not filename:
- sys.exit()
- done = 0
- while done != 1:
- try:
- log("Trying to tweet " + filename)
- file_path = "./pics/" + filename
- file = open(file_path, 'rb')
- data = file.read()
- #r = 200
- r = api.request('media/upload', None, {'media': data})
- if r.status_code == 200:
- media_id = r.json()['media_id']
- #r = 200
- r = api.request('statuses/update', {'status': status, 'media_ids': media_id})
- if r.status_code == 200:
- log("Tweeted " + filename)
- done = 1
- c.execute("UPDATE pics SET lastTimeTweeted = strftime('%s', 'now') WHERE filename=?;", (filename,))
- conn.commit()
- else:
- time.sleep(30)
- except:
- log("nope... retrying in a bit...")
- time.sleep(60)
- conn.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement