Skip to content

Instantly share code, notes, and snippets.

@yyya-nico
Last active September 24, 2024 12:17
Show Gist options
  • Save yyya-nico/72afd3e9c5cd225792e8046a6ee41d2c to your computer and use it in GitHub Desktop.
Save yyya-nico/72afd3e9c5cd225792e8046a6ee41d2c to your computer and use it in GitHub Desktop.
KonomiTVを見るm3uファイルを生成するNode.jsのスクリプト

KonomiTVを見るm3uファイルを生成するNode.jsのスクリプト

VLC メディアプレイヤー等の任意のプレイヤーで簡単にKonomiTVを選局できるプレイリストファイルを生成します。

image

使い方

  1. スクリプトを実行します。

    node makeKonomitvM3u.mjs
  2. ホストとプレイリスト名が聞かれるので、入力します。
    ホストのポート番号は省略可能です。

    ホストを入力(localhost:7000): 192.168.0.8
    作成するプレイリスト名を入力(KonomiTV): 
    
  3. すると{プレイリスト名}.m3uファイルが生成されます。

    KonomiTV.m3u を作成しました。
    

動画品質について

動画品質はデフォルトで1080pを指定しています。
変更したい場合は引数で指定できます。
例えばnode makeKonomitvM3u.mjs 1080p-60fpsとすると1080p-60fps版のプレイリストが作成できます。

"use strict"
import { stdin as input, stdout as output } from "node:process";
import * as readline from "node:readline/promises";
import * as fs from "node:fs/promises"
const rl = readline.createInterface({ input, output });
const main = async () => {
const host = await rl.question("ホストを入力(localhost:7000): ");
const filename = await rl.question("作成するプレイリスト名を入力(KonomiTV): ") || "KonomiTV";
const [hostname = "localhost", port = 7000] = host.split(":").filter(s => s);
const konomiOrigin = `https://${hostname.replaceAll(".","-")}.local.konomi.tv:${port}`;
const quality = process.argv[2] || '1080p';
const channels = await fetch(`${konomiOrigin}/api/channels`)
.then(response => {
if (response.status !== 200) {
console.log('error or no content', response.status);
}
return response.json();
}).catch(e => {
console.error('Failed to load', e);
return null;
});
const channelsFlat = Object.values(channels).flat();
const channelsMain = channelsFlat.filter(channel => !channel.is_subchannel);
await fs.writeFile(`./${filename}.m3u`,
`#EXTM3U
${channelsMain.map(ch =>
`#EXTINF:-1,${ch.remocon_id} ${ch.name.replace(/\d/g, "")}
${konomiOrigin}/api/streams/live/${ch.display_channel_id}/${quality}/mpegts`
).join("\n")}
`,
"utf-8"
).then(() => {
console.log(`${filename}.m3u を作成しました。`);
});
setTimeout(() => rl.close(), 3000);
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment