Merge branch 'master' of MLBScores
This commit is contained in:
commit
b38877b90e
|
@ -0,0 +1 @@
|
||||||
|
Plugin to fetch MLB scores from the MLB.com API
|
|
@ -0,0 +1,71 @@
|
||||||
|
###
|
||||||
|
# Copyright (c) 2018, cottongin
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the author of this software nor the name of
|
||||||
|
# contributors to this software may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written consent.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
"""
|
||||||
|
MLBScores: Plugin to fetch MLB scores from the MLB.com API
|
||||||
|
"""
|
||||||
|
|
||||||
|
import supybot
|
||||||
|
import supybot.world as world
|
||||||
|
|
||||||
|
# Use this for the version of this plugin. You may wish to put a CVS keyword
|
||||||
|
# in here if you're keeping the plugin in CVS or some similar system.
|
||||||
|
__version__ = ""
|
||||||
|
|
||||||
|
# XXX Replace this with an appropriate author or supybot.Author instance.
|
||||||
|
__author__ = supybot.Author('cottongin', 'cottongin',
|
||||||
|
'cottongin@cottongin.club')
|
||||||
|
__maintainer__ = getattr(supybot.authors, 'oddluck',
|
||||||
|
supybot.Author('oddluck', 'oddluck', 'oddluck@riseup.net'))
|
||||||
|
|
||||||
|
# This is a dictionary mapping supybot.Author instances to lists of
|
||||||
|
# contributions.
|
||||||
|
__contributors__ = {}
|
||||||
|
|
||||||
|
# This is a url where the most recent plugin package can be downloaded.
|
||||||
|
__url__ = 'https://github.com/oddluck/limnoria-plugins/'
|
||||||
|
|
||||||
|
from . import config
|
||||||
|
from . import plugin
|
||||||
|
from imp import reload
|
||||||
|
# In case we're being reloaded.
|
||||||
|
reload(config)
|
||||||
|
reload(plugin)
|
||||||
|
# Add more reloads here if you add third-party modules and want them to be
|
||||||
|
# reloaded when this plugin is reloaded. Don't forget to import them as well!
|
||||||
|
|
||||||
|
if world.testing:
|
||||||
|
from . import test
|
||||||
|
|
||||||
|
Class = plugin.Class
|
||||||
|
configure = config.configure
|
||||||
|
|
||||||
|
|
||||||
|
# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:
|
|
@ -0,0 +1,58 @@
|
||||||
|
###
|
||||||
|
# Copyright (c) 2018, cottongin
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the author of this software nor the name of
|
||||||
|
# contributors to this software may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written consent.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
import supybot.conf as conf
|
||||||
|
import supybot.registry as registry
|
||||||
|
try:
|
||||||
|
from supybot.i18n import PluginInternationalization
|
||||||
|
_ = PluginInternationalization('MLBScores')
|
||||||
|
except:
|
||||||
|
# Placeholder that allows to run the plugin on a bot
|
||||||
|
# without the i18n module
|
||||||
|
_ = lambda x: x
|
||||||
|
|
||||||
|
|
||||||
|
def configure(advanced):
|
||||||
|
# This will be called by supybot to configure this module. advanced is
|
||||||
|
# a bool that specifies whether the user identified themself as an advanced
|
||||||
|
# user or not. You should effect your configuration by manipulating the
|
||||||
|
# registry as appropriate.
|
||||||
|
from supybot.questions import expect, anything, something, yn
|
||||||
|
conf.registerPlugin('MLBScores', True)
|
||||||
|
|
||||||
|
|
||||||
|
MLBScores = conf.registerPlugin('MLBScores')
|
||||||
|
# This is where your configuration variables (if any) should go. For example:
|
||||||
|
# conf.registerGlobalValue(MLBScores, 'someConfigVariableName',
|
||||||
|
# registry.Boolean(False, _("""Help for someConfigVariableName.""")))
|
||||||
|
conf.registerGlobalValue(MLBScores, 'bitlyAPIKey',
|
||||||
|
registry.String('', """Bit.ly API key.""", private=True))
|
||||||
|
|
||||||
|
# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:
|
|
@ -0,0 +1,109 @@
|
||||||
|
import pendulum
|
||||||
|
import re
|
||||||
|
|
||||||
|
_FUZZY_DAYS = ['yesterday', 'tonight', 'today', 'tomorrow',
|
||||||
|
'sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']
|
||||||
|
|
||||||
|
def _parseDate(string):
|
||||||
|
"""parse date"""
|
||||||
|
date = string[:3].lower()
|
||||||
|
if date in _FUZZY_DAYS or string.lower() in _FUZZY_DAYS:
|
||||||
|
if date == 'yes':
|
||||||
|
date_string = pendulum.yesterday('US/Pacific').format('YYYY-MM-DD')
|
||||||
|
#print(date_string)
|
||||||
|
return date_string
|
||||||
|
elif date == 'tod' or date == 'ton':
|
||||||
|
date_string = pendulum.now('US/Pacific').format('YYYY-MM-DD')
|
||||||
|
return date_string
|
||||||
|
elif date == 'tom':
|
||||||
|
date_string = pendulum.tomorrow('US/Pacific').format('YYYY-MM-DD')
|
||||||
|
return date_string
|
||||||
|
elif date == 'sun':
|
||||||
|
date_string = pendulum.now('US/Pacific').next(pendulum.SUNDAY).format('YYYY-MM-DD')
|
||||||
|
return date_string
|
||||||
|
elif date == 'mon':
|
||||||
|
date_string = pendulum.now('US/Pacific').next(pendulum.MONDAY).format('YYYY-MM-DD')
|
||||||
|
return date_string
|
||||||
|
elif date == 'tue':
|
||||||
|
date_string = pendulum.now('US/Pacific').next(pendulum.TUESDAY).format('YYYY-MM-DD')
|
||||||
|
return date_string
|
||||||
|
elif date == 'wed':
|
||||||
|
date_string = pendulum.now('US/Pacific').next(pendulum.WEDNESDAY).format('YYYY-MM-DD')
|
||||||
|
return date_string
|
||||||
|
elif date == 'thu':
|
||||||
|
date_string = pendulum.now('US/Pacific').next(pendulum.THURSDAY).format('YYYY-MM-DD')
|
||||||
|
return date_string
|
||||||
|
elif date == 'fri':
|
||||||
|
date_string = pendulum.now('US/Pacific').next(pendulum.FRIDAY).format('YYYY-MM-DD')
|
||||||
|
return date_string
|
||||||
|
elif date == 'sat':
|
||||||
|
date_string = pendulum.now('US/Pacific').next(pendulum.SATURDAY).format('YYYY-MM-DD')
|
||||||
|
return date_string
|
||||||
|
|
||||||
|
def parseInput(args=None, _TEAM_BY_TRI=None, _TEAM_BY_NICK=None):
|
||||||
|
"""parse user input from mlb2"""
|
||||||
|
# return team, date, timezone
|
||||||
|
|
||||||
|
tz = 'US/Eastern'
|
||||||
|
date = None
|
||||||
|
team = None
|
||||||
|
is_date = None
|
||||||
|
|
||||||
|
if not args:
|
||||||
|
return team, date, tz
|
||||||
|
|
||||||
|
arg_array = []
|
||||||
|
for arg in args.split(' '):
|
||||||
|
arg_array.append(arg)
|
||||||
|
|
||||||
|
print(_TEAM_BY_TRI)
|
||||||
|
|
||||||
|
for idx, arg in enumerate(arg_array):
|
||||||
|
#print(arg)
|
||||||
|
if '--tz' in arg:
|
||||||
|
#print(arg_array[idx+1])
|
||||||
|
try:
|
||||||
|
tz = arg_array[idx+1]
|
||||||
|
except:
|
||||||
|
tz = 'US/Eastern'
|
||||||
|
if arg.lower() in _FUZZY_DAYS or arg[:3].lower() in _FUZZY_DAYS:
|
||||||
|
date = _parseDate(arg)
|
||||||
|
#print(date)
|
||||||
|
#date = pendulum.parse(date).in_tz(tz)
|
||||||
|
try:
|
||||||
|
arg = arg.strip('-')
|
||||||
|
arg = arg.strip('/')
|
||||||
|
if arg[0].isdigit() and arg[1].isdigit() and arg[2].isalpha():
|
||||||
|
if arg[-1].isdigit():
|
||||||
|
yr = arg[-2:]
|
||||||
|
mnth = " ".join(re.findall("[a-zA-Z]+", arg))
|
||||||
|
#print(mnth,yr)
|
||||||
|
rebuild = '{}-{}-{}'.format(mnth, arg[:2], yr)
|
||||||
|
else:
|
||||||
|
rebuild = arg[2:] + arg[:2]
|
||||||
|
#print('both', rebuild)
|
||||||
|
elif arg[0].isdigit() and arg[1].isalpha():
|
||||||
|
rebuild = arg[1:] + arg[0]
|
||||||
|
#print('one', rebuild)
|
||||||
|
else:
|
||||||
|
rebuild = arg
|
||||||
|
|
||||||
|
#print(rebuild)
|
||||||
|
is_date = pendulum.parse(rebuild, strict=False)
|
||||||
|
#print(is_date)
|
||||||
|
except:
|
||||||
|
is_date = None
|
||||||
|
if is_date:
|
||||||
|
date = is_date.format('YYYY-MM-DD')
|
||||||
|
if _TEAM_BY_TRI and _TEAM_BY_NICK:
|
||||||
|
if arg.upper() in _TEAM_BY_TRI:
|
||||||
|
team = str(_TEAM_BY_TRI[arg.upper()])
|
||||||
|
elif arg.lower() in _TEAM_BY_NICK:
|
||||||
|
abbr = str(_TEAM_BY_NICK[arg.lower()])
|
||||||
|
team = str(_TEAM_BY_TRI[abbr])
|
||||||
|
#else:
|
||||||
|
# team = arg.upper()
|
||||||
|
|
||||||
|
print(team)
|
||||||
|
|
||||||
|
return team, date, tz
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,6 @@
|
||||||
|
requests==2.18.1
|
||||||
|
httplib2==0.11.3
|
||||||
|
limnoria==2018.6.25
|
||||||
|
pytz==2014.10
|
||||||
|
python_dateutil==2.7.3
|
||||||
|
pendulum==2.0.3
|
|
@ -0,0 +1,38 @@
|
||||||
|
###
|
||||||
|
# Copyright (c) 2018, cottongin
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without
|
||||||
|
# modification, are permitted provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
# this list of conditions, and the following disclaimer in the
|
||||||
|
# documentation and/or other materials provided with the distribution.
|
||||||
|
# * Neither the name of the author of this software nor the name of
|
||||||
|
# contributors to this software may be used to endorse or promote products
|
||||||
|
# derived from this software without specific prior written consent.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||||
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||||
|
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||||
|
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||||
|
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||||
|
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
# POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
from supybot.test import *
|
||||||
|
|
||||||
|
|
||||||
|
class MLBScoresTestCase(PluginTestCase):
|
||||||
|
plugins = ('MLBScores',)
|
||||||
|
|
||||||
|
|
||||||
|
# vim:set shiftwidth=4 tabstop=4 expandtab textwidth=79:
|
Loading…
Reference in New Issue