138 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			138 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
# -*- coding: utf-8 -*-
 | 
						|
# @Author: KevinMidboe
 | 
						|
# @Date:   2017-03-04 16:50:09
 | 
						|
# @Last Modified by:   KevinMidboe
 | 
						|
# @Last Modified time: 2017-03-05 16:51:35
 | 
						|
 | 
						|
import tweepy, sqlite3
 | 
						|
from pasteee import Paste
 | 
						|
from pprint import pprint
 | 
						|
 | 
						|
dbPath = "shows.db"
 | 
						|
 | 
						|
consumer_key, consumer_secret = 'yvVTrxNtVsLkoHxKWxh4xvgjg', '39OW6Q8fIKDXvTPPCaEJDULcYaHC5XZ3fe7HHCGtdepBKui2jK'
 | 
						|
access_token, access_token_secret = '3214835117-OXVVLYeqUScRAPMqfVw5hS8NI63zPnWOVK63C5I', 'ClcGnF8vW6DbvgRgjwU6YjDc9f2oxMzOvUAN8kzpsmbcL'
 | 
						|
 | 
						|
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
 | 
						|
auth.set_access_token(access_token, access_token_secret)
 | 
						|
api = tweepy.API(auth)
 | 
						|
 | 
						|
 | 
						|
def unpackEpisode(episode):
 | 
						|
	conn = sqlite3.connect(dbPath)
 | 
						|
	c = conn.cursor()
 | 
						|
	
 | 
						|
	cursor = c.execute('SELECT * FROM stray_episodes')
 | 
						|
	columnNames = [description[0] for description in cursor.description]
 | 
						|
	
 | 
						|
	conn.close()
 | 
						|
	
 | 
						|
	episodeDict = dict.fromkeys(columnNames)
 | 
						|
	
 | 
						|
	for i, key in enumerate(episodeDict.keys()):
 | 
						|
		episodeDict[key] = episode[i]
 | 
						|
 | 
						|
	return episodeDict
 | 
						|
 | 
						|
 | 
						|
def prettifyEpisode(episode):
 | 
						|
	returnString = ''
 | 
						|
	for key, value in episode.items():
 | 
						|
		returnString += key + ': ' + str(value) + '\n'
 | 
						|
 | 
						|
	return returnString
 | 
						|
 | 
						|
def createPasteee(episode):
 | 
						|
	return Paste(prettifyEpisode(episode), private=False, desc="My first paste", views=10)
 | 
						|
 | 
						|
def tweetString(episode):
 | 
						|
	print(type(episode['episode']), episode)
 | 
						|
	tweetString = '@KevinMidboe\nAdded episode:\n' + episode['name'] + ' S' + str(episode['season'])\
 | 
						|
	 + 'E' + str(episode['episode']) + '\nDetails: '
 | 
						|
	return tweetString
 | 
						|
 | 
						|
# TODO What if error when tweeting, no id_str
 | 
						|
def tweet(tweetString):
 | 
						|
	response = api.update_status(status=tweetString)
 | 
						|
	return response.id_str
 | 
						|
 | 
						|
 | 
						|
def updateTweetID(episodeDict, id):
 | 
						|
	conn = sqlite3.connect(dbPath)
 | 
						|
	c = conn.cursor()
 | 
						|
 | 
						|
	c.execute('UPDATE stray_episodes SET tweet_id = ' + id + ' WHERE original is "' + episodeDict['original'] + '"')
 | 
						|
 | 
						|
	conn.commit()
 | 
						|
	conn.close()
 | 
						|
 | 
						|
def tweetEpisode(episode):
 | 
						|
	pasteee = createPasteee(episode)
 | 
						|
	tweet_id = tweet(tweetString(episode) + pasteee['raw'])
 | 
						|
	updateTweetID(episode, tweet_id)
 | 
						|
 | 
						|
 | 
						|
 | 
						|
def getLastTweets(user, count=1):
 | 
						|
	return api.user_timeline(screen_name=user,count=count)
 | 
						|
 | 
						|
def verifyByID(id, reponse_id):
 | 
						|
	conn = sqlite3.connect(dbPath)
 | 
						|
	c = conn.cursor()
 | 
						|
 | 
						|
	c.execute('UPDATE stray_episodes SET verified = 1, response_id = ' + reponse_id + ' WHERE tweet_id is "' + id + '"')
 | 
						|
 | 
						|
	conn.commit()
 | 
						|
	conn.close()
 | 
						|
 | 
						|
# TODO Add more parsing than confirm
 | 
						|
def parseReply(tweet):
 | 
						|
	if b'\xf0\x9f\x91\x8d' in tweet.text.encode('utf-8'):
 | 
						|
		print('Verified!')
 | 
						|
		verifyByID(tweet.in_reply_to_status_id_str, tweet.id_str)
 | 
						|
 | 
						|
def getReply(tweet):
 | 
						|
	conn = sqlite3.connect(dbPath)
 | 
						|
	c = conn.cursor()
 | 
						|
 | 
						|
	tweetID = tweet.in_reply_to_status_id_str
 | 
						|
	c.execute('SELECT * FROM stray_episodes WHERE tweet_id is ' + tweetID + ' AND verified is 0')
 | 
						|
	row = c.fetchone()
 | 
						|
 | 
						|
	if row:
 | 
						|
		episode = unpackEpisode(row)
 | 
						|
		conn.close()
 | 
						|
		
 | 
						|
		parseReply(tweet)
 | 
						|
 | 
						|
	conn.close()
 | 
						|
 | 
						|
 | 
						|
 | 
						|
def lookForNewEpisodes():
 | 
						|
	conn = sqlite3.connect(dbPath)
 | 
						|
	c = conn.cursor()
 | 
						|
 | 
						|
	c.execute('SELECT * FROM stray_episodes WHERE tweet_id is NULL')
 | 
						|
 | 
						|
	for row in c.fetchall():
 | 
						|
		episode = unpackEpisode(row)
 | 
						|
		tweetEpisode(episode)
 | 
						|
 | 
						|
	conn.close()
 | 
						|
 | 
						|
def checkForReply():
 | 
						|
	for tweet in getLastTweets('KevinMidboe', 10):
 | 
						|
		if tweet.in_reply_to_status_id_str != None:
 | 
						|
			getReply(tweet)
 | 
						|
 | 
						|
 | 
						|
def tweetNewEpisodes():
 | 
						|
	lookForNewEpisodes()
 | 
						|
	checkForReply()
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
	tweetNewEpisodes()
 | 
						|
	
 |