Skip to content

Get Period Name (API v3)

Ihor Komar edited this page Mar 21, 2023 · 2 revisions

Getting period name using REST endpoint

  1. Send REST request to the following endpoint: https://api-mst.oddsmarket.org/v1/periodName?identifier={periodIdentifier}&sportId={sportId}.

  2. periodIdentifier value should be taken from the Odd object in the WebSocket feed. SportId value should be taken from bookmakerEvent.

  3. You will get the periodName value in the response as plain response body text.

Examples

Input: periodIdentifier Input: sportId Result: periodName
0 7 (Soccer) match
0 6 (Hockey) regular time
2 7 (Soccer) 2 time
2 6 (Hockey) 2 period

Table of period names and identifiers by each sport

Up-to-date table of periods is maintained in the document below:

https://docs.google.com/spreadsheets/d/1m_o1cPBYmoifL9hVRDzGeFsR07AC7yncuokSK-DGQxc/edit?usp=sharing

Algorithmic period name generation

The method for converting identifier + sportId in periodName presented below (JAVA):

    /**
     * Convert period identifier and sportId into human-readable period name in english
     *
     * @param period                     period code
     * @param sportId                    sport ID
     * @param renderOmissiblePeriodNames always include "match" period name even if it can be omitted.
     *                                   This parameter value is always true when used on oddsmarket.
     * @return human-readable period name
     */
    public static String periodName(int period, long sportId, boolean renderOmissiblePeriodNames) {
        if (period == -100)
            return "to qualify";

        // Periods for Yellow Cards in Soccer, groups by 3 (0 - match, 1-2 - halves) with offset -3, meaning different
        // groups of rules for payout calculation at different bookies
        if (period >= -19 && period <= -5)
            period = (1000 + period) % 3;

        // -2: Overtime + ShotOuts
        if (period == -2) {
            if (sportId == Sport.Hockey.id || sportId == Sport.BeachSoccer.id || sportId == Sport.EHockey.id) {
                return "with overtime and shootouts";
            } else {
                return "match";
            }
            // -3: Entire match in tennis for supersets (period is introduced for a group of bookies which are using
            // different rules for super tiebreak in pairs tennis matches)
        } else if (period == -3) {
            return "match (superset)";
            // -1: with Overtime (for sports like Basketball / American football, where overtime is possible)
        } else if (period == -1) {
            if (sportId == Sport.Tennis.id || sportId == Sport.TableTennis.id || sportId == Sport.ETennis.id) {
                if (renderOmissiblePeriodNames) {
                    return "match";
                } else {
                    return "no_desc";
                }
            } else {
                return "with overtime";
            }
        } else if (period == 0) {
            if (sportId == Sport.Baseball.id ||
                    sportId == Sport.Soccer.id ||
                    sportId == Sport.Tennis.id ||
                    sportId == Sport.Volleyball.id ||
                    sportId == Sport.Snooker.id ||
                    sportId == Sport.Darts.id ||
                    sportId == Sport.TableTennis.id ||
                    sportId == Sport.Badminton.id ||
                    sportId == Sport.ESports.id ||
                    sportId == Sport.BeachVolleyball.id) {
                if (renderOmissiblePeriodNames) {
                    return "match";
                } else {
                    return "no_desc";
                }
            } else {
                return "regular time";
            }
        } else {
            if (sportId == Sport.Snooker.id) {
                return period + " frame";
            } else if (sportId == Sport.Curling.id) {
                return period + " end";
            } else if (sportId == Sport.ESports.id) {
                if (period > 100) {
                    int map = period / 100;
                    int round = period - map * 100;
                    return map + " map " + round + " round";
                } else {
                    return period + " map";
                }
            } else if (sportId == Sport.Tennis.id ||
                    sportId == Sport.Volleyball.id ||
                    sportId == Sport.TableTennis.id ||
                    sportId == Sport.Badminton.id ||
                    sportId == Sport.BeachVolleyball.id ||
                    sportId == Sport.Darts.id ||
                    sportId == Sport.Squash.id ||
                    sportId == Sport.KungVolleyball.id ||
                    sportId == Sport.ETennis.id) {
                if (period > 100) {
                    int set = period / 100;
                    int game = period - set * 100;
                    return set + " set " + game + " game";
                } else {
                    return period + " set";
                }
            } else if (sportId == Sport.Hockey.id ||
                    sportId == Sport.BeachSoccer.id ||
                    sportId == Sport.Floorball.id ||
                    sportId == Sport.EHockey.id) {
                return period + " period";
            } else if (sportId == Sport.Soccer.id || sportId == Sport.ESoccer.id) {
                return period + " time";
            } else if (sportId == Sport.Baseball.id ||
                    sportId == Sport.Basketball.id ||
                    sportId == Sport.AmericanFootball.id ||
                    sportId == Sport.WaterPolo.id ||
                    sportId == Sport.FieldHockey.id ||
                    sportId == Sport.AFL.id ||
                    sportId == Sport.Netball.id ||
                    sportId == Sport.EBasketball.id) {
                if (period == 10 || period == 20) {
                    return (period / 10) + " half";
                } else {
                    return sportId == Sport.Baseball.id ? period + " inning" : period + " quarter";
                }
            } else if (sportId == Sport.Chess.id) {
                return period + " game";
            } else {
                return period + " half";
            }
        }
    }

You can download latest version of the above method or include it into your codebase as dependency. See compiled periods JAR file with sources.

Clone this wiki locally