再生しているものをtrakt.tvに送信したいメディアプレーヤーがあります。タイトル/パスの外国の文字を除いて、すべて正常に機能します。システムは python 2.7.3 を実行しています
def getStatus(self,ip,timeout=10.0):
oPchStatus = PchStatus()
try:
oResponse = urlopen("http://" + ip + ":8008/playback?arg0=get_current_vod_info",None,timeout)
oPchStatus = self.parseResponse(oResponse.readlines()[0])
return oPchStatus
これは、このようなものを返します。
<?xml version="1.0"?>
<theDavidBox>
<request>
<arg0>get_current_vod_info</arg0>
<module>playback</module>
</request>
<response>
<currentStatus>pause</currentStatus>
<currentTime>3190</currentTime>
<downloadSpeed>0</downloadSpeed>
<fullPath>/opt/sybhttpd/localhost.drives/HARD_DISK/Storage/NAS/Videos/FILMS/A.Haunted.House.(2013)/A Haunted House.avi</fullPath>
<lastPacketTime>0</lastPacketTime>
<mediatype>OTHERS</mediatype>
<seekEnable>true</seekEnable>
<title/>
<totalTime>4860</totalTime>
</response>
<returnValue>0</returnValue>
</theDavidBox>
次のステップでは、上記を使用して、各項目を変数に割り当てます。
class PchStatus:
def __init__(self):
self.status=EnumStatus.NOPLAY
self.fullPath = u""
self.fileName = u""
self.currentTime = 0
self.totalTime = 0
self.percent = 0
self.mediaType = ""
self.currentChapter = 0 # For Blu-ray Disc only
self.totalChapter = 0 # For Blu-ray Disc only
self.error = None
class PchRequestor:
def parseResponse(self, response):
oPchStatus = PchStatus()
try:
response = unescape(response)
oXml = ElementTree.XML(response)
if oXml.tag == "theDavidBox": # theDavidBox should be the root
if oXml.find("returnValue").text == '0' and int(oXml.find("response/totalTime").text) > 90:#Added total time check to avoid scrobble while playing adverts/trailers
oPchStatus.totalTime = int(oXml.find("response/totalTime").text)
oPchStatus.status = oXml.find("response/currentStatus").text
oPchStatus.fullPath = oXml.find("response/fullPath").text
oPchStatus.currentTime = int(oXml.find("response/currentTime").text)
等々。上記で返された xml を使用して、
oPchStatus.totalTime は「4860」になります oPchStatus.status は「一時停止」になります oPchStatus.fullPath は「/opt/sybhttpd/localhost.drives/HARD_DISK/Storage/NAS/Videos/FILMS/A.Haunted.House.(2013)」になります/A Haunted House.avi" oPchStatus.currentTime は "3190" になります
これは、私が言ったように、外国の文字がタイトルに含まれるまではうまくいきます. Le.Fabuleux.Destin.d'Amélie.Poulain.(2001).avi のようなタイトルでは、oPchStatus.fullPath に文字列 "/opt/sybhttpd/localhost.drives/HARD_DISK/Storage/NAS/Videos/Le.Fabuleux. Destin.d'Am\xe9lie.Poulain.(2001).avi"
そしてそうではない
"/opt/sybhttpd/localhost.drives/HARD_DISK/Storage/NAS/Videos/Le.Fabuleux.Destin.d'Amélie.Poulain.(2001).avi"
私がしたいように。
さらにスクリプトには、ファイル名の xml ファイルをスキャンし、FILENAME.watched を作成するルーチンがあるため、ファイル名を実際のファイル名と一致させ、文字を置き換えないようにする必要があります。
これらのタイプのファイル名が適切にエンコードされていることを確認するための最良の方法は何ですか? 可能な限り多くの情報を提供するように努めましたが、さらに情報が必要な場合はお問い合わせください。