Last active
November 23, 2015 04:25
-
-
Save kota65535/5d69d2b86563fee8b565 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'frisky/ssdp' | |
require 'httpclient' | |
require 'nokogiri' | |
require 'json' | |
require 'pp' | |
# SSDPで所定のデバイスを検索 | |
SSDP_SEARCH_TARGET = 'urn:schemas-sony-com:service:ScalarWebAPI:1' | |
SSDP_SEARCH_RETRY = 3 | |
SSDP_RETRY_INTERVAL = 5 | |
try = 1 | |
while true do | |
response = Frisky::SSDP.search SSDP_SEARCH_TARGET | |
if ! response.empty? | |
break | |
elsif try < SSDP_SEARCH_RETRY | |
try += 1 | |
puts "SSDP discover failed, retrying... (#{try}/#{SSDP_SEARCH_RETRY})" | |
sleep(SSDP_RETRY_INTERVAL) | |
else | |
puts "The device not found." | |
exit 3 | |
end | |
end | |
pp response | |
puts 'SSDP discover succeeded.' | |
# デバイスデスクリプション取得 | |
cli = HTTPClient.new | |
dd = cli.get_content(response[0][:location]) | |
puts dd | |
puts 'Got the device descripton.' | |
# デバイスデスクリプション解析 | |
dd_xml = Nokogiri::XML(dd) | |
if dd_xml.nil? | |
puts 'Failed to parse XML.' | |
exit 1 | |
end | |
dd_xml.remove_namespaces! | |
camera_name = dd_xml.css('device friendlyName') | |
services = dd_xml.css('device X_ScalarWebAPI_Service') | |
endpoint_urls = {} | |
services.each do |sv| | |
service_type = sv.css('X_ScalarWebAPI_ServiceType').inner_text | |
endpoint_urls[service_type] = File.join(sv.css('X_ScalarWebAPI_ActionList_URL').inner_text, service_type) | |
end | |
puts 'Endpoint URLs are:' | |
pp endpoint_urls | |
setShootMode_request = { | |
'method' => 'setShootMode', | |
'params' => ['movie'], | |
'id' => 1, | |
'version' => '1.0' | |
} | |
startMovieRec_request = { | |
'method' => 'startMovieRec', | |
'params' => [], | |
'id' => 2, | |
'version' => '1.0' | |
} | |
stopMovieRec_request = { | |
'method' => 'stopMovieRec', | |
'params' => [], | |
'id' => 3, | |
'version' => '1.0' | |
} | |
# 撮影モード切り替え->録画開始->録画停止 | |
res = cli.post_content(endpoint_urls['camera'], setShootMode_request.to_json) | |
pp JSON.parse(res) | |
res = cli.post_content(endpoint_urls['camera'], startMovieRec_request.to_json) | |
pp JSON.parse(res) | |
sleep(5) | |
res = cli.post_content(endpoint_urls['camera'], stopMovieRec_request.to_json) | |
pp JSON.parse(res) | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0"?><root xmlns="urn:schemas-upnp-org:device-1-0"> | |
<specVersion> | |
<major>1</major> | |
<minor>0</minor> | |
</specVersion> | |
<device> | |
<deviceType>urn:schemas-upnp-org:device:Basic:1</deviceType> | |
<friendlyName>HDR-AZ1</friendlyName> | |
<manufacturer>Sony Corporation</manufacturer> | |
<manufacturerURL>http://www.sony.net/</manufacturerURL> | |
<modelDescription>SonyDigitalMediaServer</modelDescription> | |
<modelName>SonyImagingDevice</modelName> | |
<UDN>uuid:000000001000-1010-8000-FEC2DEEB77DC</UDN> | |
<serviceList> | |
<service> | |
<serviceType>urn:schemas-sony-com:service:ScalarWebAPI:1</serviceType> | |
<serviceId>urn:schemas-sony-com:serviceId:ScalarWebAPI</serviceId> | |
<SCPDURL/> | |
<controlURL/> | |
<eventSubURL/> | |
</service> | |
<service> | |
<serviceType>urn:schemas-sony-com:service:DigitalImaging:1</serviceType> | |
<serviceId>urn:schemas-sony-com:serviceId:DigitalImaging</serviceId> | |
<SCPDURL>/DigitalImagingDesc.xml</SCPDURL> | |
<controlURL>/upnp/control/DigitalImaging</controlURL> | |
<eventSubURL></eventSubURL> | |
</service> | |
</serviceList> | |
<av:X_ScalarWebAPI_DeviceInfo xmlns:av="urn:schemas-sony-com:av"> | |
<av:X_ScalarWebAPI_Version>1.0</av:X_ScalarWebAPI_Version> | |
<av:X_ScalarWebAPI_ServiceList> | |
<av:X_ScalarWebAPI_Service> | |
<av:X_ScalarWebAPI_ServiceType>guide</av:X_ScalarWebAPI_ServiceType> | |
<av:X_ScalarWebAPI_ActionList_URL>http://192.168.122.1:8080/sony</av:X_ScalarWebAPI_ActionList_URL> | |
<av:X_ScalarWebAPI_AccessType/> | |
</av:X_ScalarWebAPI_Service> | |
<av:X_ScalarWebAPI_Service> | |
<av:X_ScalarWebAPI_ServiceType>accessControl</av:X_ScalarWebAPI_ServiceType> | |
<av:X_ScalarWebAPI_ActionList_URL>http://192.168.122.1:8080/sony</av:X_ScalarWebAPI_ActionList_URL> | |
<av:X_ScalarWebAPI_AccessType/> | |
</av:X_ScalarWebAPI_Service> | |
<av:X_ScalarWebAPI_Service> | |
<av:X_ScalarWebAPI_ServiceType>camera</av:X_ScalarWebAPI_ServiceType> | |
<av:X_ScalarWebAPI_ActionList_URL>http://192.168.122.1:8080/sony</av:X_ScalarWebAPI_ActionList_URL> | |
<av:X_ScalarWebAPI_AccessType/> | |
</av:X_ScalarWebAPI_Service> | |
<av:X_ScalarWebAPI_Service> | |
<av:X_ScalarWebAPI_ServiceType>system</av:X_ScalarWebAPI_ServiceType> | |
<av:X_ScalarWebAPI_ActionList_URL>http://192.168.122.1:8080/sony</av:X_ScalarWebAPI_ActionList_URL> | |
<av:X_ScalarWebAPI_AccessType/> | |
</av:X_ScalarWebAPI_Service> | |
<av:X_ScalarWebAPI_Service> | |
<av:X_ScalarWebAPI_ServiceType>avContent</av:X_ScalarWebAPI_ServiceType> | |
<av:X_ScalarWebAPI_ActionList_URL>http://192.168.122.1:8080/sony</av:X_ScalarWebAPI_ActionList_URL> | |
<av:X_ScalarWebAPI_AccessType/> | |
</av:X_ScalarWebAPI_Service> | |
</av:X_ScalarWebAPI_ServiceList> | |
<av:X_ScalarWebAPI_ImagingDevice> | |
<av:X_ScalarWebAPI_LiveView_URL>http://192.168.122.1:8080/liveview/liveviewstream</av:X_ScalarWebAPI_LiveView_URL> | |
<av:X_ScalarWebAPI_DefaultFunction>RemoteShooting</av:X_ScalarWebAPI_DefaultFunction> | |
</av:X_ScalarWebAPI_ImagingDevice> | |
</av:X_ScalarWebAPI_DeviceInfo> | |
</device> | |
</root> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment