0

我经常访问的一个网站将其整个电视节目表转义/编码<script><head>. 他们没有这个时间表的 RSS 提要,这就是我总是检查它的原因。这段超长代码的第一部分如下:

txt = '%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%0A%3Cchannel_guide%20operating-unit...

整件事就是一个巨大的XML文件。在本地文本编辑器中查看未转义位后,我发现我最喜欢的节目都有自己独特的 5 位系列 ID 号。此外,我还发现HTML整个时间表是动态构建的。

在 unescapedXML中,一个情节的代码块如下:

<episode code="1336454" recording_type="">
<title>NAME OF EPISODE</title>
<description></description>
<series id="12345"/>
<content-rating>Ratings N/A</content-rating>
<duration minutes="120"/>
<show-time premiere_type="" live="Repeat">
<eastern hour="22" minute="00"/>
<mexico-city hour="21" minute="00"/>
<buenos-aries hour="00" minute="00"/>
</show-time>
</episode>

我想做的是...

  1. 使用其唯一的系列 ID 仅过滤我想要的节目。
  2. 将日期时间系列名称(通过系列 ID 映射)和剧集名称导出到<table>我的网站上 - 目前使用 Joomla 2.5 作为 CMS。

如果有人可以就从哪里开始或如何实现这一点给我任何建议,我将非常感激。我目前正在尝试使用Scriptish (Firefox) 和TamperMonkey (Chrome) 在尝试完成此任务时编写本地脚本。


编辑 2013 年 10 月 9 日:我成功地做了一个 Y!txt从外部网站检索 并将其导入XML <title>元素的管道。XML可以在此处查看源:(在view-source:http://bit.ly/1e7O5pS地址栏中复制并粘贴以直接转到原始文本)。我之前忘记提到的另一件事是,外部网站有自己的 XML 解码器脚本。解码器源可以在 Pastebin 上查看:http: //bit.ly/GNdeKu。现在我能够检索信息,我的下一个问题是如何在我的网站上使用外部站点的 XML 解码器并将我的过滤器合并到其中?任何帮助是极大的赞赏。


编辑 2013 年 10 月 9 日:在过去的几个小时里,我取得了一些巨大的进步。这是我作为本地测试人员编写的 Grease/TamperMonkey 脚本:

var showID = {
  61189 : 'Show 1',
  61190 : 'Show 2',
  61393 : 'Show 3',
  61395 : 'Show 4',
  60486 : 'Show 5',
  68253 : 'Show 6'
}

var k = Object.keys(showID);
var n = Object.getOwnPropertyNames(showID);
GM_log(k);

function loadXMLString(txt) {
  if(window.DOMParser) {
    parser=new DOMParser();
    xmlDoc=parser.parseFromString(txt,"text/xml");
  }
  else {
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.async=false;
    xmlDoc.loadXML(txt); 
  }
  return xmlDoc;
}

if(xmlDoc != 'undefined') {
  GM_log(xmlDoc);
  var shows = xmlDoc.getElementsByTagName('series');
  GM_log(shows);
  $(shows).each(function() {
    var myShows = $.grep(this.id.split(' '), function(value) {
      return k.indexOf(value) > -1;
    })[0];
  });
}

我遇到的这个问题是,在控制台中,所有节目都显示出来,而不仅仅是带有特定showID. 我究竟做错了什么?

4

1 回答 1

0

怎么样

function toDOM(xmlStr) {
  var container = document.createElement("DIV");

  // feel free to remove the XML declaration here
  // replacing /<\?xml.*?\?>/ with the empty string
  container.innerHTML = str;
  return container.firstChild;
}

var txt = '%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22iso-8859-1%22%3F%3E%0A%3Cchannel_guide%20operating-unit...';

var dom = toDOM(decodeURIComponent(txt))

var series = dom.querySelectorAll("series[id='12345']")
var episode = series.parentNode;

// and so on

笔记

  • 当然,这会使用浏览器的 HTML 解析器解析您的 XML,但除非 XML 非常复杂(即,使用名称空间或类似的东西),否则您应该没问题。
  • querySelectorAll()在旧平台上不可用。比较http://caniuse.com/#search=querySelectorAll
于 2013-10-08T10:49:58.557 回答