From f1491bbc2003de22d5436d8fea0ce6eb80db8dd3 Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 18:35:14 +0100 Subject: ircbot: shortenurl function --- ircbot/contoller.py | 1 - ircbot/rssbot.py | 17 +++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/ircbot/contoller.py b/ircbot/contoller.py index 1d9347c3..bf4dd578 100755 --- a/ircbot/contoller.py +++ b/ircbot/contoller.py @@ -116,7 +116,6 @@ class commands(): return 'bot not found' - feedfile = 'new_feeds' url_shortener = 'http://wall' init_channels = ['#news'] diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py index 225e6f13..45af1dc3 100755 --- a/ircbot/rssbot.py +++ b/ircbot/rssbot.py @@ -57,12 +57,25 @@ class RssBot(irc.bot.SingleServerIRCBot): #try: # self.send(entry.title + " " + entry.link + " com: " + entry.comments) #except AttributeError: - shorturl = subprocess.check_output(["curl", "-sS", "-F", "uri=" + entry.link, self.url_shortener]).decode() - self.send(entry.title + " " + shorturl.strip('\n').strip('\r') + '#' + entry.link.partition('://')[2].partition('/')[0]) + shorturl = self.shortenurl(entry.link) + self.send(entry.title + ' ' + shorturl) self.oldnews.append(entry.link) self.lastnew = datetime.now() sleep(self.to) + def shortenurl(self, url): + while True: + try: + shorturl = subprocess.check_output(["curl", "-sS", "-F", "uri=" + url, self.url_shortener]).decode().strip('\n').strip('\r') + '#' + url.partition('://')[2].partition('/')[0] + return shorturl + except: + print('url shortener error') + sleep(1) + + def last(self, num): + for feed in reversed([x for x in reversed(self.feed.entries)][:num]): + self.send(feed.title + ' ' + self.shortenurl(feed.link)) + def send(self, string): if self.connection.connected: for line in string.split('\n'): -- cgit v1.2.3 From 1b3abcd0e37f2c3730ab05062f6b0275429a3522 Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 19:04:03 +0100 Subject: ircbot: search command --- ircbot/contoller.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/ircbot/contoller.py b/ircbot/contoller.py index bf4dd578..59c3abb8 100755 --- a/ircbot/contoller.py +++ b/ircbot/contoller.py @@ -3,8 +3,7 @@ import irc.bot import _thread import rssbot import os - - +import subprocess class NewsBot(irc.bot.SingleServerIRCBot): def __init__(self, name, chans=['#news'], server='ire', port=6667, timeout=60): @@ -27,15 +26,10 @@ class NewsBot(irc.bot.SingleServerIRCBot): self.connection.privmsg(target, line) sleep(1) - def sendq(self, target, string): - for line in string.split('\n'): - self.connection.privmsg(target, line) - sleep(1) - def on_privmsg(self, connection, event): args_array = event.arguments[0].split() answer = self.read_message(args_array) - self.sendq(event.source.nick, answer) + self.send(event.source.nick, answer) def on_pubmsg(self, connection, event): args_array = event.arguments[0].split() @@ -115,6 +109,9 @@ class commands(): else: return 'bot not found' + def search(args): + output = subprocess.check_output(['./GfindFeeds4bot', args[1]]).decode() + return output feedfile = 'new_feeds' url_shortener = 'http://wall' -- cgit v1.2.3 From 35406d4fc7bf83c954b225747ac6c13a6aad2994 Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 20:27:00 +0100 Subject: ircbot: better looping --- ircbot/rssbot.py | 52 ++++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py index 45af1dc3..79276a3a 100755 --- a/ircbot/rssbot.py +++ b/ircbot/rssbot.py @@ -41,26 +41,28 @@ class RssBot(irc.bot.SingleServerIRCBot): self.loop = False def updateloop(self): - try: - self.feed = feedparser.parse(self.url) - except: - print(self.name + ': rss timeout occured') - for entry in self.feed.entries: - self.oldnews.append(entry.link) + while True: + try: + self.feed = feedparser.parse(self.url) + for entry in self.feed.entries: + self.oldnews.append(entry.link) + break + except: + print(self.name + ': rss timeout occured') while self.loop: try: self.feed = feedparser.parse(self.url) + for entry in self.feed.entries: + if not entry.link in self.oldnews: + #try: + # self.send(entry.title + " " + entry.link + " com: " + entry.comments) + #except AttributeError: + shorturl = self.shortenurl(entry.link) + self.sendall(entry.title + ' ' + shorturl) + self.oldnews.append(entry.link) + self.lastnew = datetime.now() except: print(self.name + ': rss timeout occured') - for entry in self.feed.entries: - if not entry.link in self.oldnews: - #try: - # self.send(entry.title + " " + entry.link + " com: " + entry.comments) - #except AttributeError: - shorturl = self.shortenurl(entry.link) - self.send(entry.title + ' ' + shorturl) - self.oldnews.append(entry.link) - self.lastnew = datetime.now() sleep(self.to) def shortenurl(self, url): @@ -72,25 +74,27 @@ class RssBot(irc.bot.SingleServerIRCBot): print('url shortener error') sleep(1) - def last(self, num): - for feed in reversed([x for x in reversed(self.feed.entries)][:num]): - self.send(feed.title + ' ' + self.shortenurl(feed.link)) + def last(self, target, num): + for feed in [x for x in self.feed.entries][:num]: + self.send(target, feed.title + ' ' + self.shortenurl(feed.link)) + + def sendall(self, string): + for chan in self.channels: + self.send(chan, string) - def send(self, string): + def send(self, target, string): if self.connection.connected: for line in string.split('\n'): if len(line) < 450: - for chan in self.channels: - self.connection.privmsg(chan, line) + self.connection.privmsg(target, line) + sleep(1) else: space = 0 for x in range(math.ceil(len(line)/400)): oldspace = space space = line.find(" ", (x+1)*400, (x+1)*400+50) - for chan in self.channels: - self.connection.privmsg(chan, line[oldspace:space]) + self.connection.privmsg(target, line[oldspace:space]) sleep(1) - sleep(1) else: self.connection.reconnect() sleep(1) -- cgit v1.2.3 From 35e13322e83e95d7b4e671e72bcd885277433f99 Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 23:42:13 +0100 Subject: ircbot: fix empty first arg bug --- ircbot/contoller.py | 142 --------------------------------------------------- ircbot/controller.py | 142 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+), 142 deletions(-) delete mode 100755 ircbot/contoller.py create mode 100755 ircbot/controller.py diff --git a/ircbot/contoller.py b/ircbot/contoller.py deleted file mode 100755 index 59c3abb8..00000000 --- a/ircbot/contoller.py +++ /dev/null @@ -1,142 +0,0 @@ -from time import sleep -import irc.bot -import _thread -import rssbot -import os -import subprocess - -class NewsBot(irc.bot.SingleServerIRCBot): - def __init__(self, name, chans=['#news'], server='ire', port=6667, timeout=60): - irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], name, name) - self.name = name - self.server = server - self.port = port - self.chans = chans - self.to = timeout - - def start(self): - self.bot = _thread.start_new_thread(irc.bot.SingleServerIRCBot.start, (self,)) - - def on_welcome(self, connection, event): - for chan in self.chans: - connection.join(chan) - - def send(self, target, string): - for line in string.split('\n'): - self.connection.privmsg(target, line) - sleep(1) - - def on_privmsg(self, connection, event): - args_array = event.arguments[0].split() - answer = self.read_message(args_array) - self.send(event.source.nick, answer) - - def on_pubmsg(self, connection, event): - args_array = event.arguments[0].split() - if args_array[0][:-1]==self.name: - answer = self.read_message(args_array[1:]) - self.send(event.target, answer) - - def on_invite(self, connection, event): - for chan in event.arguments: - connection.join(chan) - - def read_message(self, args): - try: - if args[0] in [x for x in commands.__dict__.keys() if x.find('_')]: - func = getattr(commands, args[0]) - return func(args) - else: - return 'command not found' - except: - return "mimimimi" - - - -class commands(): - def add(args): - bot = rssbot.RssBot(args[2], args[1], url_shortener=url_shortener) - bots[args[1]] = bot - bot.start() - return "bot " + args[1] + " added" - - def delete(args): - bots[args[1]].stop() - del bots[args[1]] - return "bot " + args[1] + " deleted" - - def rename(args): - if args[1] in bots: - if args[2] in bots: - return args[2] + ' already taken' - else: - bots[args[1]].connection.nick(args[2]) - bots[args[1]].name = args[2] - bots[args[2]] = bots[args[1]] - del bots[args[1]] - return 'renamed ' + args[1] + ' in ' + args[2] - else: - return args[1] + ' does not exist' - - def save(args): - output_buffer = '' - for bot in bots: - output_buffer += bot + '|' + bots[bot].url + '|' + ' '.join(bots[bot].channels) + '\n' - - F = open(feedfile, "w") - F.writelines(output_buffer) - F.close() - - return "bots saved to " + feedfile - - def caps(args): - return ' '.join([x for x in commands.__dict__.keys() if x.find('_')]) - - def list(args): - output_buffer = '' - for bot in bots: - output_buffer += bot + ' url: ' + bots[bot].url + '\n' - return output_buffer - - def info(args): - if args[1] in bots: - output_buffer = '' - for data in ['title', 'link', 'updated']: - if data in bots[args[1]].feed.feed: - output_buffer += data + ': ' + bots[args[1]].feed.feed[data] + '\n' - output_buffer += 'lastnew: ' + bots[args[1]].lastnew.isoformat() - return output_buffer - else: - return 'bot not found' - - def search(args): - output = subprocess.check_output(['./GfindFeeds4bot', args[1]]).decode() - return output - -feedfile = 'new_feeds' -url_shortener = 'http://wall' -init_channels = ['#news'] - -if 'FEEDFILE' in os.environ: - feedfile = os.environ['FEEDFILE'] - -if 'URLSHORT' in os.environ: - url_shortener = os.environ['URLSHORT'] - -bots = {} -knews = NewsBot('knews') - -#config file reading -F = open(feedfile, "r") -lines = F.readlines() -F.close() - -for line in lines: - line = line.strip('\n') - linear = line.split('|') - bot = rssbot.RssBot(linear[1], linear[0], init_channels + linear[2].split(), url_shortener) - bot.start() - bots[linear[0]] = bot - -knews.start() - diff --git a/ircbot/controller.py b/ircbot/controller.py new file mode 100755 index 00000000..66c42bd7 --- /dev/null +++ b/ircbot/controller.py @@ -0,0 +1,142 @@ +from time import sleep +import irc.bot +import _thread +import rssbot +import os +import subprocess + +class NewsBot(irc.bot.SingleServerIRCBot): + def __init__(self, name, chans=['#news'], server='ire', port=6667, timeout=60): + irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], name, name) + self.name = name + self.server = server + self.port = port + self.chans = chans + self.to = timeout + + def start(self): + self.bot = _thread.start_new_thread(irc.bot.SingleServerIRCBot.start, (self,)) + + def on_welcome(self, connection, event): + for chan in self.chans: + connection.join(chan) + + def send(self, target, string): + for line in string.split('\n'): + self.connection.privmsg(target, line) + sleep(1) + + def on_privmsg(self, connection, event): + args_array = event.arguments[0].split() + answer = self.read_message(args_array) + self.send(event.source.nick, answer) + + def on_pubmsg(self, connection, event): + args_array = event.arguments[0].split() + if len(args_array[0]) > 0 and args_array[0][:-1]==self.name: + answer = self.read_message(args_array[1:]) + self.send(event.target, answer) + + def on_invite(self, connection, event): + for chan in event.arguments: + connection.join(chan) + + def read_message(self, args): + try: + if args[0] in [x for x in commands.__dict__.keys() if x.find('_')]: + func = getattr(commands, args[0]) + return func(args) + else: + return 'command not found' + except: + return "mimimimi" + + + +class commands(): + def add(args): + bot = rssbot.RssBot(args[2], args[1], url_shortener=url_shortener) + bots[args[1]] = bot + bot.start() + return "bot " + args[1] + " added" + + def delete(args): + bots[args[1]].stop() + del bots[args[1]] + return "bot " + args[1] + " deleted" + + def rename(args): + if args[1] in bots: + if args[2] in bots: + return args[2] + ' already taken' + else: + bots[args[1]].connection.nick(args[2]) + bots[args[1]].name = args[2] + bots[args[2]] = bots[args[1]] + del bots[args[1]] + return 'renamed ' + args[1] + ' in ' + args[2] + else: + return args[1] + ' does not exist' + + def save(args): + output_buffer = '' + for bot in bots: + output_buffer += bot + '|' + bots[bot].url + '|' + ' '.join(bots[bot].channels) + '\n' + + F = open(feedfile, "w") + F.writelines(output_buffer) + F.close() + + return "bots saved to " + feedfile + + def caps(args): + return ' '.join([x for x in commands.__dict__.keys() if x.find('_')]) + + def list(args): + output_buffer = '' + for bot in bots: + output_buffer += bot + ' url: ' + bots[bot].url + '\n' + return output_buffer + + def info(args): + if args[1] in bots: + output_buffer = '' + for data in ['title', 'link', 'updated']: + if data in bots[args[1]].feed.feed: + output_buffer += data + ': ' + bots[args[1]].feed.feed[data] + '\n' + output_buffer += 'lastnew: ' + bots[args[1]].lastnew.isoformat() + return output_buffer + else: + return 'bot not found' + + def search(args): + output = subprocess.check_output(['./GfindFeeds4bot', args[1]]).decode() + return output + +feedfile = 'new_feeds' +url_shortener = 'http://wall' +init_channels = ['#news'] + +if 'FEEDFILE' in os.environ: + feedfile = os.environ['FEEDFILE'] + +if 'URLSHORT' in os.environ: + url_shortener = os.environ['URLSHORT'] + +bots = {} +knews = NewsBot('knews') + +#config file reading +F = open(feedfile, "r") +lines = F.readlines() +F.close() + +for line in lines: + line = line.strip('\n') + linear = line.split('|') + bot = rssbot.RssBot(linear[1], linear[0], init_channels + linear[2].split(), url_shortener) + bot.start() + bots[linear[0]] = bot + +knews.start() + -- cgit v1.2.3 From f4c627b4a70e09c122973274dba4399a10751adc Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 23:46:26 +0100 Subject: ircbot: stop retrying after 20 fails --- ircbot/rssbot.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py index 79276a3a..7240fa90 100755 --- a/ircbot/rssbot.py +++ b/ircbot/rssbot.py @@ -41,6 +41,7 @@ class RssBot(irc.bot.SingleServerIRCBot): self.loop = False def updateloop(self): + failcount=0 while True: try: self.feed = feedparser.parse(self.url) @@ -49,6 +50,10 @@ class RssBot(irc.bot.SingleServerIRCBot): break except: print(self.name + ': rss timeout occured') + failcount+=1 + if failcount>20: + print(self.name + ' is broken, going to die') + self.stop() while self.loop: try: self.feed = feedparser.parse(self.url) -- cgit v1.2.3 From 69694643bd15e713d2173c98f0ff56d634fa2711 Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 23:49:08 +0100 Subject: ircbot: maybe this will work --- ircbot/rssbot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py index 7240fa90..b2fa34a1 100755 --- a/ircbot/rssbot.py +++ b/ircbot/rssbot.py @@ -39,6 +39,7 @@ class RssBot(irc.bot.SingleServerIRCBot): def stop(self): self.ircobj.disconnect_all() self.loop = False + del self def updateloop(self): failcount=0 -- cgit v1.2.3 From 9c73389ee25efd97083aea81af4f9e4f4eb99aca Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 23:53:27 +0100 Subject: ircbot: maybe this? --- ircbot/rssbot.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py index b2fa34a1..87c58781 100755 --- a/ircbot/rssbot.py +++ b/ircbot/rssbot.py @@ -55,6 +55,7 @@ class RssBot(irc.bot.SingleServerIRCBot): if failcount>20: print(self.name + ' is broken, going to die') self.stop() + return while self.loop: try: self.feed = feedparser.parse(self.url) -- cgit v1.2.3 From b5f1c347900b21a07674f2132e4dac2fb1dc99ea Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 23:58:14 +0100 Subject: ircbos: saving only running bots --- ircbot/controller.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ircbot/controller.py b/ircbot/controller.py index 66c42bd7..5277d626 100755 --- a/ircbot/controller.py +++ b/ircbot/controller.py @@ -81,7 +81,8 @@ class commands(): def save(args): output_buffer = '' for bot in bots: - output_buffer += bot + '|' + bots[bot].url + '|' + ' '.join(bots[bot].channels) + '\n' + if bot.loop: + output_buffer += bot + '|' + bots[bot].url + '|' + ' '.join(bots[bot].channels) + '\n' F = open(feedfile, "w") F.writelines(output_buffer) -- cgit v1.2.3 From 940e77f47d7c3d874053eeab17054f6b10e63a12 Mon Sep 17 00:00:00 2001 From: lassulus Date: Thu, 9 Jan 2014 23:58:38 +0100 Subject: rename ircbot to knn (krebs news network) --- ircbot/GfindFeeds4bot | 17 ------ ircbot/controller.py | 143 -------------------------------------------------- ircbot/feeds | 2 - ircbot/new_feeds | 56 -------------------- ircbot/rssbot.py | 116 ---------------------------------------- knn/GfindFeeds4bot | 17 ++++++ knn/controller.py | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++ knn/feeds | 2 + knn/new_feeds | 56 ++++++++++++++++++++ knn/rssbot.py | 116 ++++++++++++++++++++++++++++++++++++++++ 10 files changed, 334 insertions(+), 334 deletions(-) delete mode 100755 ircbot/GfindFeeds4bot delete mode 100755 ircbot/controller.py delete mode 100644 ircbot/feeds delete mode 100644 ircbot/new_feeds delete mode 100755 ircbot/rssbot.py create mode 100755 knn/GfindFeeds4bot create mode 100755 knn/controller.py create mode 100644 knn/feeds create mode 100644 knn/new_feeds create mode 100755 knn/rssbot.py diff --git a/ircbot/GfindFeeds4bot b/ircbot/GfindFeeds4bot deleted file mode 100755 index a5439c5a..00000000 --- a/ircbot/GfindFeeds4bot +++ /dev/null @@ -1,17 +0,0 @@ -#! /bin/sh -# usage: GfindFeeds4bot QUERY -set -euf - -export query="$1" -export data="$( - curl -sS "https://www.google.com/uds/GfindFeeds?v=1.0&q=$query" -)" - -node < 0 and args_array[0][:-1]==self.name: - answer = self.read_message(args_array[1:]) - self.send(event.target, answer) - - def on_invite(self, connection, event): - for chan in event.arguments: - connection.join(chan) - - def read_message(self, args): - try: - if args[0] in [x for x in commands.__dict__.keys() if x.find('_')]: - func = getattr(commands, args[0]) - return func(args) - else: - return 'command not found' - except: - return "mimimimi" - - - -class commands(): - def add(args): - bot = rssbot.RssBot(args[2], args[1], url_shortener=url_shortener) - bots[args[1]] = bot - bot.start() - return "bot " + args[1] + " added" - - def delete(args): - bots[args[1]].stop() - del bots[args[1]] - return "bot " + args[1] + " deleted" - - def rename(args): - if args[1] in bots: - if args[2] in bots: - return args[2] + ' already taken' - else: - bots[args[1]].connection.nick(args[2]) - bots[args[1]].name = args[2] - bots[args[2]] = bots[args[1]] - del bots[args[1]] - return 'renamed ' + args[1] + ' in ' + args[2] - else: - return args[1] + ' does not exist' - - def save(args): - output_buffer = '' - for bot in bots: - if bot.loop: - output_buffer += bot + '|' + bots[bot].url + '|' + ' '.join(bots[bot].channels) + '\n' - - F = open(feedfile, "w") - F.writelines(output_buffer) - F.close() - - return "bots saved to " + feedfile - - def caps(args): - return ' '.join([x for x in commands.__dict__.keys() if x.find('_')]) - - def list(args): - output_buffer = '' - for bot in bots: - output_buffer += bot + ' url: ' + bots[bot].url + '\n' - return output_buffer - - def info(args): - if args[1] in bots: - output_buffer = '' - for data in ['title', 'link', 'updated']: - if data in bots[args[1]].feed.feed: - output_buffer += data + ': ' + bots[args[1]].feed.feed[data] + '\n' - output_buffer += 'lastnew: ' + bots[args[1]].lastnew.isoformat() - return output_buffer - else: - return 'bot not found' - - def search(args): - output = subprocess.check_output(['./GfindFeeds4bot', args[1]]).decode() - return output - -feedfile = 'new_feeds' -url_shortener = 'http://wall' -init_channels = ['#news'] - -if 'FEEDFILE' in os.environ: - feedfile = os.environ['FEEDFILE'] - -if 'URLSHORT' in os.environ: - url_shortener = os.environ['URLSHORT'] - -bots = {} -knews = NewsBot('knews') - -#config file reading -F = open(feedfile, "r") -lines = F.readlines() -F.close() - -for line in lines: - line = line.strip('\n') - linear = line.split('|') - bot = rssbot.RssBot(linear[1], linear[0], init_channels + linear[2].split(), url_shortener) - bot.start() - bots[linear[0]] = bot - -knews.start() - diff --git a/ircbot/feeds b/ircbot/feeds deleted file mode 100644 index 50fe0667..00000000 --- a/ircbot/feeds +++ /dev/null @@ -1,2 +0,0 @@ -HN|http://news.ycombinator.com/rss -Fefe|http://blog.fefe.de/rss.xml diff --git a/ircbot/new_feeds b/ircbot/new_feeds deleted file mode 100644 index b1e77657..00000000 --- a/ircbot/new_feeds +++ /dev/null @@ -1,56 +0,0 @@ -spiegel_top|http://www.spiegel.de/schlagzeilen/tops/index.rss|#news -wsj_jp|http://blogs.wsj.com/japanrealtime/feed?mod=WSJ_Japan_JapanRealTime|#news -ccc|http://www.ccc.de/rss/updates.rdf|#news -coinspotting|http://coinspotting.com/rss|#news -reddit_sci|http://www.reddit.com/r/science/.rss|#news -reddit_tech|http://www.reddit.com/r/technology/.rss|#news -scmp|http://www.scmp.com/rss/91/feed|#news -golem|http://www.golem.de/rss.php?feed=RSS1.0|#news -anon|http://anoninsiders.net/feed/|#news -wsj_kor|http://blogs.wsj.com/korearealtime/feed?mod=WSJ_korearealtimeRealTime|#news #test -faz_politik|http://www.faz.net/rss/aktuell/politik/|#news -reddit_prog|http://reddit.com/r/programming/|#news -gulli|http://ticker.gulli.com/rss/|#news -danisch|http://www.danisch.de/blog/feed/|#news -lisp|http://planet.lisp.org/rss20.xml|#news -wsj_in|http://blogs.wsj.com/indiarealtime/feed?mod=irt|#news #test -wsj_me|http://blogs.wsj.com/middleeast/feed?mod=middleeast|#news #test -lolmythesis|http://lolmythesis.com/rss|#news -exploitdb|http://www.exploit-db.com/rss.xml|#news -LtU|http://lambda-the-ultimate.org/rss.xml|#news -HN|http://news.ycombinator.com/rss|#news -weechat|http://dev.weechat.org/feed/atom|#news -faz_feui|http://www.faz.net/rss/aktuell/feuilleton/|#news -fvwm|http://freecode.com/projects/fvwm/releases.atom|#news -rawstory|http://www.rawstory.com/rs/feed/|#news -wsj_cn|http://blogs.wsj.com/chinarealtime/feed?mod=chinablog|#news -torr_news|http://feed.torrentfreak.com/Torrentfreak/|#news -xkcd|https://xkcd.com/rss.xml|#news -wp_world|http://feeds.washingtonpost.com/rss/rss_blogpost|#news -wsj_eu|http://blogs.wsj.com/emergingeurope/feed?mod=emergingeurope|#news #test -telepolis|http://www.heise.de/tp/rss/news-atom.xml|#news -wsj_sea|http://blogs.wsj.com/searealtime/feed?mod=WSJ_SEA_Blog|#news #test -embargowatch|https://embargowatch.wordpress.com/feed/|#news -aje|http://www.aljazeera.com/Services/Rss/?PostingId=2007731105943979989|#news -taz|http://taz.de/Themen-des-Tages/!p15;rss/|#news -reuters|http://feeds.reuters.com/Reuters/worldNews|#news -sec-db|http://feeds.security-database.com/SecurityDatabaseToolsWatch|#news -archlinux|http://www.archlinux.org/feeds/news/|#news -nnewsg|http://www.net-news-global.net/rss/rssfeed.xml|#news -faz_wirtschaft|http://www.faz.net/rss/aktuell/wirtschaft/|#news -arbor|http://feeds2.feedburner.com/asert/|#news -reddit_world|http://www.reddit.com/r/worldnews/.rss|#news -linuxinsider|http://www.linuxinsider.com/perl/syndication/rssfull.pl|#news -spiegel_eil|http://www.spiegel.de/schlagzeilen/eilmeldungen/index.rss|#news -heise|http://heise.de.feedsportal.com/c/35207/f/653902/index.rss|#news -slashdot|http://rss.slashdot.org/Slashdot/slashdot|#news -antirez|http://antirez.com/rss|#news -sz|http://suche.sueddeutsche.de/?output=rss|#news -GerForPol|http://www.german-foreign-policy.com/de/news/rss-2.0|#news -schallurauch|http://feeds.feedburner.com/SchallUndRauch|#news -torr_bits|http://feeds.feedburner.com/TorrentfreakBits|#news -fefe|http://blog.fefe.de/rss.xml|#news -rt|http://rt.com/rss/news/|#news -ars|http://feeds.arstechnica.com/arstechnica/index?format=xml|#news -dwn|http://deutsche-wirtschafts-nachrichten.de/feed/customfeed/|#news -reddit_consp|http://reddit.com/r/conspiracy/.rss|#news diff --git a/ircbot/rssbot.py b/ircbot/rssbot.py deleted file mode 100755 index 87c58781..00000000 --- a/ircbot/rssbot.py +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/python -import irc.bot -from irc.client import IRC -import feedparser -import threading -import math -import re -import subprocess -from datetime import datetime -from time import sleep - -class RssBot(irc.bot.SingleServerIRCBot): - def __init__(self, rss, name, chans=['#news'], url_shortener="http://localhost", server='ire', port=6667, timeout=60): - irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], name, name) - self.url = rss - self.name = name - self.server = server - self.port = port - self.chans = chans - self.to = timeout - self.oldnews = [] - self.sendqueue = [] - self.loop = True - self.lastnew = datetime.now() - self.url_shortener = url_shortener - - def better_loop(timeout=0.2): - while self.loop: - self.ircobj.process_once(timeout) - self.ircobj.process_forever = better_loop - - - def start(self): - self.upd_loop = threading.Thread(target=self.updateloop) - self.bot = threading.Thread(target=irc.bot.SingleServerIRCBot.start, args=(self,)) - self.upd_loop.start() - self.bot.start() - - def stop(self): - self.ircobj.disconnect_all() - self.loop = False - del self - - def updateloop(self): - failcount=0 - while True: - try: - self.feed = feedparser.parse(self.url) - for entry in self.feed.entries: - self.oldnews.append(entry.link) - break - except: - print(self.name + ': rss timeout occured') - failcount+=1 - if failcount>20: - print(self.name + ' is broken, going to die') - self.stop() - return - while self.loop: - try: - self.feed = feedparser.parse(self.url) - for entry in self.feed.entries: - if not entry.link in self.oldnews: - #try: - # self.send(entry.title + " " + entry.link + " com: " + entry.comments) - #except AttributeError: - shorturl = self.shortenurl(entry.link) - self.sendall(entry.title + ' ' + shorturl) - self.oldnews.append(entry.link) - self.lastnew = datetime.now() - except: - print(self.name + ': rss timeout occured') - sleep(self.to) - - def shortenurl(self, url): - while True: - try: - shorturl = subprocess.check_output(["curl", "-sS", "-F", "uri=" + url, self.url_shortener]).decode().strip('\n').strip('\r') + '#' + url.partition('://')[2].partition('/')[0] - return shorturl - except: - print('url shortener error') - sleep(1) - - def last(self, target, num): - for feed in [x for x in self.feed.entries][:num]: - self.send(target, feed.title + ' ' + self.shortenurl(feed.link)) - - def sendall(self, string): - for chan in self.channels: - self.send(chan, string) - - def send(self, target, string): - if self.connection.connected: - for line in string.split('\n'): - if len(line) < 450: - self.connection.privmsg(target, line) - sleep(1) - else: - space = 0 - for x in range(math.ceil(len(line)/400)): - oldspace = space - space = line.find(" ", (x+1)*400, (x+1)*400+50) - self.connection.privmsg(target, line[oldspace:space]) - sleep(1) - else: - self.connection.reconnect() - sleep(1) - self.send(string) - - def on_invite(self, connection, event): - for chan in event.arguments: - connection.join(chan) - - def on_welcome(self, connection, event): - for chan in self.chans: - connection.join(chan) diff --git a/knn/GfindFeeds4bot b/knn/GfindFeeds4bot new file mode 100755 index 00000000..a5439c5a --- /dev/null +++ b/knn/GfindFeeds4bot @@ -0,0 +1,17 @@ +#! /bin/sh +# usage: GfindFeeds4bot QUERY +set -euf + +export query="$1" +export data="$( + curl -sS "https://www.google.com/uds/GfindFeeds?v=1.0&q=$query" +)" + +node < 0 and args_array[0][:-1]==self.name: + answer = self.read_message(args_array[1:]) + self.send(event.target, answer) + + def on_invite(self, connection, event): + for chan in event.arguments: + connection.join(chan) + + def read_message(self, args): + try: + if args[0] in [x for x in commands.__dict__.keys() if x.find('_')]: + func = getattr(commands, args[0]) + return func(args) + else: + return 'command not found' + except: + return "mimimimi" + + + +class commands(): + def add(args): + bot = rssbot.RssBot(args[2], args[1], url_shortener=url_shortener) + bots[args[1]] = bot + bot.start() + return "bot " + args[1] + " added" + + def delete(args): + bots[args[1]].stop() + del bots[args[1]] + return "bot " + args[1] + " deleted" + + def rename(args): + if args[1] in bots: + if args[2] in bots: + return args[2] + ' already taken' + else: + bots[args[1]].connection.nick(args[2]) + bots[args[1]].name = args[2] + bots[args[2]] = bots[args[1]] + del bots[args[1]] + return 'renamed ' + args[1] + ' in ' + args[2] + else: + return args[1] + ' does not exist' + + def save(args): + output_buffer = '' + for bot in bots: + if bot.loop: + output_buffer += bot + '|' + bots[bot].url + '|' + ' '.join(bots[bot].channels) + '\n' + + F = open(feedfile, "w") + F.writelines(output_buffer) + F.close() + + return "bots saved to " + feedfile + + def caps(args): + return ' '.join([x for x in commands.__dict__.keys() if x.find('_')]) + + def list(args): + output_buffer = '' + for bot in bots: + output_buffer += bot + ' url: ' + bots[bot].url + '\n' + return output_buffer + + def info(args): + if args[1] in bots: + output_buffer = '' + for data in ['title', 'link', 'updated']: + if data in bots[args[1]].feed.feed: + output_buffer += data + ': ' + bots[args[1]].feed.feed[data] + '\n' + output_buffer += 'lastnew: ' + bots[args[1]].lastnew.isoformat() + return output_buffer + else: + return 'bot not found' + + def search(args): + output = subprocess.check_output(['./GfindFeeds4bot', args[1]]).decode() + return output + +feedfile = 'new_feeds' +url_shortener = 'http://wall' +init_channels = ['#news'] + +if 'FEEDFILE' in os.environ: + feedfile = os.environ['FEEDFILE'] + +if 'URLSHORT' in os.environ: + url_shortener = os.environ['URLSHORT'] + +bots = {} +knews = NewsBot('knews') + +#config file reading +F = open(feedfile, "r") +lines = F.readlines() +F.close() + +for line in lines: + line = line.strip('\n') + linear = line.split('|') + bot = rssbot.RssBot(linear[1], linear[0], init_channels + linear[2].split(), url_shortener) + bot.start() + bots[linear[0]] = bot + +knews.start() + diff --git a/knn/feeds b/knn/feeds new file mode 100644 index 00000000..50fe0667 --- /dev/null +++ b/knn/feeds @@ -0,0 +1,2 @@ +HN|http://news.ycombinator.com/rss +Fefe|http://blog.fefe.de/rss.xml diff --git a/knn/new_feeds b/knn/new_feeds new file mode 100644 index 00000000..b1e77657 --- /dev/null +++ b/knn/new_feeds @@ -0,0 +1,56 @@ +spiegel_top|http://www.spiegel.de/schlagzeilen/tops/index.rss|#news +wsj_jp|http://blogs.wsj.com/japanrealtime/feed?mod=WSJ_Japan_JapanRealTime|#news +ccc|http://www.ccc.de/rss/updates.rdf|#news +coinspotting|http://coinspotting.com/rss|#news +reddit_sci|http://www.reddit.com/r/science/.rss|#news +reddit_tech|http://www.reddit.com/r/technology/.rss|#news +scmp|http://www.scmp.com/rss/91/feed|#news +golem|http://www.golem.de/rss.php?feed=RSS1.0|#news +anon|http://anoninsiders.net/feed/|#news +wsj_kor|http://blogs.wsj.com/korearealtime/feed?mod=WSJ_korearealtimeRealTime|#news #test +faz_politik|http://www.faz.net/rss/aktuell/politik/|#news +reddit_prog|http://reddit.com/r/programming/|#news +gulli|http://ticker.gulli.com/rss/|#news +danisch|http://www.danisch.de/blog/feed/|#news +lisp|http://planet.lisp.org/rss20.xml|#news +wsj_in|http://blogs.wsj.com/indiarealtime/feed?mod=irt|#news #test +wsj_me|http://blogs.wsj.com/middleeast/feed?mod=middleeast|#news #test +lolmythesis|http://lolmythesis.com/rss|#news +exploitdb|http://www.exploit-db.com/rss.xml|#news +LtU|http://lambda-the-ultimate.org/rss.xml|#news +HN|http://news.ycombinator.com/rss|#news +weechat|http://dev.weechat.org/feed/atom|#news +faz_feui|http://www.faz.net/rss/aktuell/feuilleton/|#news +fvwm|http://freecode.com/projects/fvwm/releases.atom|#news +rawstory|http://www.rawstory.com/rs/feed/|#news +wsj_cn|http://blogs.wsj.com/chinarealtime/feed?mod=chinablog|#news +torr_news|http://feed.torrentfreak.com/Torrentfreak/|#news +xkcd|https://xkcd.com/rss.xml|#news +wp_world|http://feeds.washingtonpost.com/rss/rss_blogpost|#news +wsj_eu|http://blogs.wsj.com/emergingeurope/feed?mod=emergingeurope|#news #test +telepolis|http://www.heise.de/tp/rss/news-atom.xml|#news +wsj_sea|http://blogs.wsj.com/searealtime/feed?mod=WSJ_SEA_Blog|#news #test +embargowatch|https://embargowatch.wordpress.com/feed/|#news +aje|http://www.aljazeera.com/Services/Rss/?PostingId=2007731105943979989|#news +taz|http://taz.de/Themen-des-Tages/!p15;rss/|#news +reuters|http://feeds.reuters.com/Reuters/worldNews|#news +sec-db|http://feeds.security-database.com/SecurityDatabaseToolsWatch|#news +archlinux|http://www.archlinux.org/feeds/news/|#news +nnewsg|http://www.net-news-global.net/rss/rssfeed.xml|#news +faz_wirtschaft|http://www.faz.net/rss/aktuell/wirtschaft/|#news +arbor|http://feeds2.feedburner.com/asert/|#news +reddit_world|http://www.reddit.com/r/worldnews/.rss|#news +linuxinsider|http://www.linuxinsider.com/perl/syndication/rssfull.pl|#news +spiegel_eil|http://www.spiegel.de/schlagzeilen/eilmeldungen/index.rss|#news +heise|http://heise.de.feedsportal.com/c/35207/f/653902/index.rss|#news +slashdot|http://rss.slashdot.org/Slashdot/slashdot|#news +antirez|http://antirez.com/rss|#news +sz|http://suche.sueddeutsche.de/?output=rss|#news +GerForPol|http://www.german-foreign-policy.com/de/news/rss-2.0|#news +schallurauch|http://feeds.feedburner.com/SchallUndRauch|#news +torr_bits|http://feeds.feedburner.com/TorrentfreakBits|#news +fefe|http://blog.fefe.de/rss.xml|#news +rt|http://rt.com/rss/news/|#news +ars|http://feeds.arstechnica.com/arstechnica/index?format=xml|#news +dwn|http://deutsche-wirtschafts-nachrichten.de/feed/customfeed/|#news +reddit_consp|http://reddit.com/r/conspiracy/.rss|#news diff --git a/knn/rssbot.py b/knn/rssbot.py new file mode 100755 index 00000000..87c58781 --- /dev/null +++ b/knn/rssbot.py @@ -0,0 +1,116 @@ +#!/usr/bin/python +import irc.bot +from irc.client import IRC +import feedparser +import threading +import math +import re +import subprocess +from datetime import datetime +from time import sleep + +class RssBot(irc.bot.SingleServerIRCBot): + def __init__(self, rss, name, chans=['#news'], url_shortener="http://localhost", server='ire', port=6667, timeout=60): + irc.bot.SingleServerIRCBot.__init__(self, [(server, port)], name, name) + self.url = rss + self.name = name + self.server = server + self.port = port + self.chans = chans + self.to = timeout + self.oldnews = [] + self.sendqueue = [] + self.loop = True + self.lastnew = datetime.now() + self.url_shortener = url_shortener + + def better_loop(timeout=0.2): + while self.loop: + self.ircobj.process_once(timeout) + self.ircobj.process_forever = better_loop + + + def start(self): + self.upd_loop = threading.Thread(target=self.updateloop) + self.bot = threading.Thread(target=irc.bot.SingleServerIRCBot.start, args=(self,)) + self.upd_loop.start() + self.bot.start() + + def stop(self): + self.ircobj.disconnect_all() + self.loop = False + del self + + def updateloop(self): + failcount=0 + while True: + try: + self.feed = feedparser.parse(self.url) + for entry in self.feed.entries: + self.oldnews.append(entry.link) + break + except: + print(self.name + ': rss timeout occured') + failcount+=1 + if failcount>20: + print(self.name + ' is broken, going to die') + self.stop() + return + while self.loop: + try: + self.feed = feedparser.parse(self.url) + for entry in self.feed.entries: + if not entry.link in self.oldnews: + #try: + # self.send(entry.title + " " + entry.link + " com: " + entry.comments) + #except AttributeError: + shorturl = self.shortenurl(entry.link) + self.sendall(entry.title + ' ' + shorturl) + self.oldnews.append(entry.link) + self.lastnew = datetime.now() + except: + print(self.name + ': rss timeout occured') + sleep(self.to) + + def shortenurl(self, url): + while True: + try: + shorturl = subprocess.check_output(["curl", "-sS", "-F", "uri=" + url, self.url_shortener]).decode().strip('\n').strip('\r') + '#' + url.partition('://')[2].partition('/')[0] + return shorturl + except: + print('url shortener error') + sleep(1) + + def last(self, target, num): + for feed in [x for x in self.feed.entries][:num]: + self.send(target, feed.title + ' ' + self.shortenurl(feed.link)) + + def sendall(self, string): + for chan in self.channels: + self.send(chan, string) + + def send(self, target, string): + if self.connection.connected: + for line in string.split('\n'): + if len(line) < 450: + self.connection.privmsg(target, line) + sleep(1) + else: + space = 0 + for x in range(math.ceil(len(line)/400)): + oldspace = space + space = line.find(" ", (x+1)*400, (x+1)*400+50) + self.connection.privmsg(target, line[oldspace:space]) + sleep(1) + else: + self.connection.reconnect() + sleep(1) + self.send(string) + + def on_invite(self, connection, event): + for chan in event.arguments: + connection.join(chan) + + def on_welcome(self, connection, event): + for chan in self.chans: + connection.join(chan) -- cgit v1.2.3 From 55f6d44e551289a336bb922cc7c3fe70a5100774 Mon Sep 17 00:00:00 2001 From: lassulus Date: Fri, 10 Jan 2014 00:00:05 +0100 Subject: knn: new feeds --- knn/new_feeds | 144 ++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 99 insertions(+), 45 deletions(-) diff --git a/knn/new_feeds b/knn/new_feeds index b1e77657..97f2f762 100644 --- a/knn/new_feeds +++ b/knn/new_feeds @@ -1,56 +1,110 @@ -spiegel_top|http://www.spiegel.de/schlagzeilen/tops/index.rss|#news -wsj_jp|http://blogs.wsj.com/japanrealtime/feed?mod=WSJ_Japan_JapanRealTime|#news +faz_feui|http://www.faz.net/rss/aktuell/feuilleton/|#news +catholic_news|http://feeds.feedburner.com/catholicnewsagency/dailynews|#news +lisp|http://planet.lisp.org/rss20.xml|#news +sciencemag|http://news.sciencemag.org/rss/current.xml|#news +weechat|http://dev.weechat.org/feed/atom|#news +nnewsg|http://www.net-news-global.net/rss/rssfeed.xml|#news ccc|http://www.ccc.de/rss/updates.rdf|#news -coinspotting|http://coinspotting.com/rss|#news +danisch|http://www.danisch.de/blog/feed/|#news +tinc|http://tinc-vpn.org/news/index.rss|#news +ft_india|http://www.ft.com/rss/home/india|#news +nasa_news|http://www.nasa-usa.de/rss/dyn/breaking_news.rss|#news +GerForPol|http://www.german-foreign-policy.com/de/news/rss-2.0|#news +un_me|http://www.un.org/apps/news/rss/rss_mideast.asp|#news +shz_news|http://www.shz.de/nachrichten/newsticker/rss|#news +wp_world|http://feeds.washingtonpost.com/rss/rss_blogpost|#news +fbi_nat_press|http://www.fbi.gov/news/rss|#news +dwn|http://deutsche-wirtschafts-nachrichten.de/feed/customfeed/|#news +faz_politik|http://www.faz.net/rss/aktuell/politik/|#news +spiegel_top|http://www.spiegel.de/schlagzeilen/tops/index.rss|#news +presseportal|http://www.presseportal.de/rss/presseportal.rss2|#news +telegraph_uk|http://www.telegraph.co.uk/news/uknews/rss|#news +LtU|http://lambda-the-ultimate.org/rss.xml|#news +vimperator|https://sites.google.com/a/vimperator.org/www/blog/posts.xml|#news +schallurauch|http://feeds.feedburner.com/SchallUndRauch|#news +add|kernel|#news +anon|http://anoninsiders.net/feed/|#news +4chan_status|http://status.4chan.org/feeds/posts/default?alt=rss| +nytimes|http://rss.nytimes.com/services/xml/rss/nyt/World.xml|#news +bbc|http://feeds.bbci.co.uk/news/rss.xml|#news +bild|http://rss.bild.de/bild.xml|#news +reddit_world|http://www.reddit.com/r/worldnews/.rss|#news +fbi|http://www.fbi.gov/homepage/RSS|#news reddit_sci|http://www.reddit.com/r/science/.rss|#news +geheimorganisation|http://geheimorganisation.org/feed/|#news +eia_press|http://www.eia.gov/rss/press_rss.xml|#news +nsa|http://www.nsa.gov/rss.shtml|#news +travel_warnings|http://feeds.travel.state.gov/ca/travelwarnings-alerts|#news +tigsource|http://www.tigsource.com/feed/|#news +un_top|http://www.un.org/apps/news/rss/rss_top.asp|#news +archlinux|http://www.archlinux.org/feeds/news/|#news +sec-db|http://feeds.security-database.com/SecurityDatabaseToolsWatch|#news +coinspotting|http://coinspotting.com/rss|#news +fefe|http://blog.fefe.de/rss.xml|#news +embargowatch|https://embargowatch.wordpress.com/feed/|#news +spiegel_eil|http://www.spiegel.de/schlagzeilen/eilmeldungen/index.rss|#news +aje|http://www.aljazeera.com/Services/Rss/?PostingId=2007731105943979989|#news +gulli|http://ticker.gulli.com/rss/|#news +us_math_society|http://www.ams.org/cgi-bin/content/news_items.cgi?rss=1|#news +tagesschau|http://www.tagesschau.de/newsticker.rdf|#news +fbi_news|http://www.fbi.gov/news/news_blog/rss.xml|#news +bmj|http://www.bmj.com/rss|#news +ft_me|http://www.ft.com/rss/home/middleeast|#news +fbi_stories|http://www.fbi.gov/news/stories/all-stories/rss.xml|#news +sz_wirtschaft|http://rss.sueddeutsche.de/rss/Wirtschaft|#news +arbor|http://feeds2.feedburner.com/asert/|#news reddit_tech|http://www.reddit.com/r/technology/.rss|#news -scmp|http://www.scmp.com/rss/91/feed|#news golem|http://www.golem.de/rss.php?feed=RSS1.0|#news -anon|http://anoninsiders.net/feed/|#news -wsj_kor|http://blogs.wsj.com/korearealtime/feed?mod=WSJ_korearealtimeRealTime|#news #test -faz_politik|http://www.faz.net/rss/aktuell/politik/|#news -reddit_prog|http://reddit.com/r/programming/|#news -gulli|http://ticker.gulli.com/rss/|#news -danisch|http://www.danisch.de/blog/feed/|#news -lisp|http://planet.lisp.org/rss20.xml|#news -wsj_in|http://blogs.wsj.com/indiarealtime/feed?mod=irt|#news #test -wsj_me|http://blogs.wsj.com/middleeast/feed?mod=middleeast|#news #test -lolmythesis|http://lolmythesis.com/rss|#news +heise|http://heise.de.feedsportal.com/c/35207/f/653902/index.rss|#news +fbi_press|http://www.fbi.gov/news/current/rss.xml|#news +ars|http://feeds.arstechnica.com/arstechnica/index?format=xml|#news +cancer|http://feeds.feedburner.com/ncinewsreleases?format=xml|#news +un_eu|http://www.un.org/apps/news/rss/rss_europe.asp|#news +europa_ric|http://ec.europa.eu/research/infocentre/rss/infocentre-rss.xml|#news +fedreserve|http://www.federalreserve.gov/feeds/press_all.xml|#news exploitdb|http://www.exploit-db.com/rss.xml|#news -LtU|http://lambda-the-ultimate.org/rss.xml|#news +xkcd|https://xkcd.com/rss.xml|#news +reddit_prog|http://reddit.com/r/programming/|#news HN|http://news.ycombinator.com/rss|#news -weechat|http://dev.weechat.org/feed/atom|#news -faz_feui|http://www.faz.net/rss/aktuell/feuilleton/|#news +sz_wissen|http://suche.sueddeutsche.de/rss/Wissen|#news +scmp|http://www.scmp.com/rss/91/feed|#news +shackspace|http://shackspace.de/?feed=rss2|#news +greenpeace|http://www.greenpeace.de/nachrichten/feed/rss2/|#news +rt|http://rt.com/rss/news/|#news +nasa_iotd|http://www.nasa-usa.de/rss/dyn/lg_image_of_the_day.rss|#news +z0r|https://www.facebook.com/feeds/page.php?format=atom10&id=278857186139|#news +stz|http://www.stuttgarter-zeitung.de/rss/topthemen.rss.feed|#news +reuters|http://feeds.reuters.com/Reuters/worldNews|#news +gmanet|http://www.gmanetwork.com/news/rss/news|#news +un_am|http://www.un.org/apps/news/rss/rss_americas.asp|#news +slashdot|http://rss.slashdot.org/Slashdot/slashdot|#news +antirez|http://antirez.com/rss|#news +telegraph_world|http://www.telegraph.co.uk/news/worldnews/rss|#news fvwm|http://freecode.com/projects/fvwm/releases.atom|#news -rawstory|http://www.rawstory.com/rs/feed/|#news -wsj_cn|http://blogs.wsj.com/chinarealtime/feed?mod=chinablog|#news +eu_survei|http://www.eurosurveillance.org/public/RSSFeed/RSS.aspx|#news +eia_today|http://www.eia.gov/rss/todayinenergy.xml|#news +reddit_consp|http://reddit.com/r/conspiracy/.rss|#news +ft_uk|http://www.ft.com/rss/home/uk|#news +times|http://www.thetimes.co.uk/tto/news/rss|#news +phys|http://phys.org/rss-feed/|#news +stern|http://www.stern.de/feed/standard/all/|#news +zdnet|http://www.zdnet.com/news/rss.xml|#news +presse_polizei|http://www.presseportal.de/rss/polizei.rss2|#news torr_news|http://feed.torrentfreak.com/Torrentfreak/|#news -xkcd|https://xkcd.com/rss.xml|#news -wp_world|http://feeds.washingtonpost.com/rss/rss_blogpost|#news -wsj_eu|http://blogs.wsj.com/emergingeurope/feed?mod=emergingeurope|#news #test -telepolis|http://www.heise.de/tp/rss/news-atom.xml|#news -wsj_sea|http://blogs.wsj.com/searealtime/feed?mod=WSJ_SEA_Blog|#news #test -embargowatch|https://embargowatch.wordpress.com/feed/|#news -aje|http://www.aljazeera.com/Services/Rss/?PostingId=2007731105943979989|#news -taz|http://taz.de/Themen-des-Tages/!p15;rss/|#news -reuters|http://feeds.reuters.com/Reuters/worldNews|#news -sec-db|http://feeds.security-database.com/SecurityDatabaseToolsWatch|#news -archlinux|http://www.archlinux.org/feeds/news/|#news -nnewsg|http://www.net-news-global.net/rss/rssfeed.xml|#news faz_wirtschaft|http://www.faz.net/rss/aktuell/wirtschaft/|#news -arbor|http://feeds2.feedburner.com/asert/|#news -reddit_world|http://www.reddit.com/r/worldnews/.rss|#news +telegraph_finance|http://www.telegraph.co.uk/finance/rss|#news linuxinsider|http://www.linuxinsider.com/perl/syndication/rssfull.pl|#news -spiegel_eil|http://www.spiegel.de/schlagzeilen/eilmeldungen/index.rss|#news -heise|http://heise.de.feedsportal.com/c/35207/f/653902/index.rss|#news -slashdot|http://rss.slashdot.org/Slashdot/slashdot|#news -antirez|http://antirez.com/rss|#news -sz|http://suche.sueddeutsche.de/?output=rss|#news -GerForPol|http://www.german-foreign-policy.com/de/news/rss-2.0|#news -schallurauch|http://feeds.feedburner.com/SchallUndRauch|#news +telegraph_pol|http://www.telegraph.co.uk/news/politics/rss|#news +lolmythesis|http://lolmythesis.com/rss|#news +taz|http://taz.de/Themen-des-Tages/!p15;rss/|#news +un_afr|http://www.un.org/apps/news/rss/rss_africa.asp|#news +ft_us|http://www.ft.com/rss/home/us|#news +telepolis|http://www.heise.de/tp/rss/news-atom.xml|#news +ft_europe|http://www.ft.com/rss/home/europe|#news +handelblatt|http://www.handelsblatt.com/contentexport/feed/schlagzeilen|#news +rawstory|http://www.rawstory.com/rs/feed/|#news +sz_politik|http://rss.sueddeutsche.de/rss/Politik|#news +un_pac|http://www.un.org/apps/news/rss/rss_asiapac.asp|#news torr_bits|http://feeds.feedburner.com/TorrentfreakBits|#news -fefe|http://blog.fefe.de/rss.xml|#news -rt|http://rt.com/rss/news/|#news -ars|http://feeds.arstechnica.com/arstechnica/index?format=xml|#news -dwn|http://deutsche-wirtschafts-nachrichten.de/feed/customfeed/|#news -reddit_consp|http://reddit.com/r/conspiracy/.rss|#news +ign|http://feeds.ign.com/ign/all|#news +ft_asia|http://www.ft.com/rss/home/asia|#news -- cgit v1.2.3 From 4f7c7241e3e5bf0203269d1fa6298c85ab952db1 Mon Sep 17 00:00:00 2001 From: lassulus Date: Fri, 10 Jan 2014 00:03:38 +0100 Subject: rename knn to news :( --- knn/GfindFeeds4bot | 17 ------- knn/controller.py | 143 ---------------------------------------------------- knn/feeds | 2 - knn/new_feeds | 110 ---------------------------------------- knn/rssbot.py | 116 ------------------------------------------ news/GfindFeeds4bot | 17 +++++++ news/controller.py | 143 ++++++++++++++++++++++++++++++++++++++++++++++++++++ news/feeds | 2 + news/new_feeds | 110 ++++++++++++++++++++++++++++++++++++++++ news/rssbot.py | 116 ++++++++++++++++++++++++++++++++++++++++++ 10 files changed, 388 insertions(+), 388 deletions(-) delete mode 100755 knn/GfindFeeds4bot delete mode 100755 knn/controller.py delete mode 100644 knn/feeds delete mode 100644 knn/new_feeds delete mode 100755 knn/rssbot.py create mode 100755 news/GfindFeeds4bot create mode 100755 news/controller.py create mode 100644 news/feeds create mode 100644 news/new_feeds create mode 100755 news/rssbot.py diff --git a/knn/GfindFeeds4bot b/knn/GfindFeeds4bot deleted file mode 100755 index a5439c5a..00000000 --- a/knn/GfindFeeds4bot +++ /dev/null @@ -1,17 +0,0 @@ -#! /bin/sh -# usage: GfindFeeds4bot QUERY -set -euf - -export query="$1" -export data="$( - curl -sS "https://www.google.com/uds/GfindFeeds?v=1.0&q=$query" -)" - -node < 0 and args_array[0][:-1]==self.name: - answer = self.read_message(args_array[1:]) - self.send(event.target, answer) - - def on_invite(self, connection, event): - for chan in event.arguments: - connection.join(chan) - - def read_message(self, args): - try: - if args[0] in [x for x in commands.__dict__.keys() if x.find('_')]: - func = getattr(commands, args[0]) - return func(args) - else: - return 'command not found' - except: - return "mimimimi" - - - -class commands(): - def add(args): - bot = rssbot.RssBot(args[2], args[1], url_shortener=url_shortener) - bots[args[1]] = bot - bot.start() - return "bot " + args[1] + " added" - - def delete(args): - bots[args[1]].stop() - del bots[args[1]] - return "bot " + args[1] + " deleted" - - def rename(args): - if args[1] in bots: - if args[2] in bots: - return args[2] + ' already taken' - else: - bots[args[1]].connection.nick(args[2]) - bots[args[1]].name = args[2] - bots[args[2]] = bots[args[1]] - del bots[args[1]] - return 'renamed ' + args[1] + ' in ' + args[2] - else: - return args[1] + ' does not exist' - - def save(args): - output_buffer = '' - for bot in bots: - if bot.loop: - output_buffer += bot + '|' + bots[bot].url + '|' + ' '.join(bots[bot].channels) + '\n' - - F = open(feedfile, "w") - F.writelines(output_buffer) - F.close() - - return "bots saved to " + feedfile - - def caps(args): - return ' '.join([x for x in commands.__dict__.keys() if x.find('_')]) - - def list(args): - output_buffer = '' - for bot in bots: - output_buffer += bot + ' url: ' + bots[bot].url + '\n' - return output_buffer - - def info(args): - if args[1] in bots: - output_buffer = '' - for data in ['title', 'link', 'updated']: - if data in bots[args[1]].feed.feed: - output_buffer += data + ': ' + bots[args[1]].feed.feed[data] + '\n' - output_buffer += 'lastnew: ' + bots[args[1]].lastnew.isoformat() - return output_buffer - else: - return 'bot not found' - - def search(args): - output = subprocess.check_output(['./GfindFeeds4bot', args[1]]).decode() - return output - -feedfile = 'new_feeds' -url_shortener = 'http://wall' -init_channels = ['#news'] - -if 'FEEDFILE' in os.environ: - feedfile = os.environ['FEEDFILE'] - -if 'URLSHORT' in os.environ: - url_shortener = os.environ['URLSHORT'] - -bots = {} -knews = NewsBot('knews') - -#config file reading -F = open(feedfile, "r") -lines = F.readlines() -F.close() - -for line in lines: - line = line.strip('\n') - linear = line.split('|') - bot = rssbot.RssBot(linear[1], linear[0], init_channels + linear[2].split(), url_shortener) - bot.start() - bots[linear[0]] = bot - -knews.start() - diff --git a/knn/feeds b/knn/feeds deleted file mode 100644 index 50fe0667..00000000 --- a/knn/feeds +++ /dev/null @@ -1,2 +0,0 @@ -HN|http://news.ycombinator.com/rss -Fefe|http://blog.fefe.de/rss.xml diff --git a/knn/new_feeds b/knn/new_feeds deleted file mode 100644 index 97f2f762..00000000 --- a/knn/new_feeds +++ /dev/null @@ -1,110 +0,0 @@ -faz_feui|http://www.faz.net/rss/aktuell/feuilleton/|#news -catholic_news|http://feeds.feedburner.com/catholicnewsagency/dailynews|#news -lisp|http://planet.lisp.org/rss20.xml|#news -sciencemag|http://news.sciencemag.org/rss/current.xml|#news -weechat|http://dev.weechat.org/feed/atom|#news -nnewsg|http://www.net-news-global.net/rss/rssfeed.xml|#news -ccc|http://www.ccc.de/rss/updates.rdf|#news -danisch|http://www.danisch.de/blog/feed/|#news -tinc|http://tinc-vpn.org/news/index.rss|#news -ft_india|http://www.ft.com/rss/home/india|#news -nasa_news|http://www.nasa-usa.de/rss/dyn/breaking_news.rss|#news -GerForPol|http://www.german-foreign-policy.com/de/news/rss-2.0|#news -un_me|http://www.un.org/apps/news/rss/rss_mideast.asp|#news -shz_news|http://www.shz.de/nachrichten/newsticker/rss|#news -wp_world|http://feeds.washingtonpost.com/rss/rss_blogpost|#news -fbi_nat_press|http://www.fbi.gov/news/rss|#news -dwn|http://deutsche-wirtschafts-nachrichten.de/feed/customfeed/|#news -faz_politik|http://www.faz.net/rss/aktuell/politik/|#news -spiegel_top|http://www.spiegel.de/schlagzeilen/tops/index.rss|#news -presseportal|http://www.presseportal.de/rss/presseportal.rss2|#news -telegraph_uk|http://www.telegraph.co.uk/news/uknews/rss|#news -LtU|http://lambda-the-ultimate.org/rss.xml|#news -vimperator|https://sites.google.com/a/vimperator.org/www/blog/posts.xml|#news -schallurauch|http://feeds.feedburner.com/SchallUndRauch|#news -add|kernel|#news -anon|http://anoninsiders.net/feed/|#news -4chan_status|http://status.4chan.org/feeds/posts/default?alt=rss| -nytimes|http://rss.nytimes.com/services/xml/rss/nyt/World.xml|#news -bbc|http://feeds.bbci.co.uk/news/rss.xml|#news -bild|http://rss.bild.de/bild.xml|#news -reddit_world|http://www.reddit.com/r/worldnews/.rss|#news -fbi|http://www.fbi.gov/homepage/RSS|#news -reddit_sci|http://www.reddit.com/r/science/.rss|#news -geheimorganisation|http://