def on_status(self, status): if status.text.startswith('@bgpranking AS'): asn = status.text.strip('@bgpranking AS') try: int(asn) except: print status.text return msg_id = status.id sender = status.user.screen_name dates_sources = bgpranking.prepare_sources_by_dates(timeframe=5) ranks = bgpranking.get_all_ranks_single_asn(asn, dates_sources) to_post = '@{user}: {asn}\n'.format(user=sender, asn=asn) dates = sorted(ranks.keys(), reverse=True) for date in dates: info = ranks[date] to_post += '{date}: {rank}\n'.format(date=date, rank=round( 1 + info['total'], 4)) to_post += base_asn_address + asn api.update_status(to_post, msg_id) elif status.text.startswith('@bgpranking IP'): ip = status.text.strip('@bgpranking IP') try: IPy.IP(ip) except: print status.text return msg_id = status.id sender = status.user.screen_name info = bgpranking.get_ip_info(ip, 10) to_post_short = '@{user}: {ip}: http://bgpranking.circl.lu/ip_lookup?ip={ip}'.format( user=sender, ip=ip) if len(info['history']) > 0: latest_data = info['history'][0] template = '\n{asn} - {block}: {base_asn_url}{asn};ip_details={block}\n{descr}' descr = latest_data['descriptions'][0][1] if len(descr) > 40: descr = 'Too Long for Twitter.' to_post = to_post_short + template.format( asn=latest_data['asn'], base_asn_url=base_asn_address, block=latest_data['block'], descr=descr) try: api.update_status(to_post, msg_id) except: api.update_status(to_post_short, msg_id) else: print status.text
def on_status(self, status): if status.text.startswith('@bgpranking AS'): asn = status.text.strip('@bgpranking AS') try: int(asn) except: print status.text return msg_id = status.id sender = status.user.screen_name dates_sources = bgpranking.prepare_sources_by_dates(timeframe=5) ranks = bgpranking.get_all_ranks_single_asn(asn, dates_sources) to_post = '@{user}: {asn}\n'.format(user=sender, asn=asn) dates = sorted(ranks.keys(), reverse=True) for date in dates: info = ranks[date] to_post += '{date}: {rank}\n'.format(date=date,rank=round(1+info['total'], 4)) to_post += base_asn_address + asn api.update_status(to_post, msg_id) elif status.text.startswith('@bgpranking IP'): ip = status.text.strip('@bgpranking IP') try: IPy.IP(ip) except: print status.text return msg_id = status.id sender = status.user.screen_name info = bgpranking.get_ip_info(ip, 10) to_post_short = '@{user}: {ip}: http://bgpranking.circl.lu/ip_lookup?ip={ip}'.format(user=sender, ip=ip) if len(info['history']) > 0: latest_data = info['history'][0] template = '\n{asn} - {block}: {base_asn_url}{asn};ip_details={block}\n{descr}' descr = latest_data['descriptions'][0][1] if len(descr) > 40: descr = 'Too Long for Twitter.' to_post = to_post_short + template.format(asn=latest_data['asn'], base_asn_url=base_asn_address, block=latest_data['block'], descr=descr) try: api.update_status(to_post, msg_id) except: api.update_status(to_post_short, msg_id) else: print status.text
#!/usr/bin/python # -*- coding: utf-8 -*- import redis import bgpranking import os from csv import writer csv_dir = os.path.join('..', '..', 'website', 'data', 'csv') if __name__ == '__main__': r = redis.Redis(unix_socket_path='./redis_export.sock') interval = int(r.get('interval_size')) dates_sources = bgpranking.prepare_sources_by_dates(None, interval) while True: asn = r.spop('asns') if asn is None: break filename = os.path.join(csv_dir, asn) with open(filename, 'w') as csvfile: w = writer(csvfile) w.writerow(['day', 'rank']) ranks = bgpranking.get_all_ranks_single_asn(asn, dates_sources) for date, entry in ranks.iteritems(): w.writerow([date, 1 + entry['total']])