- Timestamp:
- 07/30/17 12:28:35 (7 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/feed2telegram.py
r4 r6 1 1 #-*- coding: utf-8 -*- 2 import datetime 3 import email 2 4 import json 3 5 import os 4 6 import sys 5 7 import threading 8 import time 6 9 import traceback 7 10 import urlparse … … 33 36 header = { 34 37 'accept': 'application/x-www-form-urlencoded', 35 'agent': ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) '36 'AppleWebKit/537.36 (KHTML, like Gecko) '37 'Chrome/59.0.3071.115 Safari/537.36'),38 38 } 39 39 return header … … 114 114 return self.feed 115 115 116 class Datetime: 117 def __init__(self): 118 self.datetime = None 119 120 def setRfc2822(self, value): 121 parsed = email.utils.parsedate(value) 122 self.datetime = datetime.datetime(*parsed[:6]) 123 return self 124 125 def toTimestamp(self): 126 timetuple = self.datetime.timetuple() 127 return time.mktime(timetuple) 128 116 129 class Feed2Telegram: 117 130 def __init__(self, 118 131 feed_url, # required 119 132 telegram_token, # required 120 callback_get_ iterator, # required, method returns iterable object from dictionary parsed by feedparser, prototype: def get_iterator(feed)121 callback_get_ message, # required, method returns a message to send with an object of iterable object , prototype: def get_data(obj)133 callback_get_message, # required 134 callback_get_entries=lambda entries: entries, 122 135 check_interval=60*60, 136 new_entries_only=False, 123 137 send_error=True, 124 138 continue_on_error=False, … … 130 144 self.telegram = Telegram(self.token) 131 145 132 self.get_iterator = callback_get_iterator 133 self.get_message = callback_get_message 134 146 self.get_message = callback_get_message 147 self.get_entries = callback_get_entries 148 149 self.new_entries_only = new_entries_only 135 150 self.send_error = send_error 136 151 self.continue_on_error = continue_on_error … … 141 156 142 157 self.stop_event = threading.Event() 158 self.last_modified = None 159 160 def isSendingEntry(self, entry): 161 if self.new_entries_only and self.last_modified: 162 published = Datetime().setRfc2822(entry.published).toTimestamp() 163 last = Datetime().setRfc2822(self.last_modified).toTimestamp() 164 165 if published > last: 166 return True 167 168 return False 143 169 144 170 def run(self): 145 171 while not self.stop_event.is_set(): 146 172 try: 173 self.last_modified = self.feed.modified 147 174 feed = self.feed.get() 148 175 149 for obj in self.get_iterator(feed):176 for entry in self.get_entries(feed.entries): 150 177 if self.stop_event.is_set(): 151 178 break 152 179 153 message = self.get_message(obj) 180 if not self.isSendingEntry(entry): 181 continue 182 183 message = self.get_message(entry) 154 184 self.telegram.sendMessage(message) 155 185 156 else: 157 self.feed.save() 186 self.feed.save() 158 187 159 188 except: -
trunk/implements/hikarinoakariost_feeder.py
r5 r6 7 7 Feed2Telegram(url, 8 8 token, 9 lambda feed : reversed(feed.entries), 10 lambda entry: entry['link'], 11 continue_on_error=True 9 lambda entry : entry['link'], 10 lambda entries: reversed(entries), 11 new_entries_only=True, 12 continue_on_error=True, 12 13 ).start() 13 14
Note:
See TracChangeset
for help on using the changeset viewer.