#!/usr/bin/env python """ search.py - Phenny Web Search Module Copyright 2008-9, Sean B. Palmer, inamidst.com Licensed under the Eiffel Forum License 2. http://inamidst.com/phenny/ """ import re import web r_google = re.compile(r'href="\/url\?q=(http.*?)&') def generic_google(query): query = web.quote(query) uri = 'https://google.co.uk/search?q=%s' % query return web.get(uri) def google_search(query): bytes = generic_google(query) m = r_google.search(bytes) if m: uri = web.decode(m.group(1)) return web.unquote(uri) r_google_count = re.compile(r'id="resultStats">About (.*?) ') def google_count(query): query = web.quote(query) uri = 'https://google.co.uk/search?q=%s' % query bytes = web.get(uri) m = r_google_count.search(bytes) if m: result = web.decode(m.group(1)).replace(',', '') return int(result) else: return 0 def formatnumber(n): """Format a number with beautiful commas.""" parts = list(str(n)) for i in range((len(parts) - 3), 0, -3): parts.insert(i, ',') return ''.join(parts) def g(phenny, input): """Queries Google for the specified input.""" query = input.group(2) if not query: return phenny.reply('.g what?') uri = google_search(query) if uri: phenny.reply(uri) if not hasattr(phenny.bot, 'last_seen_uri'): phenny.bot.last_seen_uri = {} phenny.bot.last_seen_uri[input.sender] = uri else: phenny.reply("No results found for '%s'." % query) g.commands = ['g'] g.priority = 'high' g.example = '.g swhack' def gc(phenny, input): """Returns the number of Google results for the specified input.""" query = input.group(2) if not query: return phenny.reply('.gc what?') num = formatnumber(google_count(query)) phenny.say(query + ': ' + num) gc.commands = ['gc'] gc.priority = 'high' gc.example = '.gc extrapolate' r_query = re.compile( r'\+?"[^"\\]*(?:\\.[^"\\]*)*"|\[[^]\\]*(?:\\.[^]\\]*)*\]|\S+' ) def gcs(phenny, input): """Compare the number of Google results for the specified paramters.""" if not input.group(2): return phenny.reply("Nothing to compare.") queries = r_query.findall(input.group(2)) if len(queries) > 6: return phenny.reply('Sorry, can only compare up to six things.') results = [] for i, query in enumerate(queries): query = query.strip('[]') n = int((formatnumber(google_count(query)) or '0').replace(',', '')) results.append((n, query)) if i >= 2: __import__('time').sleep(0.25) if i >= 4: __import__('time').sleep(0.25) results = [(term, n) for (n, term) in reversed(sorted(results))] reply = ', '.join('%s (%s)' % (t, formatnumber(n)) for (t, n) in results) phenny.say(reply) gcs.commands = ['gcs', 'comp'] gcs.example = '.gcs Ronaldo Messi' r_bing = re.compile(r'