Newer
Older
Import / projects / LGN-IP3870 / t / orig / rss_data_get.py
import os
import feedparser
import config
import time
			
class Rss_feed:
	def __init__(self):
		self.rss_data = None
		print '__init__ Rss_feed'

	def get_rss_file(self):
		try :
			# modified get
			if os.access(config.rss_file, os.R_OK) :
				r = file(config.rss_file , 'r').read()
				d =eval(r)
				a = d['etag'].strip()
				#print 'etag = ', a
				#print type(a)
				self.rss_data = feedparser.parse(config.rss_site, etag=a)
				try :
					print self.rss_data.status
					if self.rss_data.status == 304 :
						return 'True'
				except :
					print 'status get error'
					os.system('rm -f /tmp/rss.xml')
					pass

			else :
				self.rss_data = feedparser.parse(config.rss_site)
			#print self.rss_data
			#time.sleep(1)
			print 'sort'
			self.rss_quick_sort(self.rss_data.entries)
			print 'rss_test'
			print self.rss_data.entries[0].title

		except :
			print 'rss_read error'
			self.rss_data = None
			pass
		return self.rss_data

	def save_rss_to_file(self):
		try :
			file(config.rss_file, 'w').write(repr(self.rss_data))
			os.system('sync')	
			time.sleep(1) 	
		except :
			return False
		return True	

# quick sort
	def rss_quick_sort(self, list2):
		self.rss_quick_sort_r(list2, 0, len(list2) - 1)		

# quick_sort_r, recursive (used by quick_sort)
	def rss_quick_sort_r(self, list2 , first, last):
		
		if last > first:
			pivot = self.rss_partition(list2, first, last)
			self.rss_quick_sort_r(list2, first, pivot - 1)
			self.rss_quick_sort_r(list2, pivot + 1, last) 

# partition (used by quick_sort_r)
	def rss_partition(self, list2, first, last):
		sred = (first + last)/2
		if time.mktime(list2[first].date_parsed) < time.mktime(list2 [sred].date_parsed):
			list2[first], list2[sred] = list2[sred], list2[first]  # swap    
		if time.mktime(list2[first].date_parsed) < time.mktime(list2 [last].date_parsed):
			list2[first], list2[last] = list2[last], list2[first]  # swap    
		if time.mktime(list2[sred].date_parsed) < time.mktime(list2[last].date_parsed):        
			list2[sred], list2[last] = list2[last], list2[sred]    # swap    
		list2 [sred], list2 [first] = list2[first], list2[sred]    # swap    
		pivot = first    
		i = first + 1    
		j = last     

		while True:
			while i <= last and time.mktime(list2[i].date_parsed) >= time.mktime(list2[pivot].date_parsed):
				i += 1        
			while j >= first and time.mktime(list2[j].date_parsed) < time.mktime(list2[pivot].date_parsed):
				j -= 1        
			if i >= j:            
				break        
			else:
				list2[i], list2[j] = list2[j], list2[i]  # swap    
		list2[j], list2[pivot] = list2[pivot], list2[j]  # swap    

		return j	

	def destroy(self):
		print 'destroy Rss_feed'
	

if __name__ == '__main__':
	Rss_Feed = Rss_feed()	

	if Rss_Feed.get_rss_file() == None :
		print 'get RSS data fail'
		os._exit(1)	
	elif Rss_Feed.get_rss_file() == 'True':
		print 'No updated RSS data'
		os._exit(2)
	else :
		if Rss_Feed.save_rss_to_file() == True :
			os._exit(0)
		else :	# Rss data save fail
			os._exit(1)