live-soccer-tables
Projects

Live Soccer Tables WordPress Plugin

Live Soccer Tables is a WordPress plugin that I developed to get a good idea of how to take a WordPress plugin from concept to production. The plugin allows users to add a shortcode to their WordPress website and instantly get the current standings of the most popular soccer leagues around the globe. The plugin fetches data from many sources and compiles them together using NodeJS, this then creates an endpoint for the PHP code to grab the data based on the league name.

In the future Live Soccer Tables will allow you to specify a particular year so you can get historical data that can be inserted in to articles an pages.

Below are some examples of what the plugin has to offer, plus a lot more.

English Premier League Football Table

POS Club P W D L GF GA GD PTS
1 Liverpool 23 19 3 1 54 13 41 60
2 Manchester City 23 18 2 3 62 17 45 56
3 Tottenham Hotspur 23 17 0 6 48 23 25 51
4 Chelsea 23 14 5 4 40 19 21 47
5 Arsenal 23 13 5 5 48 32 16 44
6 Manchester United 23 13 5 5 46 33 13 44
7 Watford 23 9 6 8 32 32 0 33
8 Wolverhampton Wanderers 23 9 5 9 27 31 -4 32
9 Leicester City 23 9 4 10 29 29 0 31
10 West Ham United 23 9 4 10 30 34 -4 31
11 Everton 23 8 6 9 34 33 1 30
12 Bournemouth 23 9 3 11 33 42 -9 30
13 Brighton & Hove Albion 23 7 5 11 25 32 -7 26
14 Crystal Palace 23 6 4 13 23 32 -9 22
15 Southampton 23 5 7 11 25 40 -15 22
16 Burnley 23 6 4 13 23 43 -20 22
17 Newcastle United 23 5 6 12 19 31 -12 21
18 Cardiff City 23 5 4 14 19 44 -25 19
19 Fulham 23 3 5 15 21 51 -30 14
20 Huddersfield Town 23 2 5 16 13 40 -27 11
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}

Scottish Premiership Football Table

POS Club P W D L GF GA GD PTS
1 Celtic 20 13 3 4 46 14 32 42
2 Rangers 21 12 6 3 43 16 27 42
3 Kilmarnock 21 12 5 4 32 20 12 41
4 Aberdeen 21 12 3 6 34 24 10 39
5 St Johnstone 20 10 4 6 25 24 1 34
6 Hearts 21 10 4 7 25 26 -1 34
7 Hibernian 21 7 9 5 30 21 9 30
8 Livingston 21 8 6 7 26 19 7 30
9 Motherwell 21 6 3 12 20 33 -13 21
10 Hamilton Academical 21 4 2 15 14 43 -29 14
11 St Mirren 21 3 3 15 15 39 -24 12
12 Dundee 21 2 4 15 15 46 -31 10
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}

Spanish La Liga Football Table

POS Club P W D L GF GA GD PTS
1 Barcelona 20 13 5 2 54 21 33 44
2 Atletico Madrid 20 11 8 1 30 13 17 41
3 Real Madrid 20 11 3 6 30 24 6 36
4 Sevilla 20 9 6 5 31 22 9 33
5 Alaves 20 9 5 6 22 23 -1 32
6 Getafe 20 8 7 5 25 16 9 31
7 Real Betis 20 8 5 7 25 25 0 29
8 Valencia 20 5 11 4 19 18 1 26
9 Real Sociedad 20 7 5 8 25 24 1 26
10 Levante 20 7 5 8 32 35 -3 26
11 Girona 20 5 9 6 23 26 -3 24
12 Espanyol 19 7 3 9 21 27 -6 24
13 Leganes 20 5 8 7 18 22 -4 23
14 Athletic Bilbao 20 4 11 5 21 26 -5 23
15 Real Valladolid 20 5 7 8 17 23 -6 22
16 Eibar 19 5 7 7 21 28 -7 22
17 Celta Vigo 20 5 6 9 32 34 -2 21
18 Rayo Vallecano 20 5 5 10 24 36 -12 20
19 Villarreal 20 3 9 8 21 26 -5 18
20 Huesca 20 2 5 13 17 39 -22 11
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}

