我有一个媒体播放器,我想将我正在播放的内容发送到 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 所以我需要文件名与实际文件名匹配,而不是替换任何字母。
确保正确编码这些类型的文件名的最佳方法是什么?我试图提供尽可能多的信息,但如果您需要更多信息,请询问。