Example #1
0
	def run(self):
		self.server.start()
                while True:
			if self.exit.isSet():
				self.server.send('exit')
				with self.tempfileLock:
					for key in self.tempfiles:
						self.tempfiles[key].close()
				return
                        search = self._getSearch()
                        if search == '':#Twitter returns an error for empty searches, so this is a way around it
                                tweets = []
                        else:
                                params = {'q': self._getSearch(), 'result_type': 'recent', 'lang': 'en', 'count': 100}#Check twitter API for all parameters
                                r = requests.get('https://api.twitter.com/1.1/search/tweets.json', headers = self._headers, params = params)
                                tweets = [ tweet for tweet in r.json()['statuses'] if 'retweeted_status' not in tweet]#No need for boring retweets
			with self.tweetLock:
				self.tweets = tweets
			mediaObjs = []
			imgs = {}
			for tweet in tweets:
				if 'media' in tweet['entities']:
					mediaObjs.extend([entity for entity in tweet['entities']['media'] if entity['type'] == 'photo'])
			with self.tempfileLock:
				for mediaObj in mediaObjs:
					key = mediaObj['media_url']
					if key in self.tempfiles:
						self.tempfiles[key].inUse = True
						continue
					if 'thumb' in mediaObj['sizes']:
						imgRequest = requests.get(key + ':thumb')
					elif 'small' in mediaObj['sizes']:
						imgRequest = requests.get(key + ':small')
					else:
						imgRequest = requests.get(key)
					if imgRequest.status_code == 200:#make sure the link worked
						temp = NamedTemporaryFile(prefix = key.replace('/', ''))
						temp.write(imgRequest.content)#Saves image in temp file so it only has to be downloaded once
						temp.seek(0)#moves to start of file
						imgs[key] = b64encode(temp.read())
						temp.inUse = True
						self.tempfiles[key] = temp 
			msg = json.dumps((tweets, imgs))
			self.server.send(msg)
			self.deleteUnusedTempfiles()
			time.sleep(2)#Don't want the loop to run to often, or else you hit the twitter rate limit