Skip to content

Instantly share code, notes, and snippets.

@tenforward
Last active November 24, 2016 11:25
Show Gist options
  • Select an option

  • Save tenforward/3911457 to your computer and use it in GitHub Desktop.

Select an option

Save tenforward/3911457 to your computer and use it in GitHub Desktop.
mpris経由でPlayerを色々するサンプル
#!/usr/bin/ruby -w
# -*- coding: utf-8 -*-
require 'dbus'
require 'twitter'
require 'rubygems'
# mpris
# see the specification
# http://specifications.freedesktop.org/mpris-spec/latest/
service_name = ''
# get dbus instance
dbus = DBus::SessionBus.instance
# get service name of mpris player
dbus.proxy.ListNames[0].each{|s|
if s =~ /^org.mpris/
service_name = s
break
end
}
# get service
service = dbus.service(service_name)
# mpris player object
player = service.object('/org/mpris/MediaPlayer2')
# introspect
begin
player.introspect
rescue => e
puts "Rhythmbox or other mpris player is not running."
exit 1
end
# get interface and set default interface on bus
iface = player["org.freedesktop.DBus.Properties"]
player.default_iface = "org.freedesktop.DBus.Properties"
# catch the signal "PropertiesChanged"
player.on_signal("PropertiesChanged") {|i,property|
if !property.key?("Metadata") || !property.key?("PlaybackStatus")
next
end
if property["PlaybackStatus"] == "Stopped"
next
end
# Metadata: http://www.freedesktop.org/wiki/Specifications/mpris-spec/metadata
meta = property["Metadata"]
album = meta["xesam:album"]
trackNumber = meta["xesam:trackNumber"]
title = meta["xesam:title"]
length = meta["mpris:length"]
artist = ""
if meta["xesam:artist"].instance_of?(Array)
meta["xesam:artist"].each{|v|
artist += v
}
end
albumArtist = ""
if meta["xesam:artist"].instance_of?(Array)
meta["xesam:artist"].each{|v|
albumArtist += v
}
end
unless length.nil?
t = Time.local(2000, 1, 1, 0, 0, 0, 0)
t += length.div(1000000)
length = t.strftime("%-M:%S")
end
post = "I'm listening to #{title} by #{artist} on #{album} (#{length}) ♪ #nowplaying".force_encoding("UTF-8")
# cut strings when strings to post is over 140
if post.length > 140
post = post.slice(0, 137) + '...'
end
ENV["SSL_CERT_FILE"] = "/etc/ssl/certs/ca-bundle.crt"
# Post twitter
Twitter.configure {|c|
c.consumer_key = ''
c.consumer_secret = ''
c.oauth_token = ''
c.oauth_token_secret = ''
}
client = Twitter::Client.new
client.update(post)
}
loop = DBus::Main.new
loop << dbus
loop.run
#!/usr/bin/ruby -w
require 'dbus'
require 'rubygems'
# mpris
# see the specification
# http://specifications.freedesktop.org/mpris-spec/latest/
service_name = ''
# get dbus instance
dbus = DBus::SessionBus.instance
# get service name of mpris player
dbus.proxy.ListNames[0].each{|s|
if s =~ /^org.mpris/
service_name = s
break
end
}
# get service
service = dbus.service(service_name)
# mpris player object
player = service.object('/org/mpris/MediaPlayer2')
# introspect
player.introspect
# get interface
iface = player["org.mpris.MediaPlayer2.Player"]
# get metadata
iface["Metadata"].each{|k,v|
print k,v,"\n"
}
# play next song
iface.Next
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment