meuh 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/meuh +27 -0
- data/lib/meuh/formatting.rb +68 -0
- data/lib/meuh.rb +90 -0
- data/tests/tests.rb +28 -0
- metadata +148 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5bb87a1e1f46b99880276dd16c8802b8a54d5a68
|
4
|
+
data.tar.gz: 325d0c31b17ebef800058b1d623ca32f216f72bd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 20cf600edfd26a0c495bea4327ccaa665a355be046b0a529dae15338dc9092d11e482f273826aad536fd1b409616725009c94100218863400f5846f21ca48a1c
|
7
|
+
data.tar.gz: 8f7b23889ca275904621d28c717e0a7c60c195bafa3aa816277f80bf1f1fd14c17a794514b5a781b798b2319a0c2cd6fec41504be309aa803a7595df1428abf8
|
data/bin/meuh
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# -*- coding: UTF-8 -*-
|
3
|
+
|
4
|
+
require 'trollop'
|
5
|
+
require 'meuh'
|
6
|
+
|
7
|
+
opts = Trollop.options do
|
8
|
+
version "meuh #{Meuh.version}"
|
9
|
+
banner <<-EOS
|
10
|
+
Meuh is a command-line tool to get the current played track at Anticafé.
|
11
|
+
|
12
|
+
Usage:
|
13
|
+
meuh [options]
|
14
|
+
where [options] are:
|
15
|
+
EOS
|
16
|
+
|
17
|
+
opt :version, 'Print the version and exit', :default => false
|
18
|
+
opt :no_format, 'Disable colored/underlined output', :default => false,
|
19
|
+
:short => '-F'
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
opts[:color] = !opts[:no_format]
|
24
|
+
|
25
|
+
t = Meuh.tracks(opts)
|
26
|
+
puts Meuh.format_results(t, opts[:color])
|
27
|
+
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
|
3
|
+
module Meuh
|
4
|
+
module Formatting
|
5
|
+
class << self
|
6
|
+
|
7
|
+
# Format tracks for text output (e.g. in the terminal)
|
8
|
+
def text(tracks, color=true)
|
9
|
+
if color
|
10
|
+
require 'colored'
|
11
|
+
# this line is from github.com/defunkt/colored
|
12
|
+
require 'Win32/Console/ANSI' if RUBY_PLATFORM =~ /win32/
|
13
|
+
end
|
14
|
+
s = []
|
15
|
+
|
16
|
+
def track_text(t, style, color) # :previous, :next, :curr
|
17
|
+
title = t[:title]
|
18
|
+
artist = t[:artist]
|
19
|
+
album = t[:album]
|
20
|
+
time = style == :previous ? "[#{t[:time]}] " : ''
|
21
|
+
|
22
|
+
title.gsub!(/&/, '&')
|
23
|
+
title.strip!
|
24
|
+
|
25
|
+
if color
|
26
|
+
title = title.underline
|
27
|
+
if artist and style == :curr
|
28
|
+
artist = artist.cyan
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
info = [artist, album].compact
|
33
|
+
info = info.empty? ? '' : " (#{info.map(&:to_s).join(' - ')})"
|
34
|
+
|
35
|
+
if style == :curr and color
|
36
|
+
info = info.green
|
37
|
+
end
|
38
|
+
|
39
|
+
ts = "#{time}#{title}#{info}"
|
40
|
+
|
41
|
+
ts = "* #{ts}" unless style == :curr
|
42
|
+
|
43
|
+
ts
|
44
|
+
end
|
45
|
+
|
46
|
+
if tracks[:current]
|
47
|
+
s << track_text(tracks[:current], :curr, color)
|
48
|
+
end
|
49
|
+
|
50
|
+
if tracks[:previous] and !tracks[:previous].empty?
|
51
|
+
s << "\nPreviously:"
|
52
|
+
tracks[:previous].each do |t|
|
53
|
+
s << track_text(t, :previous, color)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
if tracks[:next] and !tracks[:next].empty?
|
58
|
+
s << "\nNext:"
|
59
|
+
tracks[:next].each do |t|
|
60
|
+
s << track_text(t, :next, color)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
s.join("\n")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
data/lib/meuh.rb
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
# -*- coding: UTF-8 -*-
|
2
|
+
|
3
|
+
require 'uri'
|
4
|
+
require 'open-uri'
|
5
|
+
require 'nokogiri'
|
6
|
+
|
7
|
+
require File.dirname(__FILE__) + '/meuh/formatting'
|
8
|
+
|
9
|
+
# This module provide some methods to scrape current tracks from radiomeuh.com
|
10
|
+
module Meuh
|
11
|
+
class << self
|
12
|
+
|
13
|
+
def version
|
14
|
+
'0.1.0'
|
15
|
+
end
|
16
|
+
|
17
|
+
def url
|
18
|
+
'http://www.radiomeuh.com/meuh/playlist/index.php'
|
19
|
+
end
|
20
|
+
|
21
|
+
# Get the text of an element. This is an helper for internal usage.
|
22
|
+
def text(el)
|
23
|
+
el.text.strip.gsub(/\r/, "\n")
|
24
|
+
rescue
|
25
|
+
''
|
26
|
+
end
|
27
|
+
|
28
|
+
# Query the website, parse the list of tracks and return a hash:
|
29
|
+
# { :previous => [ <track> ],
|
30
|
+
# :current => <track>,
|
31
|
+
# :next => [ <track>, ... ]
|
32
|
+
# }
|
33
|
+
#
|
34
|
+
# A track is also a hash:
|
35
|
+
# { :artist => "...",
|
36
|
+
# :album => "...",
|
37
|
+
# :title => "...",
|
38
|
+
# :remaining => "...", <-- remaining time
|
39
|
+
# :time => "..." <-- time for previous tracks
|
40
|
+
# }
|
41
|
+
def tracks(*opts)
|
42
|
+
opts = opts[0] || {}
|
43
|
+
tracks = { :previous => [], :current => nil, :next => [] }
|
44
|
+
|
45
|
+
doc = Nokogiri::HTML(open(url))
|
46
|
+
|
47
|
+
def parse_track t
|
48
|
+
lines = t.inner_html.split(/<br\/?\s*>/)
|
49
|
+
|
50
|
+
artist, title = lines[1].split(/\s+-\s+/, 2)
|
51
|
+
|
52
|
+
unless title
|
53
|
+
title = artist
|
54
|
+
artist = nil
|
55
|
+
end
|
56
|
+
|
57
|
+
{
|
58
|
+
:artist => artist,
|
59
|
+
:album => lines[2].strip,
|
60
|
+
:title => title,
|
61
|
+
:remaining => t.css('font').text.gsub(/^:\s+/, ''),
|
62
|
+
:time => lines[0].strip
|
63
|
+
}
|
64
|
+
end
|
65
|
+
|
66
|
+
got_current = false
|
67
|
+
doc.css('tr > td + td').each do |td|
|
68
|
+
if !got_current
|
69
|
+
b = td.css('b').first
|
70
|
+
if b
|
71
|
+
got_current = true
|
72
|
+
tracks[:current] = parse_track(b)
|
73
|
+
else
|
74
|
+
tracks[:next] << parse_track(td)
|
75
|
+
end
|
76
|
+
else
|
77
|
+
tracks[:previous] << parse_track(td)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
tracks
|
82
|
+
end
|
83
|
+
|
84
|
+
# Format tracks for output
|
85
|
+
def format_results(tracks, color=true)
|
86
|
+
self::Formatting.text(tracks, color)
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
90
|
+
end
|
data/tests/tests.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
# -*- coding: UTF-8 -*-
|
3
|
+
|
4
|
+
require 'test/unit'
|
5
|
+
require 'simplecov'
|
6
|
+
|
7
|
+
test_dir = File.expand_path( File.dirname(__FILE__) )
|
8
|
+
|
9
|
+
SimpleCov.start { add_filter '/tests/' } if ENV['COVERAGE']
|
10
|
+
|
11
|
+
require 'meuh'
|
12
|
+
|
13
|
+
for t in Dir.glob( File.join( test_dir, '*_tests.rb' ) )
|
14
|
+
require t
|
15
|
+
end
|
16
|
+
|
17
|
+
class MeuhTests < Test::Unit::TestCase
|
18
|
+
|
19
|
+
# == Meuh#version == #
|
20
|
+
|
21
|
+
def test_meuh_version
|
22
|
+
assert(Meuh.version =~ /^\d+\.\d+\.\d+/)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
exit Test::Unit::AutoRunner.run
|
metadata
ADDED
@@ -0,0 +1,148 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: meuh
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Baptiste Fontaine
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-01-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.5.9
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.5.9
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: trollop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: colored
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.2'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: test-unit
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: fakeweb
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: Get the currently played track on Radiomeuh.com, which is the radio used
|
112
|
+
at Anticafé.
|
113
|
+
email: batifon@yahoo.fr
|
114
|
+
executables:
|
115
|
+
- meuh
|
116
|
+
extensions: []
|
117
|
+
extra_rdoc_files: []
|
118
|
+
files:
|
119
|
+
- lib/meuh.rb
|
120
|
+
- lib/meuh/formatting.rb
|
121
|
+
- tests/tests.rb
|
122
|
+
- bin/meuh
|
123
|
+
homepage: https://github.com/bfontaine/meuh-cli
|
124
|
+
licenses:
|
125
|
+
- MIT
|
126
|
+
metadata: {}
|
127
|
+
post_install_message:
|
128
|
+
rdoc_options: []
|
129
|
+
require_paths:
|
130
|
+
- lib
|
131
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
|
+
requirements:
|
138
|
+
- - '>='
|
139
|
+
- !ruby/object:Gem::Version
|
140
|
+
version: '0'
|
141
|
+
requirements: []
|
142
|
+
rubyforge_project:
|
143
|
+
rubygems_version: 2.0.3
|
144
|
+
signing_key:
|
145
|
+
specification_version: 4
|
146
|
+
summary: scrapper for radiomeuh.com's current playlist
|
147
|
+
test_files:
|
148
|
+
- tests/tests.rb
|