class TestFeedFilter(unittest.TestCase): def setUp(self): self.filter = FeedFilter() # self.reader = FeedReader('http://manhua.178.com/u/usagidrop/rss.xml') def tearDown(self): self.filter = None def test_filterFeedsExp(self): li = [ MockFeedItem('[枫雪动漫][Hoshizora e Kakaru Hashi 架向星空之桥][12][RMVB+MKV]'), MockFeedItem('【旋风字幕组】死神Bleach 第330话「想要活下去!望实的斩魂刀」【RMVB】简体 848x480'), MockFeedItem('动漫之家[DmzJ字幕组][7月新番][Natsume_Yuujinchou_San_夏目友人帐_第三季][02][HDTV][rmvb+mkv]'), MockFeedItem('【SOSG字幕团】★4月新番【银魂 Gintama】【第216话】[简体MP4][720p][HDTV]【替代RMVB,享受高清】(RMVB全面停压淘汰)'), MockFeedItem('【SOSG字幕團】★4月新番【銀魂 Gintama】【第216話】[繁體MP4][480p][HDTV]【替代RMVB,享受便捷】(RMVB全面停壓淘汰)'), MockFeedItem('【异域字幕组】★【7月新番】[夏目友人帐 参][Natsume Yuujinchou San][02][720P][简体][MKV]'), MockFeedItem('【AcgmTHK字幕組&K2字幕組】★七月新番【神様のメモ帳 神的記事本】[02][繁體][576P&720P][RV10&Mp4][Http下載、內詳]') ] result = self.filter.filterFeeds(li) errorMsg = listPrint(result) self.assertEqual(4, len(result), errorMsg) @unittest.skip('reality test skip') def test_filterFeeds(self): feedRes = FeedRes('popgo.xml', 'tag', 'description', 0, 'Tue, 12 Jul 2011 22:23:26 +0800') self.reader = FeedReader(feedRes) feeds = self.reader.getFeedItems() filtered = self.filter.filterFeeds(feeds) filteredLength = len(filtered) notFilterLength = len(feeds) print('Before: {}\tAfter: {}'.format(notFilterLength, filteredLength)) f = lambda x:x.title print('Filtered -----------\n{}Not filtered ----------\n{}'.format(listPrint(listSub(feeds, filtered), fetchF=f), listPrint(filtered, fetchF=f))) self.assertTupleEqual((35, 18), (notFilterLength, filteredLength))
def setUp(self): self.filter = FeedFilter()
def __init__(self): self.resOper = ResourceOperator() self.feedFilter = FeedFilter() self._initCache() self.results = None self.linkSender = None
class Application: __version__ = (0, 1, 3) def __init__(self): self.resOper = ResourceOperator() self.feedFilter = FeedFilter() self._initCache() self.results = None self.linkSender = None def _initCache(self): self.resOper.getFeedResUpdateTime() self.resOper.fillCache() def openLink(self, index): openCmd = 'open' platform = sys.platform if platform == 'linux2': openCmd = 'xdg-open' elif platform == 'win32': openCmd = 'start' try: for i in [int(e) for e in index.strip().split(' ')]: if self.results[0][i].link.startswith('http'): os.system('{} {!r}'.format(openCmd, self.results[0][i].link)) else: print(self.results[0][i].link) except IndexError: print("Index Error") except ValueError: print("Value Error") def magnetLink(self, index): for i in [int(e) for e in index.strip().split(' ')]: print(getMagnetLinkFromURL(self.results[0][i].link)) def sendMagnetLink(self, index): if self.linkSender is None: self.linkSender = send2Trans() for i in [int(e) for e in index.strip().split(' ')]: link = getMagnetLinkFromURL(self.results[0][i].link) self.linkSender.sendlink(link) def showDescription(self, index): i = int(index) print(self.results[0][i].description) def readCommand(self, results): def getArg(x): return int(x.split(' ')[-1]) try: cmd = input() while (cmd != 'exit'): if cmd.startswith('c'): # open url self.openLink(cmd[2:]) elif cmd.startswith('d'): # show description print('Feed Description:') self.showDescription(cmd[2:]) elif cmd.startswith('m'): # get magnet link self.magnetLink(cmd[2:]) elif cmd.startswith('s'): # send magnet link self.sendMagnetLink(cmd[2:]) elif cmd == 'add filter': # add fileter self.addNewFilter() elif cmd == 'filtered': # list fileterd feeds self._showResult(results[1]) elif cmd == 'show': # show feeds self._showResult(results[0]) elif cmd == 'fetch': # fetch from feedRes self.fetchAndPrint() else: print('unrecognized') cmd = input() except EOFError: print('Bye~') def addNewFilter(self): print('Input reason tag.{tag 1 and 4 is must filter}') cmd = input().split(' ') reason = cmd[0] tag = cmd[1] print('Reason: {}\tTag: {}\nconfirm?'.format(reason,int(tag))) if input() != 'no': self.resOper.addFilterPattern(reason, tag) else: print('cancled') def fetchingRes(self): #TODO: tmep solution # try: nodes = [] for feedRes in self.resOper.getFeedResource(): reader = FeedReader(feedRes) newNodes = reader.getFeedItems(FeedReader.noDuplicate) if len(newNodes) == 0: print('[Info] skip feeds {}'.format(feedRes.id), end='\t') continue nodes += newNodes #nodes = listUnique(nodes, lambda x:x.title) validFeeds = self.feedFilter.filterFeeds(nodes) filtered = listSub(nodes, validFeeds) self._writeToDB(validFeeds, filtered) self.results = (validFeeds, filtered) # except: # print("Fetching error") def _showResult(self, xs): print('\n{} feed(s) updated'.format(len(xs))) print(listPrint(xs, 'seq', fetchF=lambda x:x.title)) def _writeToDB(self, valid, filtered): self.resOper.writeValid(valid) self.resOper.writeFiltered(filtered) def run(self, mode='normal'): if mode == 'init': self.fetchingRes() elif mode != 'normal': print('Welcom to Charllote Rss Reader. ') self.readCommand([]) else: self.fetchAndPrint() self.readCommand(self.results) def fetchAndPrint(self): print('Now fetching resources') self.fetchingRes() if self.results == None: print("Fetch Error") return self._showResult(self.results[0]) print('Instruction:\nc x:Open browser to check no x\nd x:Direct download specified feed with defualt dowloader\n')