0

私が頻繁に使用する Web サイトの 1 つは、テレビのスケジュール全体を 内<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さらに、スケジュール全体が動的に構築されていることも発見しました。

エスケープされていない 内のXMLエピソードのコード ブロックは次のとおりです。

<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>現在 CMS として Joomla 2.5 を使用している私の Web サイトの にエクスポートします。

どこから始めればよいか、またはこれをどのように達成するかについて誰かが私にアドバイスをくれれば、とても感謝しています。私は現在、このタスクを達成しようとするときにローカル スクリプトを作成するために、 Scriptish (Firefox) とTamperMonkey (Chrome) を試しています。


編集 2013 年 10 月 9 日: Y! の作成に成功しました。外部 Web サイトからを取得し、要素txtにインポートするパイプ。ソースはここで表示できます: XML <title>(生のテキストに直接移動するには、アドレス バーにコピー & ペーストします)。もう 1 つ忘れていたのは、外部 Web サイトには独自の XML デコーダー スクリプトがあることです。デコーダーのソースは、Pastebin のhttp://bit.ly/GNdeKuで確認できます。情報を取得できるようになったので、次の質問は、外部サイトの XML デコーダーをどのように利用して、自分の Web サイトにフィルターを組み込むことができるかということです。どんな助けでも大歓迎です。XMLview-source:http://bit.ly/1e7O5pS


EDIT 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 に答える