auntie 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +49 -0
- data/LICENSE +20 -0
- data/README.md +39 -0
- data/Rakefile +24 -0
- data/bin/news +4 -0
- data/bin/radio +51 -0
- data/bin/sport +4 -0
- data/bin/tv +45 -0
- data/bin/weather +23 -0
- data/features/location.feature +8 -0
- data/features/news.feature +8 -0
- data/features/radio.feature +8 -0
- data/features/sport.feature +8 -0
- data/features/step_definitions/location_steps.rb +7 -0
- data/features/step_definitions/radio_steps.rb +1 -0
- data/features/step_definitions/tv_steps.rb +1 -0
- data/features/step_definitions/weather_steps.rb +6 -0
- data/features/support/env.rb +15 -0
- data/features/tv.feature +8 -0
- data/features/weather.feature +8 -0
- data/lib/auntie.rb +16 -0
- data/lib/bbc/location.rb +44 -0
- data/lib/bbc/news.rb +28 -0
- data/lib/bbc/now_next.rb +93 -0
- data/lib/bbc/schedule.rb +53 -0
- data/lib/bbc/shell/characters.rb +68 -0
- data/lib/bbc/shell/colors.rb +39 -0
- data/lib/bbc/shell/describe_time.rb +20 -0
- data/lib/bbc/sport.rb +33 -0
- data/lib/bbc/version.rb +7 -0
- data/lib/bbc/weather.rb +98 -0
- data/scratch +9 -0
- data/spec/bbc/location_spec.rb +45 -0
- data/spec/bbc/news_spec.rb +43 -0
- data/spec/bbc/now_next_spec.rb +53 -0
- data/spec/bbc/schedule_spec.rb +56 -0
- data/spec/bbc/sport_spec.rb +35 -0
- data/spec/bbc/version_spec.rb +18 -0
- data/spec/bbc/weather_spec.rb +41 -0
- data/spec/fixtures/3dayforecast.json +149 -0
- data/spec/fixtures/3hourlyforecast.json +265 -0
- data/spec/fixtures/location.json +12 -0
- data/spec/fixtures/news.json +31 -0
- data/spec/fixtures/now_next_radio.json +7767 -0
- data/spec/fixtures/now_next_tv.json +3471 -0
- data/spec/fixtures/schedule_radio_today.json +939 -0
- data/spec/fixtures/schedule_radio_tomorrow.json +941 -0
- data/spec/fixtures/schedule_radio_yesterday.json +1118 -0
- data/spec/fixtures/schedule_tv.json +1695 -0
- data/spec/fixtures/sport.json +38 -0
- data/spec/spec_helper.rb +13 -0
- metadata +170 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a4896751f96adc8b695d536c3dc46030b1a333af
|
4
|
+
data.tar.gz: e8d3f4c3c2831558bc4a88631546c19bb39111c6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c7586efa5622dff643cfe6109093cbfd553a26352373b892910750156e2998cb035f294e5b408ce652b0621fa6df5acaa620a14ba502a7e9c1b995638edf5c29
|
7
|
+
data.tar.gz: 4fb2bd9e364e95a60c4505b9881b65b928f0899d2f8dc4f342f24dee87c1ed0b561ec4554ccbb7fde7cc46fe0f4a82cc224ef773a6b5c1b878415e8fe7693d5d
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
auntie (0.1.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
anticipate (0.0.2)
|
10
|
+
aruba (0.5.0)
|
11
|
+
childprocess (= 0.2.3)
|
12
|
+
cucumber (>= 1.1.1)
|
13
|
+
ffi (>= 1.0.11)
|
14
|
+
rspec-expectations (>= 2.7.0)
|
15
|
+
builder (3.1.4)
|
16
|
+
childprocess (0.2.3)
|
17
|
+
ffi (~> 1.0.6)
|
18
|
+
cucumber (1.2.1)
|
19
|
+
builder (>= 2.1.2)
|
20
|
+
diff-lcs (>= 1.1.3)
|
21
|
+
gherkin (~> 2.11.0)
|
22
|
+
json (>= 1.4.6)
|
23
|
+
diff-lcs (1.1.3)
|
24
|
+
ffi (1.0.11)
|
25
|
+
gherkin (2.11.5)
|
26
|
+
json (>= 1.4.6)
|
27
|
+
json (1.7.5)
|
28
|
+
rake (0.9.2.2)
|
29
|
+
rdoc (3.12)
|
30
|
+
json (~> 1.4)
|
31
|
+
rspec (2.11.0)
|
32
|
+
rspec-core (~> 2.11.0)
|
33
|
+
rspec-expectations (~> 2.11.0)
|
34
|
+
rspec-mocks (~> 2.11.0)
|
35
|
+
rspec-core (2.11.1)
|
36
|
+
rspec-expectations (2.11.3)
|
37
|
+
diff-lcs (~> 1.1.3)
|
38
|
+
rspec-mocks (2.11.3)
|
39
|
+
|
40
|
+
PLATFORMS
|
41
|
+
ruby
|
42
|
+
|
43
|
+
DEPENDENCIES
|
44
|
+
anticipate
|
45
|
+
aruba
|
46
|
+
auntie!
|
47
|
+
rake
|
48
|
+
rdoc
|
49
|
+
rspec
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) MMXIV Simon Gregory
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# Auntie
|
2
|
+
|
3
|
+
A Ruby Gem for accessing [BBC]() weather, tv, radio, news and sport feeds.
|
4
|
+
|
5
|
+
# Install
|
6
|
+
|
7
|
+
gem install auntie
|
8
|
+
|
9
|
+
# Use
|
10
|
+
|
11
|
+
weather # lists the weather for the next 24 hours
|
12
|
+
|
13
|
+
tv # what is on BBC One today
|
14
|
+
tv two # what is on BBC Two today
|
15
|
+
tv now # list of all programmes being broadcast on tv now
|
16
|
+
|
17
|
+
radio # what is on Radio 1 today
|
18
|
+
radio next # what is on the wireless next
|
19
|
+
radio six # what is on Radio Six Music
|
20
|
+
|
21
|
+
news # the latest news headlines
|
22
|
+
|
23
|
+
sport # the latest sport headlines
|
24
|
+
|
25
|
+
# zsh integration
|
26
|
+
|
27
|
+
For zsh-shell completion you'll want to create a file called `_radio` with the following contents:
|
28
|
+
|
29
|
+
#compdef radio
|
30
|
+
compadd `radio help -c`
|
31
|
+
|
32
|
+
and source it via your .zshrc file. The same can be done for the `tv` and `weather`.
|
33
|
+
|
34
|
+
# Licence
|
35
|
+
|
36
|
+
[MIT][], see accomanying [LICENSE](LICENSE) document
|
37
|
+
|
38
|
+
[BBC]: http://www.bbc.co.uk/
|
39
|
+
[MIT]: http://opensource.org/licenses/MIT
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rake/clean'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'rspec'
|
5
|
+
require 'rspec/core/rake_task'
|
6
|
+
require 'cucumber'
|
7
|
+
require 'cucumber/rake/task'
|
8
|
+
|
9
|
+
CLEAN << 'tmp'
|
10
|
+
|
11
|
+
desc 'Run features'
|
12
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
13
|
+
t.cucumber_opts = "features --format html -o tmp/results.html --format progress -x"
|
14
|
+
t.fork = false
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run all examples"
|
18
|
+
RSpec::Core::RakeTask.new(:spec) do |t|
|
19
|
+
t.rspec_opts = %w[--color]
|
20
|
+
end
|
21
|
+
|
22
|
+
task :t => [:spec]
|
23
|
+
|
24
|
+
task :default => [:spec, :features]
|
data/bin/news
ADDED
data/bin/radio
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'auntie'
|
3
|
+
|
4
|
+
channels = {
|
5
|
+
:one => { :id => 'radio1', :region => '/england' },
|
6
|
+
:onextra => { :id => '1xtra' },
|
7
|
+
:two => { :id => 'radio2' },
|
8
|
+
:three => { :id => 'radio3' },
|
9
|
+
:four => { :id => 'radio4', :region => '/fm' },
|
10
|
+
:fourextra => { :id => 'radio4extra' },
|
11
|
+
:five => { :id => '5live' },
|
12
|
+
:six => { :id => '6music' },
|
13
|
+
:asian => { :id => 'asiannetwork' },
|
14
|
+
:worldservice => { :id => 'worldserviceradio' }
|
15
|
+
}
|
16
|
+
|
17
|
+
channel = ARGV[0] || :one
|
18
|
+
|
19
|
+
if ARGV[0] == 'help' && ARGV[1] == '-c'
|
20
|
+
channels.each { |k,v| puts k }
|
21
|
+
puts "now\nnext"
|
22
|
+
exit
|
23
|
+
end
|
24
|
+
|
25
|
+
if ['help', '-h', '--help'].include? ARGV[0]
|
26
|
+
puts 'Useage: radio <channel>'
|
27
|
+
exit
|
28
|
+
end
|
29
|
+
|
30
|
+
if ARGV[0] == 'now'
|
31
|
+
NowNext.new.radio_now
|
32
|
+
exit
|
33
|
+
end
|
34
|
+
|
35
|
+
if ARGV[0] == 'next'
|
36
|
+
NowNext.new.radio_next
|
37
|
+
exit
|
38
|
+
end
|
39
|
+
|
40
|
+
if channels.has_key? channel.to_sym
|
41
|
+
|
42
|
+
selection = channels[channel.to_sym]
|
43
|
+
|
44
|
+
if ['yesterday', 'today', 'tomorrow'].include? ARGV[1]
|
45
|
+
selection[:period] = '/'+ARGV[1]
|
46
|
+
end
|
47
|
+
|
48
|
+
Schedule.new.load selection
|
49
|
+
else
|
50
|
+
puts "'#{channel}' is an unknown channel"
|
51
|
+
end
|
data/bin/sport
ADDED
data/bin/tv
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'auntie'
|
3
|
+
|
4
|
+
channels = {
|
5
|
+
:one => { :id => 'bbcone', :region => '/london' },
|
6
|
+
:two => { :id => 'bbctwo', :region => '/england' },
|
7
|
+
:three => { :id => 'bbcthree' },
|
8
|
+
:four => { :id => 'bbcfour' },
|
9
|
+
:cbeebies => { :id => 'cbeebies' },
|
10
|
+
:cbbc => { :id => 'cbbc' },
|
11
|
+
:news => { :id => 'bbcnews' },
|
12
|
+
:parliament => { :id => 'parliament' },
|
13
|
+
:alba => { :id => 'alba', }
|
14
|
+
}
|
15
|
+
|
16
|
+
channel = ARGV[0] || :one
|
17
|
+
|
18
|
+
if ARGV[0] == 'help' && ARGV[1] == '-c'
|
19
|
+
channels.each { |k,v| puts k }
|
20
|
+
puts "now\nnext"
|
21
|
+
exit
|
22
|
+
end
|
23
|
+
|
24
|
+
helps = ['help', '-h', '--help']
|
25
|
+
|
26
|
+
if helps.include? ARGV[0]
|
27
|
+
puts 'Useage: tv <channel>'
|
28
|
+
exit
|
29
|
+
end
|
30
|
+
|
31
|
+
if ARGV[0] == 'now'
|
32
|
+
NowNext.new.tv_now
|
33
|
+
exit
|
34
|
+
end
|
35
|
+
|
36
|
+
if ARGV[0] == 'next'
|
37
|
+
NowNext.new.tv_next
|
38
|
+
exit
|
39
|
+
end
|
40
|
+
|
41
|
+
if channels.has_key? channel.to_sym
|
42
|
+
Schedule.new.load channels[channel.to_sym]
|
43
|
+
else
|
44
|
+
puts "'#{channel}' is an unknown channel"
|
45
|
+
end
|
data/bin/weather
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'auntie'
|
3
|
+
|
4
|
+
if ['help', '-h', '--help'].include? ARGV[0]
|
5
|
+
puts 'Useage: weather <Postcode or BBC location id>'
|
6
|
+
puts ' '
|
7
|
+
puts "To find a BBC location id use: weather loc 'search term'"
|
8
|
+
exit
|
9
|
+
end
|
10
|
+
|
11
|
+
if ARGV[0] == 'loc'
|
12
|
+
place = ARGV[1..-1].join(' ')
|
13
|
+
|
14
|
+
abort "Please specify a location to search for." if place.empty?
|
15
|
+
place = "Hadfield" if place.downcase == 'royston vasey'
|
16
|
+
|
17
|
+
Location.new.find(place)
|
18
|
+
exit
|
19
|
+
end
|
20
|
+
|
21
|
+
location = ARGV[0] ||= '2643743' #'2643743' #Default to London. UK postcodes also work
|
22
|
+
|
23
|
+
Weather.new(location).hourly
|
@@ -0,0 +1 @@
|
|
1
|
+
# todo
|
@@ -0,0 +1 @@
|
|
1
|
+
# todo
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'aruba/cucumber'
|
2
|
+
|
3
|
+
ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
|
4
|
+
LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)),'..','..','lib')
|
5
|
+
|
6
|
+
Before do
|
7
|
+
# Using "announce" causes massive warnings on 1.9.2
|
8
|
+
@puts = true
|
9
|
+
@original_rubylib = ENV['RUBYLIB']
|
10
|
+
ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
|
11
|
+
end
|
12
|
+
|
13
|
+
After do
|
14
|
+
ENV['RUBYLIB'] = @original_rubylib
|
15
|
+
end
|
data/features/tv.feature
ADDED
data/lib/auntie.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'open-uri'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
require 'bbc/shell/colors'
|
7
|
+
require 'bbc/shell/describe_time'
|
8
|
+
require 'bbc/shell/characters'
|
9
|
+
|
10
|
+
require 'bbc/weather'
|
11
|
+
require 'bbc/version'
|
12
|
+
require 'bbc/sport'
|
13
|
+
require 'bbc/schedule'
|
14
|
+
require 'bbc/now_next'
|
15
|
+
require 'bbc/news'
|
16
|
+
require 'bbc/location'
|
data/lib/bbc/location.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class Location
|
4
|
+
def initialize(io=STDOUT)
|
5
|
+
@io = io
|
6
|
+
end
|
7
|
+
|
8
|
+
def find(place)
|
9
|
+
abort "Please use a longer search term" if place.length < 3
|
10
|
+
|
11
|
+
@io.print "Searching for #{place}..."
|
12
|
+
|
13
|
+
load(place)
|
14
|
+
end
|
15
|
+
|
16
|
+
def url(term)
|
17
|
+
"http://www.bbc.co.uk/locator/default/en-GB/autocomplete.json?search=#{URI::encode(term)}&filter=domestic&ptrt=/"
|
18
|
+
end
|
19
|
+
|
20
|
+
def load(place)
|
21
|
+
begin
|
22
|
+
raw = open(url(place), 'UserAgent' => AUNTIE::USER_AGENT).read
|
23
|
+
data = JSON.parse(raw)
|
24
|
+
rescue
|
25
|
+
@io.puts "Unable to download location data"
|
26
|
+
exit
|
27
|
+
end
|
28
|
+
|
29
|
+
@io.print "\r"
|
30
|
+
|
31
|
+
if data.empty?
|
32
|
+
@io.puts "No locations found matching '#{place}' "
|
33
|
+
else
|
34
|
+
@io.puts sprintf "%-42s %-10s", 'Place', 'ID'
|
35
|
+
data.each do |e|
|
36
|
+
name = e['fullName'].split(',')
|
37
|
+
place = light_green(name[0]+ ',') + green(name[1])
|
38
|
+
id = cyan e['id']
|
39
|
+
|
40
|
+
@io.puts sprintf "%-60s %-10s", place, id
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|