ピアキャスで受信が終了したチャンネルの一括削除
ピアキャストで配信を見ているといつのまにかチャンネルが大量に増え、peercast.exeを終了しても一覧に残っていることがあります。そこでテンプレートを改造し、受信していないチャンネルを全て停止するリンクを作成しました。
ピアキャストの不思議な仕様対策メモ
- ピアキャストのhtmlテンプレートにjavascriptを記述するには、特殊文字{を{{としなければならない
- 外部jsを呼び出す際に拡張子がjsだと開けない
- chromeを使用してXMLHttpRequestでxmlにアクセスするとresponseXMLがエラーになる
このあたりに注意して作成したのがこちら
relays.html
<html> <head> ...略... <script src="stopall.js.html"></script> </head> <body> ...略... <a href="javascript:void(0);" onClick="stopAllChannel()">全て停止</a> ...略... </body> </html>
stopall.js.html
function stopAllChannel(){{
  var xhr = new XMLHttpRequest();
  xhr.open("GET", "http://127.0.0.1:7144/admin?cmd=viewxml", true);
  xhr.onreadystatechange = function() {{
    if(window.DOMParser){{
      if(xhr.responseText.indexOf("</peercast>")>0){{
          var domParser = new DOMParser();
          var dom = domParser.parseFromString(xhr.responseText, "application/xml");
          onDocument(dom);
          xhr.abort();
      }
    }else{{
      if (xhr.readyState == 4 && xhr.status == 200){{
        onDocument(xhr.responseXML);
      }
    }
  }
  xhr.send();
}
function onDocument(dom){{
  var channels_relayed = dom.getElementsByTagName("channels_relayed")[0];
  var channels = channels_relayed.getElementsByTagName("channel");
  for(var i=0;i<channels.length;i++){{
    var relay = channels[i].getElementsByTagName("relay")[0];
    var status = relay.getAttribute("status");
    if(status!="RECEIVE" && status!="BROADCAST"){{
      var id = channels[i].getAttribute("id");
      stopChannel(id);
    }
  }
  alert("受信していないチャンネルを全て終了しました");
}
function stopChannel(id){{
  var xhr = new XMLHttpRequest();
  xhr.open("GET", "http://127.0.0.1:7144/admin?cmd=stop&id="+id, true);
  xhr.send();
}
2012/03/03 追記
停止が完了する前にリロードしてしまっていたのでリロードしないように修正しました。
ダウンロード:IM0043_html.zip
このfix素晴らしいです!。昔この手のツールがあったのだが配布終了してしまって困っていました。それから何ヶ月も何年もたってこれにたどり着きました。peercastフォルダに上書きでいけました。高度→リレーチャネルに「すべて停止」が追加された?? 気持ちいい。
ありがとうございます。
新しいPeercastStationには再生や受信をしていないチャンネルを自動的に停止する機能があります。(宣伝)