packages feed

htsn-import 0.1.0 → 0.1.1

raw patch · 13 files changed

+111/−41 lines, 13 files

Files

doc/dbschema/AutoRacingResultsXML.png view

binary file changed (156158 → 139652 bytes)

doc/dbschema/weatherxml.png view

binary file changed (93729 → 95637 bytes)

htsn-import.cabal view
@@ -1,5 +1,5 @@ name:           htsn-import-version:        0.1.0+version:        0.1.1 cabal-version:  >= 1.8 author:         Michael Orlitzky maintainer:	Michael Orlitzky <michael@orlitzky.com>
schema/AutoRacingResultsXML.dtd view
@@ -25,7 +25,7 @@ <!ELEMENT Laps (#PCDATA)> <!ELEMENT NumberOfLaps (#PCDATA)> <!ELEMENT Most_Laps_Leading ( DriverID, Driver, NumberOfLaps )>-<!ELEMENT Race_Information ( TrackLength, Laps, AverageSpeedMPH?, AverageSpeedKPH?, AverageSpeed?, TimeOfRace?, MarginOfVictory?, Cautions?, LeadChanges?, LapLeaders?, Most_Laps_Leading )>+<!ELEMENT Race_Information ( TrackLength, Laps, AverageSpeedMPH?, AverageSpeedKPH?, AverageSpeed?, TimeOfRace?, MarginOfVictory?, Cautions?, LeadChanges?, LapLeaders?, Most_Laps_Leading? )> <!ELEMENT time_stamp (#PCDATA)> <!ELEMENT message ( ( XML_File_ID, heading, category, sport, RaceID, RaceDate, Title, Track_Location, Laps_Remaining, Checkered_Flag, Listing*, Race_Information, time_stamp ) )> <!ELEMENT AverageSpeedMPH (#PCDATA)>
+ schemagen/AutoRacingResultsXML/21777587.xml view
@@ -0,0 +1,1 @@+<?xml version="1.0" standalone="no" ?>
<!DOCTYPE message PUBLIC "-//TSN//DTD Leader 1.0/EN" "AutoRacingResultsXML.dtd">
<message>
<XML_File_ID>21777587</XML_File_ID>
<heading>ASX%BUSCH-FINAL-RESULTS</heading>
<category>Statistics</category>
<sport>NASCAR-B</sport>
<RaceID>1731</RaceID>
<RaceDate>9/13/2014 3:30:00 PM</RaceDate>
<Title>NASCAR - Nationwide - Jimmy John's Freaky Fast 300 - Final Results</Title>
<Track_Location>Chicagoland Speedway - Joliet, IL</Track_Location>
<Laps_Remaining>0</Laps_Remaining>
<Checkered_Flag>False</Checkered_Flag>
<Race_Information>
<TrackLength KPH="2.414">1.5</TrackLength>
<Laps>200</Laps>
</Race_Information>
<time_stamp> September 13, 2014, at 03:36 PM ET </time_stamp>
</message>
src/TSN/Parse.hs view
@@ -184,15 +184,15 @@   --- | The format string for a time_stamp. We keep the leading/trailing---   space so that parseTime and formatTime are inverses are one---   another, even though there is some confusion as to how these two---   functions should behave:+-- | The format string for a time_stamp. We have removed the+--   leading/trailing space so that parseTime and formatTime are NOT+--   inverses of one another. We should be able to rectify this once+--   everything is updated to support time-1.5. See, -- --   <https://ghc.haskell.org/trac/ghc/ticket/9150> -- time_stamp_format :: String-time_stamp_format = " %B %-d, %Y, at " ++ time_format ++ " ET "+time_stamp_format = "%B %-d, %Y, at " ++ time_format ++ " ET"   
src/TSN/Picklers.hs view
@@ -270,8 +270,8 @@ -- --   >>> import Data.Maybe ( fromJust ) --   >>> :{---         let parse_date :: String -> Maybe UTCTime;---         parse_date = parseTime defaultTimeLocale date_format;+--         let parse_date :: String -> Maybe UTCTime+--             parse_date = parseTime defaultTimeLocale date_format --       :} -- --   >>> let dates = [ "1/" ++ (d : "/1970") | d <- ['1'..'9'] ]@@ -474,9 +474,12 @@ xp_time_stamp =   (parse_time_stamp, from_time_stamp) `xpWrapMaybe` xpText   where+    -- | We have to re-pad the time_stamp_format with a leading and+    --   trailing space; see the documentation of 'time_stamp_format'+    --   for more information.     from_time_stamp :: UTCTime -> String     from_time_stamp =-      formatTime defaultTimeLocale time_stamp_format+      formatTime defaultTimeLocale (" " ++ time_stamp_format ++ " ")   
src/TSN/XML/AutoRacingResults.hs view
@@ -46,6 +46,7 @@   xp11Tuple,   xp13Tuple,   xpAttr,+  xpDefault,   xpElem,   xpInt,   xpList,@@ -259,17 +260,27 @@ --   the \"db_\" prefix since our field namer is going to strip of --   everything before the first underscore. --+--   We make the three fields optional because the entire+--   \<Most_Laps_Leading\> is apparently optional (although it is+--   usually present). A 'Nothing' in the XML should get turned into+--   three 'Nothing's in the DB.+-- data MostLapsLeading =   MostLapsLeading {-    db_most_laps_leading_driver_id :: Int,-    db_most_laps_leading_driver :: String,-    db_most_laps_leading_number_of_laps :: Int }+    db_most_laps_leading_driver_id :: Maybe Int,+    db_most_laps_leading_driver :: Maybe String,+    db_most_laps_leading_number_of_laps :: Maybe Int }   deriving (Data, Eq, Show, Typeable)   -- | Database representation of a \<Race_Information\> contained --   within a \<message\>. --+--   The 'db_most_laps_leading' field is not optional because when we+--   convert from our XML representation, a missing 'MostLapsLeading'+--   will be replaced with a 'MostLapsLeading' with three missing+--   fields.+-- data AutoRacingResultsRaceInformation =   AutoRacingResultsRaceInformation {     -- Note the apostrophe to disambiguate it from the@@ -306,7 +317,7 @@     xml_cautions :: Maybe String,     xml_lead_changes :: Maybe String,     xml_lap_leaders :: Maybe String,-    xml_most_laps_leading :: MostLapsLeading }+    xml_most_laps_leading :: Maybe MostLapsLeading }   deriving (Eq,Show)  @@ -345,8 +356,15 @@       db_cautions = xml_cautions,       db_lead_changes = xml_lead_changes,       db_lap_leaders = xml_lap_leaders,-      db_most_laps_leading = xml_most_laps_leading }-+      db_most_laps_leading = most_laps_leading }+    where+      -- If we didn't get a \<Most_Laps_Leading\>, indicate that in+      -- the database with an (embedded) 'MostLapsLeading' with three+      -- missing fields.+      most_laps_leading =+        case xml_most_laps_leading of+          Just mll -> mll+          Nothing  -> MostLapsLeading Nothing Nothing Nothing  -- | This allows us to insert the XML representation --   'AutoRacingResultsRaceInformationXml' directly.@@ -507,24 +525,52 @@   -- | Pickler for the \<Most_Laps_Leading\> child of a---   \<Race_Information\>.+--   \<Race_Information\>. This is complicated by the fact that the+--   three fields we're trying to parse are not actually optional;+--   only the entire \<Most_Laps_Leading\> is. So we always wrap what+--   we parse in a 'Just', and when converting from the DB to XML,+--   we'll drop the entire element if any of its fields are missing+--   (which they never should be). ---pickle_most_laps_leading :: PU MostLapsLeading+pickle_most_laps_leading :: PU (Maybe MostLapsLeading) pickle_most_laps_leading =   xpElem "Most_Laps_Leading" $     xpWrap (from_tuple, to_tuple) $-    xpTriple (xpElem "DriverID" xpInt)-             (xpElem "Driver" xpText)-             (xpElem "NumberOfLaps" xpInt)+    xpTriple (xpOption $ xpElem "DriverID" xpInt)+             (xpOption $ xpElem "Driver" xpText)+             (xpOption $ xpElem "NumberOfLaps" xpInt)   where-    from_tuple = uncurryN MostLapsLeading-    to_tuple m = (db_most_laps_leading_driver_id m,-                  db_most_laps_leading_driver m,-                  db_most_laps_leading_number_of_laps m)+    from_tuple :: (Maybe Int, Maybe String, Maybe Int) -> Maybe MostLapsLeading+    from_tuple (Just x, Just y, Just z) =+      Just $ MostLapsLeading (Just x) (Just y) (Just z)+    from_tuple _ = Nothing +    -- Sure had to go out of my way to avoid the warnings about unused+    -- db_most_laps_foo fields here.+    to_tuple :: Maybe MostLapsLeading -> (Maybe Int, Maybe String, Maybe Int)+    to_tuple Nothing = (Nothing, Nothing, Nothing)+    to_tuple (Just (MostLapsLeading Nothing _ _)) = (Nothing, Nothing, Nothing)+    to_tuple (Just (MostLapsLeading _ Nothing _)) = (Nothing, Nothing, Nothing)+    to_tuple (Just (MostLapsLeading _ _ Nothing)) = (Nothing, Nothing, Nothing)+    to_tuple (Just m) = (db_most_laps_leading_driver_id m,+                         db_most_laps_leading_driver m,+                         db_most_laps_leading_number_of_laps m) + -- | Pickler for the \<Race_Information\> child of \<message\>. --+--   There's so much voodoo going on here. We have a double-layered+--   Maybe on top of the MostLapsLeading. When unpickling, we return a+--   Nothing (i.e. a Maybe MostLapsLeading) if any of its fields are+--   missing. But if the entire element is missing, unpickling+--   fails. 'xpOption' doesn't fix this because it would give us a+--   Maybe (Maybe MostLapsLeading). But we can use 'xpDefault' with a+--   default of (Nothing :: Maybe MostLapsLeading) to stick one in+--   there if unpicking a (Maybe MostLapsLeading) fails because+--   \<Most_Laps_Leading\> is missing.+--+--   Clear as mud, I know.+-- pickle_race_information :: PU AutoRacingResultsRaceInformationXml pickle_race_information =   xpElem "Race_Information" $@@ -544,7 +590,7 @@               (xpOption $ xpElem "Cautions" xpText)               (xpOption $ xpElem "LeadChanges" xpText)               (xpOption $ xpElem "LapLeaders" xpText)-              pickle_most_laps_leading+              (xpDefault Nothing pickle_most_laps_leading)   where     -- Derp. Since the first two are paired, we have to     -- manually unpack the bazillion arguments.@@ -589,7 +635,10 @@           "test/xml/AutoRacingResultsXML.xml",      check "pickle composed with unpickle is the identity (fractional KPH)"-          "test/xml/AutoRacingResultsXML-fractional-kph.xml" ]+          "test/xml/AutoRacingResultsXML-fractional-kph.xml",++    check "pickle composed with unpickle is the identity (No Most_Laps_Leading)"+          "test/xml/AutoRacingResultsXML-no-most-laps-leading.xml"]   where     check desc path = testCase desc $ do       (expected, actual) <- pickle_unpickle pickle_message path@@ -605,7 +654,10 @@           "test/xml/AutoRacingResultsXML.xml",      check "unpickling succeeds (fractional KPH)"-          "test/xml/AutoRacingResultsXML-fractional-kph.xml" ]+          "test/xml/AutoRacingResultsXML-fractional-kph.xml",++    check "unpickling succeeds (no Most_Laps_Leading)"+          "test/xml/AutoRacingResultsXML-no-most-laps-leading.xml" ]   where     check desc path = testCase desc $ do       actual <- unpickleable path pickle_message@@ -623,7 +675,11 @@           "test/xml/AutoRacingResultsXML.xml",      check "deleting auto_racing_results deletes its children (fractional KPH)"-          "test/xml/AutoRacingResultsXML-fractional-kph.xml" ]+          "test/xml/AutoRacingResultsXML-fractional-kph.xml",++    check ("deleting auto_racing_results deletes its children " +++           "(No Most_Laps_Leading)")+          "test/xml/AutoRacingResultsXML-no-most-laps-leading.xml" ]   where     check desc path = testCase desc $ do       results <- unsafe_unpickle path pickle_message
src/TSN/XML/Weather.hs view
@@ -101,7 +101,7 @@ data WeatherForecastListingXml =   WeatherForecastListingXml {     xml_teams :: String,-    xml_weather :: String }+    xml_weather :: Maybe String }   deriving (Eq, Show)  @@ -114,7 +114,7 @@     db_weather_forecasts_id :: DefaultKey WeatherForecast,     db_league_name :: Maybe String,     db_teams :: String,-    db_weather :: String }+    db_weather :: Maybe String }   -- | We don't make 'WeatherForecastListingXml' an instance of@@ -247,7 +247,7 @@     db_away_team :: String,     db_home_team :: String,     db_weather_type :: Int,-    db_description :: String,+    db_description :: Maybe String,     db_temp_adjust :: Maybe String,     db_temperature :: Int } @@ -263,7 +263,7 @@     xml_away_team :: String,     xml_home_team :: String,     xml_weather_type :: Int,-    xml_description :: String,+    xml_description :: Maybe String,     xml_temp_adjust :: Maybe String,     xml_temperature :: Int }   deriving (Eq, Show)@@ -506,8 +506,9 @@     xpWrap (from_pair, to_pair) $       xpPair         (xpElem "teams" xpText)-        (xpElem "weather" xpText)+        (xpElem "weather" (xpOption xpText))   where+--    from_pair (ts, Nothing) = WeatherForecastListingXml ts (Just "")     from_pair = uncurry WeatherForecastListingXml     to_pair WeatherForecastListingXml{..} = (xml_teams, xml_weather) @@ -554,7 +555,7 @@              (xpElem "AwayTeam" xpText)              (xpElem "HomeTeam" xpText)              (xpElem "WeatherType" xpInt)-             (xpElem "Description" xpText)+             (xpElem "Description" (xpOption xpText))              (xpElem "TempAdjust" (xpOption xpText))              (xpElem "Temperature" xpInt)   where@@ -660,7 +661,9 @@   [ check "unpickling succeeds"           "test/xml/weatherxml.xml",     check "unpickling succeeds (detailed)"-          "test/xml/weatherxml-detailed.xml" ]+          "test/xml/weatherxml-detailed.xml",+    check "unpickling succeeds (empty weather)"+          "test/xml/weatherxml-empty-weather.xml"]   where     check desc path = testCase desc $ do       actual <- unpickleable path pickle_message@@ -676,7 +679,9 @@   [ check "deleting weather deletes its children"           "test/xml/weatherxml.xml",     check "deleting weather deletes its children (detailed)"-          "test/xml/weatherxml-detailed.xml" ]+          "test/xml/weatherxml-detailed.xml",+    check "deleting weather deletes its children (empty weather)"+          "test/xml/weatherxml-empty-weather.xml"]   where     check desc path = testCase desc $ do       weather <- unsafe_unpickle path pickle_message@@ -712,6 +717,9 @@             True,       check "test/xml/weatherxml-detailed.xml"             "first type detected correctly (detailed)"+            True,+      check "test/xml/weatherxml-empty-weather.xml"+            "first type detected correctly (empty weather)"             True,       check "test/xml/weatherxml-type2.xml"             "second type detected correctly"
test/shell/import-duplicates.test view
@@ -16,15 +16,15 @@ # and a newsxml that aren't really supposed to import. find ./test/xml -maxdepth 1 -name '*.xml' | wc -l >>>-30+32 >>>= 0  # Run the imports again; we should get complaints about the duplicate-# xml_file_ids. There are 2 errors for each violation, so we expect 2*26+# xml_file_ids. There are 2 errors for each violation, so we expect 2*28 # occurrences of the string 'ERROR'. ./dist/build/htsn-import/htsn-import -c 'shelltest.sqlite3' test/xml/*.xml 2>&1 | grep ERROR | wc -l >>>-52+56 >>>= 0  # Finally, clean up after ourselves.
+ test/xml/AutoRacingResultsXML-no-most-laps-leading.xml view
@@ -0,0 +1,1 @@+<?xml version="1.0" standalone="no" ?>
<!DOCTYPE message PUBLIC "-//TSN//DTD Leader 1.0/EN" "AutoRacingResultsXML.dtd">
<message>
<XML_File_ID>21777587</XML_File_ID>
<heading>ASX%BUSCH-FINAL-RESULTS</heading>
<category>Statistics</category>
<sport>NASCAR-B</sport>
<RaceID>1731</RaceID>
<RaceDate>9/13/2014 3:30:00 PM</RaceDate>
<Title>NASCAR - Nationwide - Jimmy John's Freaky Fast 300 - Final Results</Title>
<Track_Location>Chicagoland Speedway - Joliet, IL</Track_Location>
<Laps_Remaining>0</Laps_Remaining>
<Checkered_Flag>False</Checkered_Flag>
<Race_Information>
<TrackLength KPH="2.414">1.5</TrackLength>
<Laps>200</Laps>
</Race_Information>
<time_stamp> September 13, 2014, at 03:36 PM ET </time_stamp>
</message>
test/xml/AutoRacingResultsXML.dtd view
@@ -25,7 +25,7 @@ <!ELEMENT Laps (#PCDATA)> <!ELEMENT NumberOfLaps (#PCDATA)> <!ELEMENT Most_Laps_Leading ( DriverID, Driver, NumberOfLaps )>-<!ELEMENT Race_Information ( TrackLength, Laps, AverageSpeedMPH?, AverageSpeedKPH?, AverageSpeed?, TimeOfRace?, MarginOfVictory?, Cautions?, LeadChanges?, LapLeaders?, Most_Laps_Leading )>+<!ELEMENT Race_Information ( TrackLength, Laps, AverageSpeedMPH?, AverageSpeedKPH?, AverageSpeed?, TimeOfRace?, MarginOfVictory?, Cautions?, LeadChanges?, LapLeaders?, Most_Laps_Leading? )> <!ELEMENT time_stamp (#PCDATA)> <!ELEMENT message ( ( XML_File_ID, heading, category, sport, RaceID, RaceDate, Title, Track_Location, Laps_Remaining, Checkered_Flag, Listing*, Race_Information, time_stamp ) )> <!ELEMENT AverageSpeedMPH (#PCDATA)>
+ test/xml/weatherxml-empty-weather.xml view
@@ -0,0 +1,1 @@+<?xml version="1.0" standalone="no" ?>
<!DOCTYPE message PUBLIC "-//TSN//DTD Weather 1.0/EN" "weatherxml.dtd">
<message>
<XML_File_ID>21812233</XML_File_ID>
<heading>AAW%BBWEATHER</heading>
<category>Weather</category>
<sport>MLB</sport>
<title>Major League Baseball Weather from The Sports Network</title>
<forecast gamedate="Thursday, September 18th">
<league name="National League">
<listing>
<teams>Washington Nationals at Miami Marlins, 7:10 p.m.</teams>
<weather>Partly cloudy with a 60-percent chance of rain. Winds blowing in from right  field at 5-10 m.p.h.  Game-time temperature: Around 80.</weather>
</listing>
<listing>
<teams>Los Angeles Dodgers at Chicago Cubs, 8:05 p.m.</teams>
<weather>Clear. Winds blowing in from center field at 5-10 m.p.h.  Game-time temperature: Around 60.</weather>
</listing>
<listing>
<teams>Milwaukee Brewers at St. Louis Cardinals, 8:15 p.m.</teams>
<weather>Clear. Winds blowing in from center field at 5-10 m.p.h.  Game-time temperature: Around 70.</weather>
</listing>
<listing>
<teams>Arizona Diamondbacks at Colorado Rockies, 8:40 p.m.</teams>
<weather>Clear. Winds blowing out to left field at 10-15 m.p.h.  Game-time temperature: Around 85.</weather>
</listing>
<listing>
<teams>Philadelphia Phillies at San Diego Padres, 9:10 p.m.</teams>
<weather>Partly cloudy. Winds blowing in from left field at 10-15 m.p.h.  Game-time temperature: Around 75.</weather>
</listing>
</league>
<league name="Interleague">
<listing>
<teams>Boston Red Sox at Pittsburgh Pirates, 7:05 p.m.</teams>
<weather>Partly cloudy. Winds blowing out to right field at 5-10 m.p.h.  Game-time temperature: Around 65.</weather>
</listing>
</league>
<league name="American League">
<listing>
<teams>Texas Rangers at Oakland Athletics, 3:35 p.m.</teams>
<weather>Cloudy with a 40-percent chance of rain. Winds blowing out to center field at  5-10 m.p.h.  Game-time temperature: Around 70.</weather>
</listing>
<listing>
<teams>Toronto Blue Jays at New York Yankees, 7:05 p.m.</teams>
<weather>Partly cloudy. Winds blowing out to right field at 5-10 m.p.h.  Game-time temperature: Around 70.</weather>
</listing>
<listing>
<teams>Cleveland Indians at Houston Astros, 8:10 p.m.</teams>
<weather>Partly cloudy with a 70-percent chance of rain. Winds blowing out to left  field at 5-10 m.p.h.  Game-time temperature: Around 80.</weather>
</listing>
<listing>
<teams>Seattle Mariners at LA Angels of Anaheim, 10:05 p.m.</teams>
<weather>Clear. Winds blowing out to left field at 5-10 m.p.h.  Game-time temperature: Around 80.</weather>
</listing>
</league>
</forecast>
<forecast gamedate="Monday, September 22nd">
<league name="">
<listing>
<teams>Cleveland Indians at Kansas City Royals, 6:05 p.m.</teams>
<weather></weather>
</listing>
</league>
</forecast>
<Detailed_Weather>
<DW_Listing SportCode="AA" Sport="MLB">
<Item>
<Sportcode>AA</Sportcode>
<GameID>41428</GameID>
<Gamedate>9/18/2014 7:10:00 PM</Gamedate>
<AwayTeam>Washington Nationals</AwayTeam>
<HomeTeam>Miami Marlins</HomeTeam>
<WeatherType>2</WeatherType>
<Description>Partly cloudy with a 60-percent chance of rain. Winds blowing in from right field at 5-10 m.p.h.</Description>
<TempAdjust>Around</TempAdjust>
<Temperature>80</Temperature>
</Item>
<Item>
<Sportcode>AA</Sportcode>
<GameID>41430</GameID>
<Gamedate>9/18/2014 8:05:00 PM</Gamedate>
<AwayTeam>Los Angeles Dodgers</AwayTeam>
<HomeTeam>Chicago Cubs</HomeTeam>
<WeatherType>10</WeatherType>
<Description>Clear. Winds blowing in from center field at 5-10 m.p.h.</Description>
<TempAdjust>Around</TempAdjust>
<Temperature>60</Temperature>
</Item>
<Item>
<Sportcode>AA</Sportcode>
<GameID>41431</GameID>
<Gamedate>9/18/2014 8:15:00 PM</Gamedate>
<AwayTeam>Milwaukee Brewers</AwayTeam>
<HomeTeam>St. Louis Cardinals</HomeTeam>
<WeatherType>10</WeatherType>
<Description>Clear. Winds blowing in from center field at 5-10 m.p.h.</Description>
<TempAdjust>Around</TempAdjust>
<Temperature>70</Temperature>
</Item>
<Item>
<Sportcode>AA</Sportcode>
<GameID>41433</GameID>
<Gamedate>9/18/2014 8:40:00 PM</Gamedate>
<AwayTeam>Arizona Diamondbacks</AwayTeam>
<HomeTeam>Colorado Rockies</HomeTeam>
<WeatherType>10</WeatherType>
<Description>Clear. Winds blowing out to left field at 10-15 m.p.h.</Description>
<TempAdjust>Around</TempAdjust>
<Temperature>85</Temperature>
</Item>
<Item>
<Sportcode>AA</Sportcode>
<GameID>41432</GameID>
<Gamedate>9/18/2014 9:10:00 PM</Gamedate>
<AwayTeam>Philadelphia Phillies</AwayTeam>
<HomeTeam>San Diego Padres</HomeTeam>
<WeatherType>2</WeatherType>
<Description>Partly cloudy. Winds blowing in from left field at 10-15 m.p.h.</Description>
<TempAdjust>Around</TempAdjust>
<Temperature>75</Temperature>
</Item>
<Item>
<Sportcode>AA</Sportcode>
<GameID>41429</GameID>
<Gamedate>9/18/2014 7:05:00 PM</Gamedate>
<AwayTeam>Boston Red Sox</AwayTeam>
<HomeTeam>Pittsburgh Pirates</HomeTeam>
<WeatherType>2</WeatherType>
<Description>Partly cloudy. Winds blowing out to right field at 5-10 m.p.h.</Description>
<TempAdjust>Around</TempAdjust>
<Temperature>65</Temperature>
</Item>
<Item>
<Sportcode>AA</Sportcode>
<GameID>41426</GameID>
<Gamedate>9/18/2014 3:35:00 PM</Gamedate>
<AwayTeam>Texas Rangers</AwayTeam>
<HomeTeam>Oakland Athletics</HomeTeam>
<WeatherType>3</WeatherType>
<Description>Cloudy with a 40-percent chance of rain. Winds blowing out to center field at 5-10 m.p.h.</Description>
<TempAdjust>Around</TempAdjust>
<Temperature>70</Temperature>
</Item>
<Item>
<Sportcode>AA</Sportcode>
<GameID>41424</GameID>
<Gamedate>9/18/2014 7:05:00 PM</Gamedate>
<AwayTeam>Toronto Blue Jays</AwayTeam>
<HomeTeam>New York Yankees</HomeTeam>
<WeatherType>2</WeatherType>
<Description>Partly cloudy. Winds blowing out to right field at 5-10 m.p.h.</Description>
<TempAdjust>Around</TempAdjust>
<Temperature>70</Temperature>
</Item>
<Item>
<Sportcode>AA</Sportcode>
<GameID>41425</GameID>
<Gamedate>9/18/2014 8:10:00 PM</Gamedate>
<AwayTeam>Cleveland Indians</AwayTeam>
<HomeTeam>Houston Astros</HomeTeam>
<WeatherType>2</WeatherType>
<Description>Partly cloudy with a 70-percent chance of rain. Winds blowing out to left field at 5-10 m.p.h.</Description>
<TempAdjust>Around</TempAdjust>
<Temperature>80</Temperature>
</Item>
<Item>
<Sportcode>AA</Sportcode>
<GameID>41427</GameID>
<Gamedate>9/18/2014 10:05:00 PM</Gamedate>
<AwayTeam>Seattle Mariners</AwayTeam>
<HomeTeam>LA Angels of Anaheim</HomeTeam>
<WeatherType>10</WeatherType>
<Description>Clear. Winds blowing out to left field at 5-10 m.p.h.</Description>
<TempAdjust>Around</TempAdjust>
<Temperature>80</Temperature>
</Item>
<Item>
<Sportcode>AA</Sportcode>
<GameID>41180</GameID>
<Gamedate>9/22/2014 6:05:00 PM</Gamedate>
<AwayTeam>Cleveland Indians</AwayTeam>
<HomeTeam>Kansas City Royals</HomeTeam>
<WeatherType>11</WeatherType>
<Description></Description>
<TempAdjust></TempAdjust>
<Temperature>0</Temperature>
</Item>
</DW_Listing>
<DW_Listing SportCode="AB" Sport="NFL">
<Item>
<Sportcode>AB</Sportcode>
<GameID>4631</GameID>
<Gamedate>9/18/2014 8:25:00 PM</Gamedate>
<AwayTeam>Tampa Bay Buccaneers</AwayTeam>
<HomeTeam>Atlanta Falcons</HomeTeam>
<WeatherType>11</WeatherType>
<Description>Game is being played inside a dome.</Description>
<TempAdjust></TempAdjust>
<Temperature>0</Temperature>
</Item>
</DW_Listing>
<DW_Listing SportCode="AJ" Sport="CFL">
<Item>
<Sportcode>AJ</Sportcode>
<GameID>1247</GameID>
<Gamedate>9/19/2014 10:00:00 PM</Gamedate>
<AwayTeam>Toronto Argonauts</AwayTeam>
<HomeTeam>British Columbia Lions</HomeTeam>
<WeatherType>2</WeatherType>
<Description>Partly cloudy. Winds southeast at 5-10 m.p.h.</Description>
<TempAdjust>Near</TempAdjust>
<Temperature>65</Temperature>
</Item>
</DW_Listing>
<DW_Listing SportCode="AF" Sport="CFOOT">
<Item>
<Sportcode>AF</Sportcode>
<GameID>42695</GameID>
<Gamedate>9/18/2014 7:30:00 PM</Gamedate>
<AwayTeam>Auburn</AwayTeam>
<HomeTeam>Kansas State</HomeTeam>
<WeatherType>2</WeatherType>
<Description>Partly cloudy. Winds southeast at 10-15 m.p.h.</Description>
<TempAdjust>Around</TempAdjust>
<Temperature>75</Temperature>
</Item>
<Item>
<Sportcode>AF</Sportcode>
<GameID>44032</GameID>
<Gamedate>9/19/2014 8:00:00 PM</Gamedate>
<AwayTeam>Connecticut</AwayTeam>
<HomeTeam>So Florida</HomeTeam>
<WeatherType>2</WeatherType>
<Description>Partly cloudy with a 50-percent chance of rain. Winds northeast at 5-10 m.p.h.</Description>
<TempAdjust>Around</TempAdjust>
<Temperature>80</Temperature>
</Item>
</DW_Listing>
</Detailed_Weather>
<time_stamp> September 18, 2014, at 09:19 AM ET </time_stamp>
</message>