sh nasneから取得したxmlを快乐的映射器でパース
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sh nasneから取得したxmlを快乐的映射器でパース相关的知识,希望对你有一定的参考价值。
<?php
/*
* Ref : [PHPでnasneの録画情報を取得する - モロ屋](http://text.moroya.net/entry/2013/09/04/234513)
*/
$host = 'xxx.xxx.xxx.xxx'; // nasne IP address
$port = 64230;
$fp = fsockopen($host, $port);
$data = <<<EOM
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<u:X_GetTitleList xmlns:u="urn:schemas-xsrs-org:service:X_ScheduledRecording:2">
<SearchCriteria />
<Filter />
<StartingIndex>0</StartingIndex>
<RequestedCount>0</RequestedCount>
<SortCriteria />
</u:X_GetTitleList>
</s:Body>
</s:Envelope>
EOM;
$data = str_replace("\n", "\r\n", $data);
$length = strlen($data);
$request = <<<EOM
POST /XSRS HTTP/1.1
HOST: {$host}:{$port}
SOAPACTION: "urn:schemas-xsrs-org:service:X_ScheduledRecording:2#X_GetTitleList"
CONTENT-TYPE: text/xml; charset="utf-8"
Content-Length: {$length}
EOM;
$request = str_replace("\n", "\r\n", $request);
fwrite($fp, $request . "\r\n\r\n" . $data);
ob_start();
fpassthru($fp);
$response = ob_get_clean();
fclose($fp);
$response = explode("\r\n\r\n", $response, 2);
// var_dump($response);
print htmlspecialchars_decode($response[1]);
require 'happymapper'
require 'pp'
class Item
include HappyMapper
element :title, String
element :scheduledStartDateTime, Time
element :scheduledChannelID, String
element :desiredQualityMode, Integer
element :genreID, Integer
element :reservationCreatorID, Integer
element :titleProtectFlag, Boolean
element :titleNewFlag, Boolean
element :recordingFlag, Boolean
element :recordDestinationID, String
element :recordSize, Integer
element :lastPlaybackTime, Time
element :portableRecordFile, Integer
end
def not_played(items)
items.select { |item| item.lastPlaybackTime.is_a?(String) }
end
def played(items)
items.select { |item| item.lastPlaybackTime.is_a?(Time) }
end
def reject_result_tag(xml)
xml.gsub(/^.*<Result>/, '')
.gsub(%r{</Result>.*$}, '')
end
path = File.expand_path('./recordList.xml')
xml = File.read(path)
xml = reject_result_tag(xml)
# p file = REXML::Document.new(file)
# file = Nokogiri::XML::Builder.with(file)
# File.write(File.expand_path('./recordList.xml'), file)
items = Item.parse(xml)
pp items.select { |item| item.title.include?('マギ') }
=begin
[#<Item:0x007f894786ff88
@desiredQualityMode=100,
@genreID=112,
@lastPlaybackTime=2015-04-17 07:36:22 +0900,
@portableRecordFile=347,
@recordDestinationID="HDD",
@recordSize=2531,
@recordingFlag=false,
@reservationCreatorID=2000,
@scheduledChannelID="0x5c38",
@scheduledStartDateTime=2015-02-06 22:29:47 +0900,
@title="マギ",
@titleNewFlag=false,
@titleProtectFlag=true>,
#<Item:0x007f89478b11b8
@desiredQualityMode=100,
@genreID=112,
@lastPlaybackTime=2015-03-21 13:19:53 +0900,
@portableRecordFile=329,
@recordDestinationID="HDD",
@recordSize=2475,
@recordingFlag=false,
@reservationCreatorID=2000,
@scheduledChannelID="0x5c38",
@scheduledStartDateTime=2015-02-13 22:29:47 +0900,
@title="マギ",
@titleNewFlag=false,
@titleProtectFlag=true>,
#<Item:0x007f89478ee040
@desiredQualityMode=100,
@genreID=112,
@lastPlaybackTime=2015-04-09 03:14:00 +0900,
@portableRecordFile=346,
@recordDestinationID="HDD",
@recordSize=2467,
@recordingFlag=false,
@reservationCreatorID=2000,
@scheduledChannelID="0x5c38",
@scheduledStartDateTime=2015-04-08 01:04:45 +0900,
@title="マギ The kingdom of magic",
@titleNewFlag=true,
@titleProtectFlag=false>,
#<Item:0x007f89479b5aa0
@desiredQualityMode=100,
@genreID=112,
@lastPlaybackTime=2015-04-17 07:54:33 +0900,
@portableRecordFile=328,
@recordDestinationID="HDD",
@recordSize=2362,
@recordingFlag=false,
@reservationCreatorID=2000,
@scheduledChannelID="0x5c38",
@scheduledStartDateTime=2015-04-15 01:04:46 +0900,
@title="マギ The kingdom of magic",
@titleNewFlag=false,
@titleProtectFlag=false>]
=end
#!/bin/sh
php xml_record_list.php > ./recordList.xml
以上是关于sh nasneから取得したxmlを快乐的映射器でパース的主要内容,如果未能解决你的问题,请参考以下文章
SystemTapでMySQL 5.5のDisk I/Oを分析する
ruby twitterで指定ユーザーのツイートを过去200件まで自动取得する。取得したデータは,sqlight3にて保存される。
javascript Vue.jsでEventBusを利用して别にマウントしたコンポーネントやjQueryからイベントを受け取るref:https://qiita.com/inuscript/item
ruby 2015年就职情报サイトから,企业名で検索して绍介ページURLを取得する。
csharp 文字列から长さや,一部分を取得する。半角,全角を区别しない场合はstring.length减で良いが,区别する场合はEncoding.GetByteCountでエンコーディングを使用した
python Python3の的urllibでとあるAPIからJSONを取得したいのですが,そのAPIが高频度で502を返すため的urlopen()をリトライする実装を工夫しています.urllib3は