All tinyurl related commands now query the local database to see if a tinyurl

already exists for the url that is being snarfed/passed as an argument. If
not, tinyurl.com is used to generate the tinyurl
This commit is contained in:
James Vega 2003-11-17 17:30:53 +00:00
parent 2909c4a8c6
commit f6e848511b

View File

@ -151,15 +151,23 @@ class URL(callbacks.PrivmsgCommandAndRegexp,
url = match.group(0) url = match.group(0)
if self.configurables.get('tinyurl-snarfer', channel): if self.configurables.get('tinyurl-snarfer', channel):
minlen = self.configurables.get('tinyurl-minimum-length', channel) minlen = self.configurables.get('tinyurl-minimum-length', channel)
if len(url) > minlen: if len(url) >= minlen:
db = self.getDb(channel) db = self.getDb(channel)
cursor = db.cursor() cursor = db.cursor()
cursor.execute("""SELECT tinyurls.tinyurl FROM urls, tinyurls (tinyurl, updateDb) = self._getTinyUrl(url, channel)
WHERE urls.url=%s AND if tinyurl is None:
urls.id=tinyurls.url_id""", url) debug.msg('tinyurl was None for url %r' % url)
if cursor.rowcount == 0: return
elif updateDb:
#debug.printf(url) #debug.printf(url)
tinyurl = self._getTinyUrl(url) self._updateTinyDb(url, tinyurl, channel)
s = '%s (was <%s>)' % (ircutils.bold(tinyurl), url)
irc.reply(msg, s, prefixName=False)
tinyurlSnarfer = privmsgs.urlSnarfer(tinyurlSnarfer)
def _updateTinyDb(self, url, tinyurl, channel):
db = self.getDb(channel)
cursor = db.cursor()
cursor.execute("""INSERT INTO tinyurls cursor.execute("""INSERT INTO tinyurls
VALUES (NULL, 0, %s)""", tinyurl) VALUES (NULL, 0, %s)""", tinyurl)
cursor.execute("""SELECT id FROM urls WHERE url=%s""", url) cursor.execute("""SELECT id FROM urls WHERE url=%s""", url)
@ -167,32 +175,36 @@ class URL(callbacks.PrivmsgCommandAndRegexp,
cursor.execute("""UPDATE tinyurls SET url_id=%s cursor.execute("""UPDATE tinyurls SET url_id=%s
WHERE tinyurl=%s""", id, tinyurl) WHERE tinyurl=%s""", id, tinyurl)
db.commit() db.commit()
else:
tinyurl = cursor.fetchone()[0]
if tinyurl is not None:
s = '%s (was <%s>)' % (ircutils.bold(tinyurl), url)
irc.reply(msg, s, prefixName=False)
else:
debug.msg('tinyurl was none for url %r' % url)
tinyurlSnarfer = privmsgs.urlSnarfer(tinyurlSnarfer)
_tinyRe = re.compile(r'(http://tinyurl\.com/\w+)</blockquote>') _tinyRe = re.compile(r'(http://tinyurl\.com/\w+)</blockquote>')
def _getTinyUrl(self, url, cmd=False): def _getTinyUrl(self, url, channel, cmd=False):
db = self.getDb(channel)
cursor = db.cursor()
cursor.execute("""SELECT tinyurls.tinyurl FROM urls, tinyurls
WHERE urls.url=%s AND
tinyurls.url_id=urls.id""", url)
if cursor.rowcount == 0:
updateDb = True
try: try:
#debug.printf('Trying to get tinyurl for %r' % url) #debug.printf('Trying to get tinyurl for %r' % url)
fd = urllib2.urlopen('http://tinyurl.com/create.php?url=%s' % url) fd = urllib2.urlopen('http://tinyurl.com/create.php?url=%s' %
url)
s = fd.read() s = fd.read()
fd.close() fd.close()
m = self._tinyRe.search(s) m = self._tinyRe.search(s)
if m is None: if m is None:
return None tinyurl = None
return m.group(1) else:
tinyurl = m.group(1)
except urllib2.HTTPError, e: except urllib2.HTTPError, e:
if cmd: if cmd:
raise callbacks.Error, e.msg() raise callbacks.Error, e.msg()
else: else:
debug.msg(e.msg()) debug.msg(e.msg())
else:
updateDb = False
tinyurl = cursor.fetchone()[0]
return (tinyurl, updateDb)
def _formatUrl(self, url, added, addedBy): def _formatUrl(self, url, added, addedBy):
#debug.printf((url, added, addedBy)) #debug.printf((url, added, addedBy))
@ -224,11 +236,21 @@ class URL(callbacks.PrivmsgCommandAndRegexp,
Returns a TinyURL.com version of <url> Returns a TinyURL.com version of <url>
""" """
url = privmsgs.getArgs(args) url = privmsgs.getArgs(args)
if self.configurables.get('tinyurl-snarfer', channel=msg.args[0]): if len(url) < 23:
irc.error(msg,
'Stop being a lazy-biotch and type the URL yourself.')
return return
url = self._getTinyUrl(url, cmd=True) channel = msg.args[0]
if url: snarf = self.configurables.get('tinyurl-snarfer', channel=msg.args[0])
irc.reply(msg, url) minlen = self.configurables.get('tinyurl-minimum-length',
channel=channel)
if snarf and len(url) >= minlen:
return
(tinyurl, updateDb) = self._getTinyUrl(url, channel, cmd=True)
if tinyurl:
if updateDb:
self._updateTinyDb(url, tinyurl, channel)
irc.reply(msg, tinyurl)
else: else:
s = 'Could not parse the TinyURL.com results page. (%s)' % \ s = 'Could not parse the TinyURL.com results page. (%s)' % \
conf.replyPossibleBug conf.replyPossibleBug