German Bundesliga Football Table

POS Club P W D L GF GA GD PTS
1 Borussia Dortmund 18 14 3 1 45 18 27 45
2 Bayern Munich 18 12 3 3 39 19 20 39
3 Borussia Monchengladbach 18 11 3 4 37 18 19 36
4 RB Leipzig 18 9 4 5 31 18 13 31
5 Eintracht Frankfurt 18 9 3 6 37 24 13 30
6 Wolfsburg 18 8 4 6 28 24 4 28
7 Hertha Berlin 18 7 6 5 29 28 1 27
8 Hoffenheim 18 6 7 5 33 26 7 25
9 Werder Bremen 18 7 4 7 29 29 0 25
10 Bayer Leverkusen 18 7 3 8 26 30 -4 24
11 Mainz 05 18 6 6 6 20 24 -4 24
12 Schalke 04 18 6 3 9 22 25 -3 21
13 Freiburg 18 5 6 7 22 28 -6 21
14 Fortuna Dusseldorf 18 6 3 9 21 34 -13 21
15 Augsburg 18 3 6 9 26 31 -5 15
16 Stuttgart 18 4 2 12 14 38 -24 14
17 Hannover 18 2 5 11 17 36 -19 11
18 Nuremberg 18 2 5 11 15 41 -26 11
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}

French Ligae 1 Football Table

POS Club P W D L GF GA GD PTS
1 Paris Saint-Germain 19 17 2 0 56 10 46 53
2 Lille 21 12 4 5 34 21 13 40
3 Saint-Etienne 21 11 6 4 32 23 9 39
4 Lyon 21 9 7 5 33 25 8 34
5 Strasbourg 21 8 8 5 37 25 12 32
6 Montpellier HSC 20 8 8 4 26 16 10 32
7 Marseille 20 9 4 7 33 29 4 31
8 Rennes 21 8 6 7 29 27 2 30
9 Reims 21 7 9 5 17 19 -2 30
10 Nice 21 8 6 7 15 19 -4 30
11 Bordeaux 20 7 7 6 23 22 1 28
12 Nimes 20 7 5 8 27 29 -2 26
13 Toulouse 21 6 7 8 21 31 -10 25
14 Nantes 21 6 5 10 26 28 -2 23
15 Angers 20 5 8 7 22 24 -2 23
16 Caen 21 3 9 9 20 29 -9 18
17 Amiens 21 5 3 13 18 36 -18 18
18 Dijon 20 4 5 11 17 33 -16 17
19 Monaco 21 3 6 12 19 36 -17 15
20 Guingamp 21 3 5 13 16 39 -23 14
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}

Australian League Football Table

