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)