alexa_remotectl 0.4.2 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/lib/alexa_remotectl.rb +92 -35
- data.tar.gz.sig +3 -3
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e6f8ae020909ff7e55ed461f0abd1d5be5030f4a0a33e59bca9d679d9d317cdb
|
4
|
+
data.tar.gz: 2ca248fe25642502eb143de03d3ef64297b24618eea71b630fba347a040e6682
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a6b48bedafcc463138aeb96b7eb1450a048f60a8f886494bcdb7b0b7abb658a658d707b2820d6586eb4c0a776704a650b79e728d06e3a7bcea917144852ea14
|
7
|
+
data.tar.gz: 7370ca7ac96b4c72dddaa0967d24d78d0267b7746ec533a96c68062dc5b5cac487040230432bf298c85d60e316c65e26223a39bcdc1f5677011afbcf2aba4962
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/lib/alexa_remotectl.rb
CHANGED
@@ -13,7 +13,7 @@ require 'json'
|
|
13
13
|
# Use the CodeWizard with the cURL command you've copied using Developer
|
14
14
|
# tools on Alexa's SPA page (within the web browser).
|
15
15
|
#
|
16
|
-
# note: to find the correct url to convert, try
|
16
|
+
# note: to find the correct url to convert, try clicking on pause or play to
|
17
17
|
# invoke an AJAX request
|
18
18
|
|
19
19
|
class CodeWizard
|
@@ -62,20 +62,43 @@ class AlexaRemoteCtl
|
|
62
62
|
|
63
63
|
# note: Added the Cross-site request forgery (crsf) variable
|
64
64
|
#
|
65
|
-
def initialize(domain: 'alexa.amazon.co.uk', device: {}, cookie: '',
|
65
|
+
def initialize(domain: 'alexa.amazon.co.uk', device: {}, cookie: '',
|
66
|
+
customerid: '', csrf: '')
|
66
67
|
|
67
68
|
@domain, @device, @cookie, @customerid = domain, device, cookie, customerid
|
68
69
|
@csrf = csrf
|
69
70
|
|
70
71
|
end
|
71
72
|
|
73
|
+
# Some audio streams can't be paused through the SPA API. Playing a
|
74
|
+
# historical queue, and then pausing it, is the best next option.
|
75
|
+
#
|
76
|
+
def force_pause()
|
77
|
+
|
78
|
+
r = list_hq()
|
79
|
+
queueid = r[:media][0][:queueId]
|
80
|
+
|
81
|
+
play_hq queueid
|
82
|
+
sleep 1
|
83
|
+
|
84
|
+
pause()
|
85
|
+
|
86
|
+
end
|
87
|
+
|
72
88
|
def info()
|
73
89
|
device_player()[:playerInfo]
|
74
90
|
end
|
75
91
|
|
76
92
|
def list_ebooks()
|
77
|
-
get_json '/api/ebooks/library', "mediaOwnerCustomerId=#{@customerid}" +
|
93
|
+
r = get_json '/api/ebooks/library', "mediaOwnerCustomerId=#{@customerid}" +
|
78
94
|
"&nextToken=&size=50"
|
95
|
+
r[:metadataList]
|
96
|
+
end
|
97
|
+
|
98
|
+
# list historical queue (hq)
|
99
|
+
#
|
100
|
+
def list_hq()
|
101
|
+
get_json '/api/media/historical-queue', "size=50&offset=-1"
|
79
102
|
end
|
80
103
|
|
81
104
|
def mute?()
|
@@ -97,7 +120,13 @@ class AlexaRemoteCtl
|
|
97
120
|
pp_cmd('Play')
|
98
121
|
end
|
99
122
|
|
100
|
-
def play_ebook(
|
123
|
+
def play_ebook(obj)
|
124
|
+
|
125
|
+
id = if obj.is_a? Integer then
|
126
|
+
list_ebook()[obj][:asin]
|
127
|
+
else
|
128
|
+
obj
|
129
|
+
end
|
101
130
|
|
102
131
|
serialno = @device[:serialno]
|
103
132
|
type = @device[:type]
|
@@ -115,8 +144,19 @@ class AlexaRemoteCtl
|
|
115
144
|
|
116
145
|
end
|
117
146
|
|
118
|
-
|
119
|
-
|
147
|
+
# play historical queue
|
148
|
+
# note: You can find the queueid from an entry in the list_hq() result
|
149
|
+
#
|
150
|
+
def play_hq(obj)
|
151
|
+
|
152
|
+
queueid = if obj.is_a? Integer then
|
153
|
+
r = list_hq()
|
154
|
+
r[:media][obj][:queueId]
|
155
|
+
else
|
156
|
+
obj
|
157
|
+
end
|
158
|
+
|
159
|
+
device_phq(queueid)
|
120
160
|
end
|
121
161
|
|
122
162
|
def playing?()
|
@@ -154,6 +194,8 @@ class AlexaRemoteCtl
|
|
154
194
|
device_cmd(body)
|
155
195
|
end
|
156
196
|
|
197
|
+
alias setvol vol=
|
198
|
+
|
157
199
|
private
|
158
200
|
|
159
201
|
# play, pause, or next
|
@@ -293,70 +335,85 @@ class AlexaDevices
|
|
293
335
|
#
|
294
336
|
def initialize(devicesx=[], devices: devicesx,
|
295
337
|
domain: 'alexa.amazon.co.uk', cookie: '', customerid: '',
|
296
|
-
csrf: '')
|
338
|
+
csrf: '', debug: false)
|
297
339
|
|
298
340
|
@devices, @domain, @cookie = devices, domain, cookie
|
299
|
-
@customerid, @csrf = customerid, csrf
|
341
|
+
@customerid, @csrf, @debug = customerid, csrf, debug
|
300
342
|
|
301
343
|
end
|
302
344
|
|
345
|
+
def force_pause(id) invoke(:force_pause, id) end
|
346
|
+
def info(id=nil) invoke(:info, id) end
|
347
|
+
def list_ebooks(id) invoke(:list_ebooks, id) end
|
348
|
+
def list_hq(id=nil) invoke(:list_hq, id) end
|
349
|
+
def mute?(id=nil) invoke2(:mute?, id) end
|
350
|
+
def next(id) invoke2(:next, id) end
|
351
|
+
|
303
352
|
def playing()
|
304
353
|
|
305
|
-
@devices.map do |device, label|
|
354
|
+
devices = @devices.map do |device, label|
|
355
|
+
|
356
|
+
puts 'label: ' + label.inspect if @debug
|
357
|
+
puts 'device: ' + device.inspect if @debug
|
358
|
+
|
306
359
|
alexa = get_alexa device
|
307
360
|
alexa.playing? ? [alexa, label] : nil
|
308
|
-
end.compact
|
309
|
-
|
310
|
-
end
|
311
361
|
|
312
|
-
|
362
|
+
end.compact
|
313
363
|
|
314
|
-
|
364
|
+
puts 'devices: ' + devices.inspect if @debug
|
365
|
+
return devices
|
315
366
|
|
316
|
-
|
367
|
+
end
|
317
368
|
|
318
|
-
|
319
|
-
|
369
|
+
def pause(id=nil) invoke2(:pause, id) end
|
370
|
+
def play(id) invoke(:play, id) end
|
371
|
+
def play_ebook(id) invoke(:list_hq, id) end
|
372
|
+
def play_hq(id,qid) invoke(:play_hq, id, qid) end
|
373
|
+
def playing?(id=nil) invoke(:playing?, id) end
|
374
|
+
def text1(id=nil) invoke2(:text1, id) end
|
375
|
+
def text2(id=nil) invoke2(:text2, id) end
|
376
|
+
def title(id=nil) invoke2(:title, id) end
|
377
|
+
def vol(id=nil) invoke(:vol, id) end
|
378
|
+
def setvol(id=nil, level) invoke(:setvol, id, level) end
|
320
379
|
|
321
|
-
|
380
|
+
private
|
322
381
|
|
323
|
-
|
324
|
-
puts 'Pausing @' + label.inspect
|
325
|
-
alexa.pause
|
326
|
-
end
|
382
|
+
def get_alexa(device)
|
327
383
|
|
328
|
-
|
384
|
+
AlexaRemoteCtl.new(cookie: @cookie, device: device,
|
385
|
+
customerid: @customerid, csrf: @csrf)
|
329
386
|
end
|
330
387
|
|
331
|
-
def
|
332
|
-
|
333
|
-
a = @devices
|
388
|
+
def apply_cmd(a, cmd, id, args)
|
334
389
|
|
335
390
|
if id then
|
336
391
|
|
337
392
|
device, _ = a.find {|_, label| label.to_sym == id.to_sym}
|
338
393
|
alexa = get_alexa device
|
339
|
-
alexa.
|
394
|
+
alexa.method(cmd).call(*args)
|
340
395
|
|
341
396
|
else
|
342
397
|
|
343
|
-
a.
|
398
|
+
a.map do |device, label|
|
344
399
|
|
345
|
-
puts '
|
400
|
+
puts cmd.to_s + ' @' + label.inspect
|
346
401
|
alexa = get_alexa device
|
347
|
-
alexa.
|
402
|
+
alexa.method(cmd).call(*args)
|
348
403
|
|
349
404
|
end
|
350
405
|
|
351
406
|
end
|
352
407
|
end
|
353
408
|
|
354
|
-
|
355
|
-
|
356
|
-
|
409
|
+
def invoke(cmd, id, *args)
|
410
|
+
apply_cmd(@devices, cmd, id, args)
|
411
|
+
end
|
357
412
|
|
358
|
-
|
359
|
-
|
413
|
+
# apply command to an Alexa device which is currently playing
|
414
|
+
#
|
415
|
+
def invoke2(cmd, id, *args)
|
416
|
+
apply_cmd(playing(), cmd, id, args)
|
360
417
|
end
|
361
418
|
|
362
419
|
end
|
data.tar.gz.sig
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
V�
|
3
|
-
�
|
1
|
+
|
2
|
+
������\G�y<�x��yxk?8Ά��(�����E�6���-ubA�ځe##T�a.�ޟ��tC�IC�]O�E��|X��?I%@>��/�Ɗ�Q�#�I��v�́T-=��׳]����V)亏S���X�e��}���1�r
|
3
|
+
Ԙk�'��1���ҕ��Y��/��:E�@��8�lݫ�h�u�
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alexa_remotectl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
d/gEwBtUmduwWZNX2NOJehf8s1cnH9OBP7s1ziHjdkZCgkQm3QewRRcdfZeYwFi6
|
36
36
|
4kVEcApgAgd+04ctE6uiRn5o
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2022-05-
|
38
|
+
date: 2022-05-24 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: clipboard
|
metadata.gz.sig
CHANGED
Binary file
|