football__data 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +41 -5
- data/bin/football +173 -0
- data/lib/football__data/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e80953fbbd0b5eb6354ad2af427c6b913c1d96d9
|
4
|
+
data.tar.gz: 4b813627d13ce965c4847df5fea7df2e151b4e7a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e4e3a68555129447f8390818291fd2fb80950770896cdc0920ade5c783728d1af8b303f48704052b566e9f83810bc9860e6784f6d240571b2614eeba36aef9a
|
7
|
+
data.tar.gz: 900a23a8d19e24211a143a937cf47217a46dd4d56f8dbc7f4b9593230412c23bdb101b4b7cf607790e29aae86422db89cd4843ecd8b04e91299a98015e1bebe5
|
data/README.md
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# FootballData
|
2
2
|
|
3
|
-
A ruby wrapper of [football-data.org](http://api.football-data.org/index)
|
3
|
+
A ruby wrapper of [football-data.org](http://api.football-data.org/index),
|
4
|
+
it also has an executable to get football info from terminal.
|
4
5
|
|
5
6
|
## Installation
|
6
7
|
|
@@ -20,7 +21,45 @@ Or install it yourself as:
|
|
20
21
|
|
21
22
|
## Usage
|
22
23
|
|
23
|
-
###
|
24
|
+
### Executable
|
25
|
+
|
26
|
+
You can use `football` from the terminal to get some football info.
|
27
|
+
|
28
|
+
```
|
29
|
+
$ football help # get the help info
|
30
|
+
|
31
|
+
# examples
|
32
|
+
$ football config # config api key, fav team, fav league, etc
|
33
|
+
$ football table --league=398
|
34
|
+
Premier League 2015/16 matchday 15
|
35
|
+
---------------------------------------------------------------------------
|
36
|
+
R Team P W D L GF GA GD Pts
|
37
|
+
---------------------------------------------------------------------------
|
38
|
+
1 Leicester City FC 15 9 5 1 32 21 11 32
|
39
|
+
2 Arsenal FC 15 9 3 3 27 13 14 30
|
40
|
+
3 Manchester City FC 15 9 2 4 30 16 14 29
|
41
|
+
......
|
42
|
+
|
43
|
+
# you could also add -i to interactive mode, you can see the league id there
|
44
|
+
# such as:
|
45
|
+
$ football fixture -i
|
46
|
+
BL1 1. Bundesliga 394
|
47
|
+
BL2 2. Bundesliga 395
|
48
|
+
FL1 Ligue 1 396
|
49
|
+
......
|
50
|
+
Enter the league id of the team: 394
|
51
|
+
FCB FC Bayern München 5
|
52
|
+
HSV Hamburger SV 7
|
53
|
+
......
|
54
|
+
Enter the team id: 5
|
55
|
+
2015-12-10 03:45 GNK Dinamo Zagreb : FC Bayern München (TBD)
|
56
|
+
2015-12-12 22:30 FC Bayern München : FC Ingolstadt 04 (TBD)
|
57
|
+
|
58
|
+
# setting fav_league and fav_team would make it much simple
|
59
|
+
# use football help SUBCOMMAND to see details
|
60
|
+
```
|
61
|
+
|
62
|
+
### API
|
24
63
|
|
25
64
|
First you need to configure the api
|
26
65
|
|
@@ -65,9 +104,6 @@ pp res['players'].find{|player| player['name'] =~ /Mesut/i}
|
|
65
104
|
|
66
105
|
See api structure on page 'http://api.football-data.org/documentation'
|
67
106
|
|
68
|
-
### Executable Usage
|
69
|
-
|
70
|
-
TODO
|
71
107
|
|
72
108
|
## Contributing
|
73
109
|
|
data/bin/football
CHANGED
@@ -1 +1,174 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "thor"
|
4
|
+
require "time"
|
5
|
+
require "yaml"
|
6
|
+
require "fileutils"
|
7
|
+
|
8
|
+
require "football__data"
|
9
|
+
|
10
|
+
|
11
|
+
# constants
|
12
|
+
CLI = $PROGRAM_NAME
|
13
|
+
HOME = ENV["HOME"]
|
14
|
+
EDITOR = ENV["EDITOR"] || "vim"
|
15
|
+
CONFIG_FILE = "#{HOME}/.config/football-data/config.yml"
|
16
|
+
CONFIG_FILE_EXAMPLE = "./config.yml.example"
|
17
|
+
|
18
|
+
|
19
|
+
# check config file
|
20
|
+
unless File.exist? CONFIG_FILE
|
21
|
+
puts <<-END.gsub(/^\s*\|/, '')
|
22
|
+
|It seems you haven't configured it yet.
|
23
|
+
|#{CLI} will generate generate an example config file.
|
24
|
+
|Run `#{CLI} config` to config the file.
|
25
|
+
END
|
26
|
+
|
27
|
+
FileUtils.mkdir_p File.dirname(CONFIG_FILE)
|
28
|
+
FileUtils.cp CONFIG_FILE_EXAMPLE, CONFIG_FILE
|
29
|
+
|
30
|
+
exit
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
# get config info
|
35
|
+
CONFIG = YAML.load_file CONFIG_FILE
|
36
|
+
|
37
|
+
FootballData.configure do |config|
|
38
|
+
config.api_key = CONFIG['api_key']
|
39
|
+
config.api_version = CONFIG['api_version']
|
40
|
+
end
|
41
|
+
|
42
|
+
FAV_LEAGUE_ID = CONFIG['fav_league_id']
|
43
|
+
FAV_TEAM_ID = CONFIG['fav_team_id']
|
44
|
+
|
45
|
+
|
46
|
+
# cli
|
47
|
+
class Football < Thor
|
48
|
+
desc "config [EXAMPLE]", "Custom configuration file or edit it from an example"
|
49
|
+
option :example, :type => :boolean, :default => false
|
50
|
+
def config
|
51
|
+
if options[:example]
|
52
|
+
FileUtils.rm CONFIG_FILE
|
53
|
+
FileUtils.cp CONFIG_FILE_EXAMPLE, CONFIG_FILE
|
54
|
+
end
|
55
|
+
exec "#{EDITOR} #{CONFIG_FILE}"
|
56
|
+
end
|
57
|
+
|
58
|
+
desc "list TYPE", "List LEAGUE or TEAM id"
|
59
|
+
option :league, :type => :numeric
|
60
|
+
def list(type)
|
61
|
+
if type == "league"
|
62
|
+
__list_league
|
63
|
+
elsif type == "team"
|
64
|
+
if league_id = options[:league]
|
65
|
+
__list_team league_id
|
66
|
+
else
|
67
|
+
puts "can not get teams id without specifying the league id"
|
68
|
+
end
|
69
|
+
else
|
70
|
+
puts "type should be league or team"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
desc "table [LEAGUE]", "Get LEAGUE table"
|
76
|
+
option :league, :type => :numeric
|
77
|
+
option :interactive, :type => :boolean, :default => false, :aliases => :i
|
78
|
+
def table
|
79
|
+
league_id = if options[:interactive]
|
80
|
+
__list_league
|
81
|
+
print "\nEnter league id: "
|
82
|
+
STDIN.gets.to_i
|
83
|
+
else
|
84
|
+
options[:league_id] || FAV_LEAGUE_ID
|
85
|
+
end
|
86
|
+
league_table = FootballData.fetch :soccerseasons, :leagueTable, :id => league_id
|
87
|
+
caption = league_table['leagueCaption']
|
88
|
+
matchday = league_table['matchday']
|
89
|
+
standing = league_table['standing']
|
90
|
+
div_line = "-" * 75
|
91
|
+
w = 5
|
92
|
+
|
93
|
+
puts "#{caption}\tmatchday #{matchday}"
|
94
|
+
puts div_line
|
95
|
+
puts "R".ljust(w) + "Team".ljust(30) + %w[P W D L GF GA GD Pts].map{|i|i.ljust(w)}.join
|
96
|
+
puts div_line
|
97
|
+
standing.each do |team|
|
98
|
+
row = team['position'].to_s.ljust(w)
|
99
|
+
row += team['teamName'].ljust(30)
|
100
|
+
row += team['playedGames'].to_s.ljust(w)
|
101
|
+
row += team['wins'].to_s.ljust(w)
|
102
|
+
row += team['draws'].to_s.ljust(w)
|
103
|
+
row += team['losses'].to_s.ljust(w)
|
104
|
+
row += team['goals'].to_s.ljust(w)
|
105
|
+
row += team['goalsAgainst'].to_s.ljust(w)
|
106
|
+
row += team['goalDifference'].to_s.ljust(w)
|
107
|
+
row += team['points'].to_s.ljust(w)
|
108
|
+
puts row
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
desc "fixture [TEAM]", "Get latest fixture of TEAM"
|
113
|
+
option :team, :type => :numeric
|
114
|
+
option :time, :type => :string
|
115
|
+
option :interactive, :type => :boolean, :default => false, :aliases => :i
|
116
|
+
def fixture
|
117
|
+
team_id = if options[:interactive]
|
118
|
+
__list_league
|
119
|
+
print "\nEnter the league id of the team: "
|
120
|
+
league_id = STDIN.gets.to_i
|
121
|
+
__list_team league_id
|
122
|
+
print "\nEnter the team id: "
|
123
|
+
STDIN.gets.to_i
|
124
|
+
else
|
125
|
+
options[:team] || FAV_TEAM_ID
|
126
|
+
end
|
127
|
+
time = options[:time] || "n7"
|
128
|
+
info = FootballData.fetch :teams, :fixtures, :id => team_id, :timeFrame => time
|
129
|
+
fixtures = info['fixtures']
|
130
|
+
if fixtures.empty?
|
131
|
+
puts "There is no match coming >_<"
|
132
|
+
else
|
133
|
+
fixtures.each do |fixture|
|
134
|
+
date = Time.parse(fixture['date']).localtime
|
135
|
+
home = fixture['homeTeamName']
|
136
|
+
away = fixture['awayTeamName']
|
137
|
+
goal_home = fixture['result']['goalsHomeTeam']
|
138
|
+
goal_away = fixture['result']['goalsAwayTeam']
|
139
|
+
gh = goal_home == -1 ? '' : " #{goal_home}"
|
140
|
+
ga = goal_away == -1 ? '' : " #{goal_away}"
|
141
|
+
l = "#{home.ljust(20)}#{gh}"
|
142
|
+
r = "#{ga}#{away}"
|
143
|
+
match = "#{date.strftime("%Y-%m-%d %H:%M").ljust(20)}\t"
|
144
|
+
match += "#{l} : #{r.ljust(20)}"
|
145
|
+
match += "(TBD)" if gh.empty?
|
146
|
+
puts match
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
private
|
152
|
+
|
153
|
+
def __list_league
|
154
|
+
leagues = FootballData.fetch :soccerseasons
|
155
|
+
leagues.each do |league|
|
156
|
+
id = league['_links']['self']['href'].split('/').last
|
157
|
+
*name, _ = league['caption'].split
|
158
|
+
code = league['league']
|
159
|
+
puts "#{code.ljust(15)}#{name.join(' ').ljust(25)}#{id}"
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def __list_team(league_id)
|
164
|
+
teams = FootballData.fetch(:soccerseasons, :teams, :id => league_id)['teams']
|
165
|
+
teams.each do |team|
|
166
|
+
id = team['_links']['self']['href'].split('/').last
|
167
|
+
name = team['name']
|
168
|
+
code = team['code']
|
169
|
+
puts "#{code.ljust(15)}#{name.ljust(30)}#{id}"
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
Football.start
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: football__data
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- delta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-12-
|
11
|
+
date: 2015-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|