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 Manchester City 27 21 2 4 74 20 54 65
2 Liverpool 26 20 5 1 59 15 44 65
3 Tottenham Hotspur 26 20 0 6 54 25 29 60
4 Manchester United 26 15 6 5 52 35 17 51
5 Arsenal 26 15 5 6 53 37 16 50
6 Chelsea 26 15 5 6 45 29 16 50
7 Wolverhampton Wanderers 26 11 6 9 34 33 1 39
8 Watford 26 10 7 9 34 34 0 37
9 Everton 27 9 6 12 36 39 -3 33
10 West Ham United 26 9 6 11 32 39 -7 33
11 Bournemouth 26 10 3 13 37 47 -10 33
12 Leicester City 26 9 5 12 31 34 -3 32
13 Crystal Palace 26 7 6 13 27 34 -7 27
14 Brighton & Hove Albion 26 7 6 13 28 39 -11 27
15 Burnley 26 7 6 13 29 47 -18 27
16 Newcastle United 26 6 7 13 22 34 -12 25
17 Cardiff City 26 7 4 15 24 47 -23 25
18 Southampton 26 5 9 12 28 44 -16 24
19 Fulham 26 4 5 17 25 58 -33 17
20 Huddersfield Town 26 2 5 19 14 48 -34 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 26 19 3 4 60 14 46 60
2 Rangers 26 15 7 4 55 20 35 52
3 Aberdeen 26 14 5 7 43 31 12 47
4 Kilmarnock 26 13 7 6 37 26 11 46
5 Hearts 26 13 4 9 32 31 1 43
6 St Johnstone 26 11 5 10 27 32 -5 38
7 Motherwell 26 11 3 12 29 35 -6 36
8 Hibernian 26 9 8 9 36 28 8 35
9 Livingston 26 8 7 11 27 28 -1 31
10 Dundee 26 4 6 16 22 52 -30 18
11 Hamilton Academical 26 5 3 18 17 53 -36 18
12 St Mirren 26 3 4 19 19 54 -35 13
{{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 24 16 6 2 61 23 38 54
2 Atletico Madrid 24 13 8 3 34 17 17 47
3 Real Madrid 24 14 3 7 41 29 12 45
4 Sevilla 24 10 7 7 38 28 10 37
5 Getafe 24 9 9 6 30 21 9 36
6 Alaves 24 10 6 8 25 28 -3 36
7 Real Sociedad 24 9 7 8 30 25 5 34
8 Real Betis 24 9 6 9 27 30 -3 33
9 Valencia 24 6 14 4 24 20 4 32
10 Eibar 24 7 10 7 33 34 -1 31
11 Athletic Bilbao 24 6 12 6 24 28 -4 30
12 Levante 24 8 6 10 36 43 -7 30
13 Leganes 24 7 8 9 25 30 -5 29
14 Espanyol 24 8 5 11 27 37 -10 29
15 Girona 24 6 9 9 25 34 -9 27
16 Real Valladolid 24 6 8 10 19 29 -10 26
17 Celta Vigo 24 6 6 12 36 43 -7 24
18 Villarreal 24 4 11 9 26 31 -5 23
19 Rayo Vallecano 24 6 5 13 27 41 -14 23
20 Huesca 24 4 6 14 23 40 -17 18
{{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 22 15 6 1 54 23 31 51
2 Bayern Munich 22 15 3 4 50 26 24 48
3 Borussia Monchengladbach 22 13 4 5 42 22 20 43
4 RB Leipzig 22 12 5 5 41 19 22 41
5 Bayer Leverkusen 22 11 3 8 39 32 7 36
6 Wolfsburg 22 10 5 7 35 30 5 35
7 Eintracht Frankfurt 22 9 7 6 41 28 13 34
8 Hoffenheim 22 8 9 5 44 32 12 33
9 Hertha Berlin 22 8 8 6 35 32 3 32
10 Werder Bremen 22 8 7 7 37 33 4 31
11 Mainz 05 22 7 6 9 23 36 -13 27
12 Fortuna Dusseldorf 22 7 4 11 25 41 -16 25
13 Freiburg 22 5 9 8 29 37 -8 24
14 Schalke 04 22 6 5 11 25 32 -7 23
15 Augsburg 22 4 6 12 31 40 -9 18
16 Stuttgart 22 4 3 15 18 50 -32 15
17 Hannover 22 3 5 14 20 47 -27 14
18 Nuremberg 22 2 7 13 17 46 -29 13
{{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 23 20 2 1 69 13 56 62
2 Lille 25 15 5 5 42 22 20 50
3 Lyon 25 13 7 5 40 28 12 46
4 Marseille 25 12 4 9 40 34 6 40
5 Saint-Etienne 25 11 7 7 35 31 4 40
6 Montpellier HSC 24 9 11 4 31 19 12 38
7 Reims 25 9 11 5 23 22 1 38
8 Nice 25 10 7 8 19 26 -7 37
9 Strasbourg 25 9 9 7 40 29 11 36
10 Nimes 25 10 6 9 37 35 2 36
11 Rennes 25 10 6 9 34 33 1 36
12 Angers 25 8 9 8 29 28 1 33
13 Bordeaux 24 8 7 9 25 26 -1 31
14 Nantes 25 7 6 12 30 34 -4 27
15 Toulouse 25 6 9 10 24 36 -12 27
16 Monaco 25 5 7 13 24 41 -17 22
17 Amiens 25 6 3 16 19 40 -21 21
18 Dijon 24 5 5 14 20 38 -18 20
19 Caen 25 3 10 12 20 33 -13 19
20 Guingamp 24 3 5 16 17 50 -33 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 19 14 4 1 42 17 25 46
2 Melbourne Victory 19 11 4 4 41 24 17 37
3 Sydney FC 19 11 3 5 33 22 11 36
4 Adelaide United 19 8 6 5 27 24 3 30
5 Melbourne City 19 8 4 7 23 22 1 28
6 Wellington Phoenix 19 7 7 5 26 26 0 28
7 Newcastle Jets 19 6 4 9 24 25 -1 22
8 Western Sydney Wanderers 19 4 4 11 29 41 -12 16
9 Brisbane Roar 19 2 6 11 23 43 -20 12
10 Central Coast Mariners 19 1 4 14 19 43 -24 7
{{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.