POS Club P W D L GF GA GD PTS
1 Perth Glory 14 10 3 1 31 16 15 33
2 Melbourne Victory 15 9 3 3 34 18 16 30
3 Sydney FC 14 9 2 3 27 17 10 29
4 Melbourne City 14 7 3 4 17 12 5 24
5 Wellington Phoenix 14 6 5 3 23 20 3 23
6 Adelaide United 14 6 4 4 19 16 3 22
7 Newcastle Jets 14 3 3 8 14 20 -6 12
8 Western Sydney Wanderers 14 2 3 9 18 29 -11 9
9 Brisbane Roar 15 1 5 9 16 32 -16 8
10 Central Coast Mariners 14 1 3 10 15 34 -19 6
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}
{{pos_1}} {{name_1}} {{play_1}} {{gd_1}} {{pts_1}}
{{pos_2}} {{name_2}} {{play_2}} {{gd_2}} {{pts_2}}
{{pos_3}} {{name_3}} {{play_3}} {{gd_3}} {{pts_3}}
{{pos_4}} {{name_4}} {{play_4}} {{gd_4}} {{pts_4}}
{{pos_5}} {{name_5}} {{play_5}} {{gd_5}} {{pts_5}}
{{pos_6}} {{name_6}} {{play_6}} {{gd_6}} {{pts_6}}
{{pos_7}} {{name_7}} {{play_7}} {{gd_7}} {{pts_7}}
{{pos_8}} {{name_8}} {{play_8}} {{gd_8}} {{pts_8}}
{{pos_9}} {{name_9}} {{play_9}} {{gd_9}} {{pts_9}}
{{pos_10}} {{name_10}} {{play_10}} {{gd_10}} {{pts_10}}
{{pos_11}} {{name_11}} {{play_11}} {{gd_11}} {{pts_11}}
{{pos_12}} {{name_12}} {{play_12}} {{gd_12}} {{pts_12}}
{{pos_13}} {{name_13}} {{play_13}} {{gd_13}} {{pts_13}}
{{pos_14}} {{name_14}} {{play_14}} {{gd_14}} {{pts_14}}
{{pos_15}} {{name_15}} {{play_15}} {{gd_15}} {{pts_15}}
{{pos_16}} {{name_16}} {{play_16}} {{gd_16}} {{pts_16}}
{{pos_17}} {{name_17}} {{play_17}} {{gd_17}} {{pts_17}}
{{pos_18}} {{name_18}} {{play_18}} {{gd_18}} {{pts_18}}
{{pos_19}} {{name_19}} {{play_19}} {{gd_19}} {{pts_19}}
{{pos_20}} {{name_20}} {{play_20}} {{gd_20}} {{pts_20}}
{{pos_21}} {{name_21}} {{play_21}} {{gd_21}} {{pts_21}}
{{pos_22}} {{name_22}} {{play_22}} {{gd_22}} {{pts_22}}
{{pos_23}} {{name_23}} {{play_23}} {{gd_23}} {{pts_23}}
{{pos_24}} {{name_24}} {{play_24}} {{gd_24}} {{pts_24}}
{{pos_25}} {{name_25}} {{play_25}} {{gd_25}} {{pts_25}}
{{pos_26}} {{name_26}} {{play_26}} {{gd_26}} {{pts_26}}
{{pos_27}} {{name_27}} {{play_27}} {{gd_27}} {{pts_27}}
{{pos_28}} {{name_28}} {{play_28}} {{gd_28}} {{pts_28}}
{{pos_29}} {{name_29}} {{play_29}} {{gd_29}} {{pts_29}}
{{pos_30}} {{name_30}} {{play_30}} {{gd_30}} {{pts_30}}
themeforest-enhancement-suite
Projects

Themeforest Enhancement Suite

Themeforest Enhancement Suite is a small script I wrote to help me understand how google chrome extensions work.

This extension allows you to see a preview of wordpress template images that are available on Themeforest.com. Initially this plugin loaded the webpage associated with the template and grabbed the available preview images, this was found to be slow and not very friendly to the Themeforest web servers, so now I have it set up to grab some hidden urls associated with the template itself and load only that one image.

There is some updates that have to be done to this extension but it was a good exercise in developing and releasing a google chrome extension.

Have a look at the extension here

Projects

Sportdec.com

Working on sportdec our team was tasked with creating an online sports statistics, news and betting application for Android and iOS.

This product was one of the most challenging projects I have worked on, we had to take everything that was learned on previous applications and condense that down to a mobile friendly platform.

Technologies and techniques used in this project where as follows:

Cordova

Cordova was essential to getting this product “on the shelves” as quick as possible, It allowed us to leverage our extensive javascript skills to get a project from concept to production in only a short few months and also allowed us to leverage some of the great features that are available to native mobile applications.

Ionic

Ionic was extremely helpful and meant we didn’t need to worry about spending too much time on layout and design from the get go. Ionic was also extremely helpful when it came to our designers conforming to a style guide when building for a mobile platform. This was one of our first major mobile applications and it couldn’t have gone smoother, going from design to concept was seamless.

AngularJS

We decided to move away from BackboneJS in this project as we felt AngularJS had gone through enough iterations to be extremely stable. A strong pull that Angular had on our team was its management of binding data between the factory, controller and the DOM. Using the binding that was available to us in AngularJS allowed us to worry more about the front end controller logic rather than hacking together binding logic.

We inevitably ran in to some walls with angular, one of which was the reason we started using it and that was the data binding functions. Due to the amount of data we had on some of the pages sometimes thousands of objects which pretty much ate up all the resources available to the mobile browser. In some cases we had over 3000 watchers on a single page which meant we spent a number of days refactoring our code to display just the necessities, this number was eventually brought down to the hundreds rather than the thousands. This lead to serious improvements in the applications performances both when idle and under heavy load.

Pubnub

Pubnub was used to make sure the data coming from our servers to the user was very low latency. With this kind of product during a live match we could see close to a thousand changes to the front end every minute, with match data, news and sportsbook market changes. Pubnub allowed us to keep a very high SLA compared to using our own implementation of open sockets, which would cost more time in development as it would need to be scaled for our quite complex tasks.

Ongoing Project

Sportdec have a lot of interesting ideas coming up in the future and I hope to be supporting them along the way.

beanbagsports.com
Projects

Beanbagsports.com

Working with the Beanbagsports.com team we were tasked with building an online sportsbook with an element of social media and social networking.

I cant get in to too much detail related to this product due to a signed NDA but I can give a brief outline of the technology used for this project

BackboneJS / MarionetteJS

Using the BackboneJS framework allowed us to create a large single page application that updated dynamically and at the time was the most responsive online sportsbook at the time, since then many other sportsbooks have started using javascript frameworks to create single page applications.

NodeJS

We used NodeJS to interact with third party API’s which allowed us to create extremely low latency between our front end and our Mongo databases. We found this to be the best option as we had to parse less data and could move services from server to client side.

MongoDB

MongoDB was used to track historical changes in the market parsing service, this was used due to data differences in markets and events. Within the gambling industry markets are dropped and created every second, having a database that could handle this with ease was imperitive.

PHP/Yii

PHP with the Yii framework was used to serve our customer facing API’s, we decided to use this technology as we had a strong skill level within the team and we didn’t feel node was mature enough to handle all the necessary requirements that was needed to provide the customer.

MySQL

MySQL was used for situations where low latency was not so much of an issue but tracking historical changes was a must. From tracking customers betting history to storing there account details. We felt this was more robust for this kind of data at the time and is still in use today.

crime.ie
Projects

Crime.ie

Crime.ie was a personal project that I worked on for over two years which had relatively good success as my first major web venture.

Crime.ie was a place for Irish citizens to get up to date information on criminal news in Ireland, we also covered such things as missing persons and Police alerts. At its peak Crime.ie had over 250k views per month and was ran out of a passion to keep users informed of news that was usually sensationalised. During the time I worked on Crime.ie I had alot of young journalists come through it’s doors that have gone on to do great things which include working for major Irish papers, getting front page articles and also an impressive “Virtual Nomad”.

I attribute a lot of my tech success to this project as is thought me some of the following skills

  • People Management
  • Dealing with sensitive issues
  • Dealing with people in a sensitive manor mainly victims of crime
  • Selling a product to potential advertisers
  • Creating a good relationship with many sources

 

Notable tech challenges that I overcame while working on this project

  • Working with Linux servers
  • Working with web traffic spikes
  • Working with Amazon EC2
  • MySQL Database maintenance
  • Rewriting poor wordpress plugin and theme code bases
  • Developing stable WordPress plugins

 

gallops-3
Projects

Gallops Live

Gallops Live was an online social network and gambling platform for people interested in all things horse racing.

GL was mainly targeted at the UK/Ireland market and worked closely with Boylesports to provide a betting platform to their customers.

Coming in quite late to GL I was tasked with creating an application within the website that allowed users to sign up to a subscription tipping service which ran weekly and was written by there tipsters.

The business requirements for this project were as follows:

  • Create an online subscription service
  • Allow users to to pay daily/weekly/monthly/yearly
  • Ensure registered users are tracked dynamically
  • Ensure users are alerted when there subscription was coming to an end
  • Ensure management was automatically alerted upon user subscriptions

 

Technologies that were required to be used in this project

  • Apache web server
  • PHP/Yii
  • MySQL
  • Mailchimp
  • Realex Payments API

 

This project took approximately 2 weeks to complete which included testing, feedback and retrofitting it to the clients current code base.