Merge pull request #19986 from iptv-org/patch-2025.02.4

Patch 2025.02.4
This commit is contained in:
Ismaël Moret
2025-03-01 17:48:00 +01:00
committed by GitHub
29 changed files with 2198 additions and 2919 deletions

View File

@@ -133,7 +133,7 @@ To run scripts use the `npm run <script-name>` command.
- `playlist:lint`: сhecks internal playlists for syntax errors.
- `playlist:deploy`: allows to manually publish all generated via `playlist:generate` playlists. To run the script you must provide your [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) with write access to the repository.
- `readme:update`: updates the list of playlists in [README.md](README.md).
- `report:create`: shows a list of all current requests and their status.
- `report:create`: creates a report on current issues.
- `check`: (shorthand) sequentially runs the `playlist:lint` and `playlist:validate` scripts.
- `format`: (shorthand) runs the `playlist:format` script.
- `update`: (shorthand) sequentially runs the `playlist:generate`, `api:generate` and `readme:update` scripts.

View File

@@ -7,11 +7,15 @@ import validUrl from 'valid-url'
let processedIssues = new Collection()
let streams: Collection
let groupedChannels: Dictionary
let issues: Collection
async function main() {
const logger = new Logger({ disabled: true })
const loader = new IssueLoader()
logger.info('loading issues...')
issues = await loader.load()
logger.info('loading channels from api...')
const dataStorage = new Storage(DATA_DIR)
const channelsContent = await dataStorage.json('channels.json')
@@ -51,8 +55,10 @@ async function main() {
main()
async function removeStreams(loader: IssueLoader) {
const issues = await loader.load({ labels: ['streams:remove', 'approved'] })
issues.forEach((issue: Issue) => {
const requests = issues.filter(
issue => issue.labels.includes('streams:remove') && issue.labels.includes('approved')
)
requests.forEach((issue: Issue) => {
const data = issue.data
if (data.missing('broken_links')) return
@@ -72,8 +78,10 @@ async function removeStreams(loader: IssueLoader) {
}
async function editStreams(loader: IssueLoader) {
const issues = await loader.load({ labels: ['streams:edit', 'approved'] })
issues.forEach((issue: Issue) => {
const requests = issues.filter(
issue => issue.labels.includes('streams:edit') && issue.labels.includes('approved')
)
requests.forEach((issue: Issue) => {
const data = issue.data
if (data.missing('stream_url')) return
@@ -106,8 +114,10 @@ async function editStreams(loader: IssueLoader) {
}
async function addStreams(loader: IssueLoader) {
const issues = await loader.load({ labels: ['streams:add', 'approved'] })
issues.forEach((issue: Issue) => {
const requests = issues.filter(
issue => issue.labels.includes('streams:add') && issue.labels.includes('approved')
)
requests.forEach((issue: Issue) => {
const data = issue.data
if (data.missing('channel_id') || data.missing('stream_url')) return
if (streams.includes((_stream: Stream) => _stream.url === data.getString('stream_url'))) return

View File

@@ -1,9 +1,8 @@
import { Logger, Storage, Collection, Dictionary, File } from '@freearhey/core'
import { Logger, Storage, Collection, Dictionary } from '@freearhey/core'
import { PlaylistParser } from '../../core'
import { Channel, Stream, Blocked } from '../../models'
import { program } from 'commander'
import chalk from 'chalk'
import { transliterate } from 'transliteration'
import _ from 'lodash'
import { DATA_DIR, STREAMS_DIR } from '../../constants'
@@ -42,15 +41,12 @@ async function main() {
const streams = groupedStreams.get(filepath)
if (!streams) continue
const file = new File(filepath)
const [, countryCode] = file.basename().match(/([a-z]{2})(|_.*)\.m3u/i) || [null, '']
const log = new Collection()
const buffer = new Dictionary()
streams.forEach((stream: Stream) => {
const channelNotInDatabase =
const invalidId =
stream.channel && !channels.first((channel: Channel) => channel.id === stream.channel)
if (channelNotInDatabase) {
if (invalidId) {
log.add({
type: 'warning',
line: stream.line,
@@ -58,8 +54,8 @@ async function main() {
})
}
const alreadyOnPlaylist = stream.url && buffer.has(stream.url)
if (alreadyOnPlaylist) {
const duplicate = stream.url && buffer.has(stream.url)
if (duplicate) {
log.add({
type: 'warning',
line: stream.line,
@@ -69,29 +65,22 @@ async function main() {
buffer.set(stream.url, true)
}
const channelId = generateChannelId(stream.name, countryCode)
const blocked = blocklist.first(
blocked =>
stream.channel.toLowerCase() === blocked.channel.toLowerCase() ||
channelId.toLowerCase() === blocked.channel.toLowerCase()
)
const blocked = blocklist.first(blocked => stream.channel === blocked.channel)
if (blocked) {
log.add({
type: 'error',
line: stream.line,
message: `"${stream.name}" is on the blocklist due to claims of copyright holders or NSFW content (${blocked.ref})`
})
if (blocked.reason === 'dmca') {
log.add({
type: 'error',
line: stream.line,
message: `"${stream.channel}" is on the blocklist due to claims of copyright holders (${blocked.ref})`
})
} else if (blocked.reason === 'nsfw') {
log.add({
type: 'error',
line: stream.line,
message: `"${stream.channel}" is on the blocklist due to NSFW content (${blocked.ref})`
})
}
}
const channel_NSFW = stream.channel && channels.first((channel: Channel) => (channel.id === stream.channel) && (channel.isNSFW === true))
if(channel_NSFW) {
log.add({
type: 'error',
line: stream.line,
message: `Since January 30th, 2024, NSFW channels are no longer allowed in our playlists. Please see https://github.com/iptv-org/iptv/issues/15723 for further information.`
})
}
})
if (log.notEmpty()) {
@@ -124,17 +113,3 @@ async function main() {
}
main()
function generateChannelId(name: string, code: string) {
if (!name || !code) return ''
name = name.replace(/ *\([^)]*\) */g, '')
name = name.replace(/ *\[[^)]*\] */g, '')
name = name.replace(/\+/gi, 'Plus')
name = name.replace(/[^a-z\d]+/gi, '')
name = name.trim()
name = transliterate(name)
code = code.toLowerCase()
return `${name}.${code}`
}

View File

@@ -9,31 +9,34 @@ async function main() {
const storage = new Storage(DATA_DIR)
logger.info('loading channels from api...')
const channelsContent = await storage.json('channels.json')
const groupedChannels = new Collection(channelsContent)
.map(data => new Channel(data))
.groupBy((channel: Channel) => channel.id)
logger.info('loading blocklist from api...')
const blocklistContent = await storage.json('blocklist.json')
const groupedBlocklist = new Collection(blocklistContent)
.map(data => new Blocked(data))
.groupBy((blocked: Blocked) => blocked.channel)
logger.info('loading issues...')
const issues = await loader.load()
logger.info('loading streams...')
const streamsStorage = new Storage(STREAMS_DIR)
const parser = new PlaylistParser({ storage: streamsStorage })
const files = await streamsStorage.list('**/*.m3u')
const streams = await parser.parse(files)
const groupedStreams = streams.groupBy((stream: Stream) => stream.url)
const streamsGroupedByUrl = streams.groupBy((stream: Stream) => stream.url)
const streamsGroupedByChannel = streams.groupBy((stream: Stream) => stream.channel)
logger.info('loading channels from api...')
const channelsContent = await storage.json('channels.json')
const channelsGroupedById = new Collection(channelsContent)
.map(data => new Channel(data))
.groupBy((channel: Channel) => channel.id)
logger.info('loading blocklist from api...')
const blocklistContent = await storage.json('blocklist.json')
const blocklistGroupedByChannel = new Collection(blocklistContent)
.map(data => new Blocked(data))
.groupBy((blocked: Blocked) => blocked.channel)
logger.info('creating report...')
let report = new Collection()
logger.info('checking streams:add requests...')
const addRequests = await loader.load({ labels: ['streams:add'] })
const buffer = new Dictionary()
const addRequests = issues.filter(issue => issue.labels.includes('streams:add'))
const addRequestsBuffer = new Dictionary()
addRequests.forEach((issue: Issue) => {
const channelId = issue.data.getString('channel_id') || undefined
const streamUrl = issue.data.getString('stream_url')
@@ -42,24 +45,25 @@ async function main() {
issueNumber: issue.number,
type: 'streams:add',
channelId,
status: undefined
streamUrl,
status: 'pending'
})
if (!channelId) result.set('status', 'missing_id')
else if (!streamUrl) result.set('status', 'missing_link')
else if (groupedBlocklist.has(channelId)) result.set('status', 'blocked')
else if (groupedChannels.missing(channelId)) result.set('status', 'invalid_id')
else if (groupedStreams.has(streamUrl)) result.set('status', 'fullfilled')
else if (buffer.has(streamUrl)) result.set('status', 'duplicate')
else if (blocklistGroupedByChannel.has(channelId)) result.set('status', 'blocked')
else if (channelsGroupedById.missing(channelId)) result.set('status', 'wrong_id')
else if (streamsGroupedByUrl.has(streamUrl)) result.set('status', 'on_playlist')
else if (addRequestsBuffer.has(streamUrl)) result.set('status', 'duplicate')
else result.set('status', 'pending')
buffer.set(streamUrl, true)
addRequestsBuffer.set(streamUrl, true)
report.add(result.data())
})
logger.info('checking streams:edit requests...')
const editRequests = await loader.load({ labels: ['streams:edit'] })
const editRequests = issues.filter(issue => issue.labels.find(label => label === 'streams:edit'))
editRequests.forEach((issue: Issue) => {
const channelId = issue.data.getString('channel_id') || undefined
const streamUrl = issue.data.getString('stream_url') || undefined
@@ -68,37 +72,86 @@ async function main() {
issueNumber: issue.number,
type: 'streams:edit',
channelId,
status: undefined
streamUrl,
status: 'pending'
})
if (!streamUrl) result.set('status', 'missing_link')
else if (groupedStreams.missing(streamUrl)) result.set('status', 'invalid_link')
else if (channelId && groupedChannels.missing(channelId)) result.set('status', 'invalid_id')
else result.set('status', 'pending')
else if (streamsGroupedByUrl.missing(streamUrl)) result.set('status', 'invalid_link')
else if (channelId && channelsGroupedById.missing(channelId)) result.set('status', 'invalid_id')
report.add(result.data())
})
logger.info('checking broken streams reports...')
const brokenStreamReports = await loader.load({ labels: ['broken stream'] })
const brokenStreamReports = issues.filter(issue =>
issue.labels.find(label => label === 'broken stream')
)
brokenStreamReports.forEach((issue: Issue) => {
const brokenLinks = issue.data.getString('broken_links') || undefined
const brokenLinks = issue.data.getArray('broken_links') || []
if (!brokenLinks.length) {
const result = new Dictionary({
issueNumber: issue.number,
type: 'broken stream',
channelId: undefined,
streamUrl: undefined,
status: 'missing_link'
})
report.add(result.data())
} else {
for (const streamUrl of brokenLinks) {
const result = new Dictionary({
issueNumber: issue.number,
type: 'broken stream',
channelId: undefined,
streamUrl: undefined,
status: 'pending'
})
if (streamsGroupedByUrl.missing(streamUrl)) {
result.set('streamUrl', streamUrl)
result.set('status', 'wrong_link')
}
report.add(result.data())
}
}
})
logger.info('checking channel search requests...')
const channelSearchRequests = issues.filter(issue =>
issue.labels.find(label => label === 'channel search')
)
const channelSearchRequestsBuffer = new Dictionary()
channelSearchRequests.forEach((issue: Issue) => {
const channelId = issue.data.getString('channel_id')
const result = new Dictionary({
issueNumber: issue.number,
type: 'broken stream',
channelId: undefined,
status: undefined
type: 'channel search',
channelId,
streamUrl: undefined,
status: 'pending'
})
if (!brokenLinks) result.set('status', 'missing_link')
else if (groupedStreams.missing(brokenLinks)) result.set('status', 'invalid_link')
else result.set('status', 'pending')
if (!channelId) result.set('status', 'missing_id')
else if (channelsGroupedById.missing(channelId)) result.set('status', 'invalid_id')
else if (channelSearchRequestsBuffer.has(channelId)) result.set('status', 'duplicate')
else if (blocklistGroupedByChannel.has(channelId)) result.set('status', 'blocked')
else if (streamsGroupedByChannel.has(channelId)) result.set('status', 'fulfilled')
else {
const channelData = channelsGroupedById.get(channelId)
if (channelData.length && channelData[0].closed) result.set('status', 'closed')
}
channelSearchRequestsBuffer.set(channelId, true)
report.add(result.data())
})
report = report.orderBy(item => item.issueNumber)
report = report.orderBy(item => item.issueNumber).filter(item => item.status !== 'pending')
console.table(report.all())
}

View File

@@ -27,6 +27,6 @@ export class IssueData {
getArray(key: string): string[] {
const deleteSymbol = '~'
return this._data.get(key) === deleteSymbol ? [] : this._data.get(key).split(';')
return this._data.get(key) === deleteSymbol ? [] : this._data.get(key).split('\r\n')
}
}

View File

@@ -9,33 +9,14 @@ const CustomOctokit = Octokit.plugin(paginateRest, restEndpointMethods)
const octokit = new CustomOctokit()
export class IssueLoader {
async load({ labels }: { labels: string[] | string }) {
labels = Array.isArray(labels) ? labels.join(',') : labels
async load(props?: { labels: string | string[] }) {
let labels = ''
if (props && props.labels) {
labels = Array.isArray(props.labels) ? props.labels.join(',') : props.labels
}
let issues: object[] = []
if (TESTING) {
switch (labels) {
case 'streams:add':
issues = (await import('../../tests/__data__/input/issues/streams_add.js')).default
break
case 'streams:edit':
issues = (await import('../../tests/__data__/input/issues/streams_edit.js')).default
break
case 'broken stream':
issues = (await import('../../tests/__data__/input/issues/broken_stream.js')).default
break
case 'streams:add,approved':
issues = (await import('../../tests/__data__/input/issues/streams_add_approved.js'))
.default
break
case 'streams:edit,approved':
issues = (await import('../../tests/__data__/input/issues/streams_edit_approved.js'))
.default
break
case 'streams:remove,approved':
issues = (await import('../../tests/__data__/input/issues/streams_remove_approved.js'))
.default
break
}
issues = (await import('../../tests/__data__/input/issues/all.js')).default
} else {
issues = await octokit.paginate(octokit.rest.issues.listForRepo, {
owner: OWNER,

View File

@@ -25,11 +25,11 @@ const FIELDS = new Dictionary({
export class IssueParser {
parse(issue: { number: number; body: string; labels: { name: string }[] }): Issue {
const fields = issue.body.split('###')
const fields = typeof issue.body === 'string' ? issue.body.split('###') : []
const data = new Dictionary()
fields.forEach((field: string) => {
const parsed = field.split(/\r?\n/).filter(Boolean)
const parsed = typeof field === 'string' ? field.split(/\r?\n/).filter(Boolean) : []
let _label = parsed.shift()
_label = _label ? _label.trim() : ''
let _value = parsed.join('\r\n')

View File

@@ -1,14 +1,17 @@
type BlockedProps = {
channel: string
reason: string
ref: string
}
export class Blocked {
channel: string
reason: string
ref: string
constructor({ ref, channel }: BlockedProps) {
constructor({ ref, reason, channel }: BlockedProps) {
this.channel = channel
this.reason = reason
this.ref = ref
}
}

View File

@@ -147,7 +147,7 @@ export class Stream {
toJSON() {
return {
channel: this.channel,
channel: this.channel || null,
url: this.url,
timeshift: this.timeshift || null,
http_referrer: this.httpReferrer || null,

View File

@@ -36,15 +36,17 @@ export class CountryTable implements Table {
const subdivision = subdivisions.first(
(subdivision: Subdivision) => subdivision.code === code
)
const country = countries.first(
(country: Country) => country.code === subdivision.country
)
data.add([
`${country.name}/${subdivision.name}`,
`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${subdivision.name}`,
logItem.count,
`<code>https://iptv-org.github.io/iptv/${logItem.filepath}</code>`
])
if (subdivision) {
const country = countries.first(
(country: Country) => country.code === subdivision.country
)
data.add([
`${country.name}/${subdivision.name}`,
`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${subdivision.name}`,
logItem.count,
`<code>https://iptv-org.github.io/iptv/${logItem.filepath}</code>`
])
}
} else if (countryCode === 'INT') {
data.add([
'ZZ',

View File

@@ -1 +1 @@
[{"channel":"","url":"http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":"","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8","timeshift":null,"http_referrer":"http://imn.iq","user_agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"},{"channel":"AndorraTV.ad","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":"BBCNews.uk","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":"LDPRTV.ru","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":"MeteoMedia.ca","url":"http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":"VisitXTV.nl","url":"https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":"Zoo.ad","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/zoo","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":"Zoo.ad","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/zoo_shift","timeshift":"-4.5","http_referrer":null,"user_agent":null}]
[{"channel":null,"url":"http://51.15.246.58:8081/daawahtv/daawahtv2/playlist.m3u8","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":null,"url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index2.m3u8","timeshift":null,"http_referrer":"http://imn.iq","user_agent":"Mozilla/5.0 (iPhone; CPU iPhone OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"},{"channel":"AndorraTV.ad","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/atv","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":"BBCNews.uk","url":"http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":"LDPRTV.ru","url":"http://46.46.143.222:1935/live/mp4:ldpr.stream/blocked.m3u8","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":"MeteoMedia.ca","url":"http://encodercdn1.frontline.ca/encoder181/output/Meteo_Media_720p/playlist.m3u8","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":"VisitXTV.nl","url":"https://stream.visit-x.tv/vxtv/ngrp:live_all/30fps.m3u8","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":"Zoo.ad","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/zoo","timeshift":null,"http_referrer":null,"user_agent":null},{"channel":"Zoo.ad","url":"https://iptv-all.lanesh4d0w.repl.co/andorra/zoo_shift","timeshift":"-4.5","http_referrer":null,"user_agent":null}]

View File

@@ -1,5 +0,0 @@
#EXTM3U
#EXTINF:-1 tvg-id="TV3.my" user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246",TV3 (Vertical) (720p) [Geo-blocked]
#EXTVLCOPT:http-referrer=https://example.com/
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246
https://live-streams-ssai-01.tonton.com.my/live/2dd2b7cd-1b34-4871-b669-57b5c9beca23/live.isml/.m3u8

View File

@@ -3,3 +3,5 @@
http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (480p) [Geo-blocked]
http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8
#EXTINF:-1 tvg-id="BeanoTV.uk",Beano TV
https://a5b4bacecd47433dad06d3189fc7422e.mediatailor.us-east-1.amazonaws.com/v1/manifest/04fd913bb278d8775298c26fdca9d9841f37601f/RakutenTV-eu_BeanoTV/b1f233d5-847c-437d-aa4f-f73e67a85323/2.m3u8

View File

@@ -2,3 +2,5 @@
#EXTINF:-1 tvg-id="BBCAmericaEast.us" tvg-shift="-4" user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246",BBC America East (720p)
#EXTVLCOPT:http-user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246
https://servilive.com:3126/live/tele2000live.m3u8
#EXTINF:-1 tvg-id="FastTV.us",Fast TV
https://3fa797d5.wurl.com/manifest/f36d25e7e52f1ba8d7e56eb859c636563214f541/T05PX01vdG9yVHJlbmRGYXN0VFZfSExT/b5e5e0e2-12b3-4312-93c9-c0a7c50b41ca/4.m3u8

View File

@@ -1 +1 @@
[{"channel":"FoxSports1.us","ref":"https://github.com/iptv-org/iptv/issues/0000"},{"channel":"FoxSports2Asia.us","ref":"https://github.com/iptv-org/iptv/issues/0000"},{"channel":"TVN.pl","ref":"https://github.com/iptv-org/iptv/issues/0000"},{"channel":"TV3.my","ref":"https://github.com/iptv-org/iptv/issues/0000"}]
[{"channel":"FoxSports1.us","reason":"dmca","ref":"https://github.com/iptv-org/iptv/issues/0001"},{"channel":"FoxSports2Asia.us","reason":"dmca","ref":"https://github.com/iptv-org/iptv/issues/0002"},{"channel":"TVN.pl","reason":"nsfw","ref":"https://github.com/iptv-org/iptv/issues/0003"},{"channel":"TV3.my","reason":"dmca","ref":"https://github.com/iptv-org/iptv/issues/0004"}]

View File

@@ -290,5 +290,904 @@
"replaced_by": null,
"website": null,
"logo": "https://i.imgur.com/adjRrVx.png"
},
{
"id": "ATVPlus.pe",
"name": "ATV+",
"alt_names": [],
"network": null,
"owners": [
"Grupo ATV"
],
"country": "PE",
"subdivision": "PE-LIM",
"city": "Lima",
"broadcast_area": [
"c/PE"
],
"languages": [
"spa"
],
"categories": [
"news"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://www.atv.pe/",
"logo": "https://i.imgur.com/fY9256H.png"
},
{
"id": "BeanoTV.uk",
"name": "Beano TV",
"alt_names": [],
"network": null,
"owners": [],
"country": "UK",
"subdivision": null,
"city": "London",
"broadcast_area": [
"c/UK"
],
"languages": [
"eng"
],
"categories": [
"series"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://www.beanostudios.com/",
"logo": "https://i.imgur.com/IKHFZDJ.png"
},
{
"id": "ATX.jp",
"name": "AT-X",
"alt_names": [
"アニメシアターX"
],
"network": null,
"owners": [
"AT-X Inc"
],
"country": "JP",
"subdivision": null,
"city": "Tokyo",
"broadcast_area": [
"c/JP"
],
"languages": [
"jpn"
],
"categories": [
"animation"
],
"is_nsfw": false,
"launched": "1997-12-24",
"closed": null,
"replaced_by": null,
"website": "http://www.at-x.com/",
"logo": "https://i.imgur.com/turWday.png"
},
{
"id": "AajTak.in",
"name": "Aaj Tak",
"alt_names": [],
"network": null,
"owners": [
"Living Media"
],
"country": "IN",
"subdivision": null,
"city": "Noida",
"broadcast_area": [
"c/IN",
"c/UK"
],
"languages": [
"hin"
],
"categories": [
"news"
],
"is_nsfw": false,
"launched": "2000-12-31",
"closed": null,
"replaced_by": null,
"website": "https://www.aajtak.in/livetv",
"logo": "https://i.imgur.com/RpIdCB3.png"
},
{
"id": "Weathernews.jp",
"name": "Weathernews",
"alt_names": [],
"network": null,
"owners": [],
"country": "JP",
"subdivision": null,
"city": null,
"broadcast_area": [
"c/JP"
],
"languages": [
"jpn"
],
"categories": [
"weather"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": null,
"logo": "https://i.imgur.com/A8uRSTS.png"
},
{
"id": "MethTV.lk",
"name": "Meth TV",
"alt_names": [],
"network": null,
"owners": [
"Meth Lanka Private Limited"
],
"country": "LK",
"subdivision": null,
"city": "Athurugiriya",
"broadcast_area": [
"c/LK"
],
"languages": [
"tam"
],
"categories": [
"religious"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://methtv.lk/",
"logo": "https://i.imgur.com/jZaOFxI.png"
},
{
"id": "Match4.hu",
"name": "Match4",
"alt_names": [],
"network": null,
"owners": [],
"country": "HU",
"subdivision": null,
"city": null,
"broadcast_area": [
"c/HU"
],
"languages": [
"hun"
],
"categories": [
"sports"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": null,
"logo": "https://i.imgur.com/hzexBLX.png"
},
{
"id": "FastTV.us",
"name": "Fast TV",
"alt_names": [
"MotorTrend Fast TV"
],
"network": null,
"owners": [
"Warner Brothers",
"MotorTrend"
],
"country": "US",
"subdivision": null,
"city": null,
"broadcast_area": [
"c/US"
],
"languages": [
"eng"
],
"categories": [],
"is_nsfw": false,
"launched": "2022-10-26",
"closed": null,
"replaced_by": null,
"website": "https://watch.motortrend.com/",
"logo": "https://us1-prod-images.disco-api.com/2020/7/13/4f26aaf2-a993-480d-9675-0d501fb8d86f.png?bf=0&f=png&p=true&q=85&w=250"
},
{
"id": "MCOTHD.th",
"name": "MCOT HD",
"alt_names": [
"บริษัท อสมท จำกัด (มหาชน)"
],
"network": "MCOT",
"owners": [
"Ministry of Finance"
],
"country": "TH",
"subdivision": null,
"city": "Bangkok",
"broadcast_area": [
"c/TH"
],
"languages": [
"tha"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": "1955-06-24",
"closed": null,
"replaced_by": null,
"website": "https://tv.mcot.net/mcothd",
"logo": "https://i.imgur.com/ejPxGmU.png"
},
{
"id": "AmarinTV.th",
"name": "Amarin TV",
"alt_names": [
"อมรินทร์ทีวี เอชดี ช่อง 34"
],
"network": null,
"owners": [
"Amarin Television"
],
"country": "TH",
"subdivision": null,
"city": "Bangkok",
"broadcast_area": [
"c/TH"
],
"languages": [
"tha"
],
"categories": [
"entertainment"
],
"is_nsfw": false,
"launched": "2012-12-01",
"closed": null,
"replaced_by": null,
"website": "https://www.amarintv.com/",
"logo": "https://static.wikia.nocookie.net/logopedia/images/f/ff/Amarin_TV_2015.svg/revision/latest/scale-to-width-down/512"
},
{
"id": "France2.fr",
"name": "France 2",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": "1959-09-10",
"closed": null,
"replaced_by": null,
"website": "https://www.france.tv/france-2/",
"logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/5/53/France_2_2018.svg/512px-France_2_2018.svg.png"
},
{
"id": "France3.fr",
"name": "France 3",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": "1972-12-31",
"closed": null,
"replaced_by": null,
"website": "https://www.france.tv/france-3/",
"logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/France_3_2018.svg/512px-France_3_2018.svg.png"
},
{
"id": "France5.fr",
"name": "France 5",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": "1994-12-13",
"closed": null,
"replaced_by": null,
"website": "https://www.france.tv/france-5/",
"logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/5/50/France_5_2018.svg/512px-France_5_2018.svg.png"
},
{
"id": "France3Aquitaine.fr",
"name": "France 3 Aquitaine",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": "1962-01-01",
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/nouvelle-aquitaine/",
"logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/France_3_Aquitaine_-_Logo_2018.svg/512px-France_3_Aquitaine_-_Logo_2018.svg.png"
},
{
"id": "France3Auvergne.fr",
"name": "France 3 Auvergne",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/auvergne-rhone-alpes/",
"logo": "https://i.imgur.com/OOEHRei.png"
},
{
"id": "France3BasseNormandie.fr",
"name": "France 3 Basse-Normandie",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/normandie/",
"logo": "https://i.imgur.com/nTM78Ig.png"
},
{
"id": "France3Bourgogne.fr",
"name": "France 3 Bourgogne",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": "1965-11-15",
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/bourgogne-franche-comte/",
"logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/7/77/France_3_Bourgogne_-_Logo_2018.svg/512px-France_3_Bourgogne_-_Logo_2018.svg.png"
},
{
"id": "France3Bretagne.fr",
"name": "France 3 Bretagne",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/bretagne/",
"logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/c/c2/France_3_Bretagne_-_Logo_2018.svg/512px-France_3_Bretagne_-_Logo_2018.svg.png"
},
{
"id": "France3CentreValdeLoire.fr",
"name": "France 3 Centre-Val de Loire",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/centre-val-de-loire/",
"logo": "https://i.imgur.com/jDh4rUk.png"
},
{
"id": "France3ChampagneArdenne.fr",
"name": "France 3 Champagne-Ardenne",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/grand-est/",
"logo": "https://i.imgur.com/V9nhfLC.png"
},
{
"id": "France3CorseViaStella.fr",
"name": "France 3 Corse Via Stella",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/corse/",
"logo": "https://i.imgur.com/Sx9VLAt.png"
},
{
"id": "France3CotedAzur.fr",
"name": "France 3 Cote d'Azur",
"alt_names": [
"France 3 Côte d'Azur"
],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/provence-alpes-cote-d-azur/",
"logo": "https://i.imgur.com/dQC6Rm3.png"
},
{
"id": "France3FrancheComte.fr",
"name": "France 3 Franche-Comte",
"alt_names": [
"France 3 Franche-Comté"
],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/bourgogne-franche-comte/",
"logo": "https://i.imgur.com/41b7194.png"
},
{
"id": "France3HauteNormandie.fr",
"name": "France 3 Haute-Normandie",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/normandie/",
"logo": "https://i.imgur.com/nTM78Ig.png"
},
{
"id": "France3NouvelleAquitaine.fr",
"name": "France 3 Nouvelle-Aquitaine",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/nouvelle-aquitaine/",
"logo": "https://i.imgur.com/ScAQW1B.png"
},
{
"id": "France3ProvenceAlpes.fr",
"name": "France 3 Provence-Alpes",
"alt_names": [],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/provence-alpes-cote-d-azur/",
"logo": "https://i.imgur.com/W6TyDLx.png"
},
{
"id": "France3RhoneAlpes.fr",
"name": "France 3 Rhone-Alpes",
"alt_names": [
"France 3 Rhône-Alpes"
],
"network": null,
"owners": [
"France Télévisions"
],
"country": "FR",
"subdivision": null,
"city": "Paris",
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://france3-regions.francetvinfo.fr/auvergne-rhone-alpes/",
"logo": "https://i.imgur.com/XIdPu3o.png"
},
{
"id": "TF1.fr",
"name": "TF1",
"alt_names": [
"Télévision française 1"
],
"network": null,
"owners": [],
"country": "FR",
"subdivision": null,
"city": null,
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"entertainment"
],
"is_nsfw": false,
"launched": "1975-01-06",
"closed": null,
"replaced_by": null,
"website": "https://www.tf1.fr",
"logo": "https://i.imgur.com/QxHt9NC.png"
},
{
"id": "TF1SeriesFilms.fr",
"name": "TF1 Series Films",
"alt_names": [
"TF1 Séries Films"
],
"network": null,
"owners": [
"TF1 Group"
],
"country": "FR",
"subdivision": null,
"city": null,
"broadcast_area": [
"c/FR"
],
"languages": [
"fra"
],
"categories": [
"movies"
],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://www.tf1.fr/tf1-series-films",
"logo": "https://i.imgur.com/4CJIDKQ.png"
},
{
"id": "TMC.fr",
"name": "TMC",
"alt_names": [],
"network": null,
"owners": [
"Groupe TF1"
],
"country": "FR",
"subdivision": null,
"city": null,
"broadcast_area": [
"c/FR",
"c/MC"
],
"languages": [
"fra"
],
"categories": [
"general"
],
"is_nsfw": false,
"launched": "1954-11-19",
"closed": null,
"replaced_by": null,
"website": "https://www.tf1.fr/tmc",
"logo": "https://upload.wikimedia.org/wikipedia/en/thumb/5/54/TMC_logo.svg/512px-TMC_logo.svg.png"
},
{
"id": "TFX.fr",
"name": "TFX",
"alt_names": [],
"network": null,
"owners": [],
"country": "FR",
"subdivision": null,
"city": null,
"broadcast_area": [
"c/FR"
],
"languages": [
"fra",
"eng"
],
"categories": [],
"is_nsfw": false,
"launched": null,
"closed": null,
"replaced_by": null,
"website": "https://www.tf1.fr/tfx",
"logo": "https://i.imgur.com/d91GcVf.png"
},
{
"id": "ManoramaNews.in",
"name": "Manorama News",
"alt_names": [],
"network": "Malayala Manorama Television",
"owners": [
"Malayala Manorama Group"
],
"country": "IN",
"subdivision": null,
"city": "Kottayam",
"broadcast_area": [
"c/IN"
],
"languages": [
"mal"
],
"categories": [
"news"
],
"is_nsfw": false,
"launched": "2006-08-17",
"closed": null,
"replaced_by": null,
"website": "https://www.manoramanews.com",
"logo": "https://i.imgur.com/adjRrVx.png"
},
{
"id": "13thStreet.au",
"name": "13th Street",
"alt_names": [],
"network": null,
"owners": [
"NBCUniversal"
],
"country": "AU",
"subdivision": null,
"city": "New York City",
"broadcast_area": [
"c/AU"
],
"languages": [
"eng"
],
"categories": [
"entertainment"
],
"is_nsfw": false,
"launched": "2009-11-15",
"closed": "2019-12-31",
"replaced_by": "Sleuth.au",
"website": "http://www.13thstreet.com.au/",
"logo": "https://upload.wikimedia.org/wikipedia/commons/thumb/0/0c/13th_street_logo_uk_master_rgb_black.png/512px-13th_street_logo_uk_master_rgb_black.png"
}
]

View File

@@ -1,81 +0,0 @@
module.exports = [
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/labels{/name}',
comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/comments',
events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/events',
html_url: 'https://github.com/iptv-org/iptv/issues/14140',
id: 1881649602,
node_id: 'I_kwDOCWUK8M5wJ7HC',
number: 14140,
title: 'Broken: RIK HD Cyprus',
user: {
login: 'ROBGagn',
id: 124619576,
node_id: 'U_kgDOB22LOA',
avatar_url: 'https://avatars.githubusercontent.com/u/124619576?v=4',
gravatar_id: '',
url: 'https://api.github.com/users/ROBGagn',
html_url: 'https://github.com/ROBGagn',
followers_url: 'https://api.github.com/users/ROBGagn/followers',
following_url: 'https://api.github.com/users/ROBGagn/following{/other_user}',
gists_url: 'https://api.github.com/users/ROBGagn/gists{/gist_id}',
starred_url: 'https://api.github.com/users/ROBGagn/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/ROBGagn/subscriptions',
organizations_url: 'https://api.github.com/users/ROBGagn/orgs',
repos_url: 'https://api.github.com/users/ROBGagn/repos',
events_url: 'https://api.github.com/users/ROBGagn/events{/privacy}',
received_events_url: 'https://api.github.com/users/ROBGagn/received_events',
type: 'User',
site_admin: false
},
labels: [
{
id: 1707513547,
node_id: 'MDU6TGFiZWwxNzA3NTEzNTQ3',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/broken%20stream',
name: 'broken stream',
color: 'FBCA04',
default: false,
description: 'Stream is not working properly'
},
{
id: 3241837512,
node_id: 'MDU6TGFiZWwzMjQxODM3NTEy',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/CY',
name: 'CY',
color: '90FA7B',
default: false,
description: 'Cyprus'
}
],
state: 'open',
locked: false,
assignee: null,
assignees: [],
milestone: null,
comments: 0,
created_at: '2023-09-05T10:09:04Z',
updated_at: '2023-09-07T00:50:06Z',
closed_at: null,
author_association: 'NONE',
active_lock_reason: null,
body: '### Broken Link\n\nhttp://l6.cloudskep.com/rikcy/rikhd/playlist.m3u8\n\n### What happened to the stream?\n\nNot loading\n\n### Possible Replacement (optional)\n\nhttp://l6.cloudskep.com/rikcy/rikhd/playlist2.m3u8\n\n### Notes (optional)\n\nToken needed...\r\nSame issue with RIK 1 and 2. May happen in the future with ANT1 Cyprus, Sigma and Omega.\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
reactions: {
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/reactions',
total_count: 0,
'+1': 0,
'-1': 0,
laugh: 0,
hooray: 0,
confused: 0,
heart: 0,
rocket: 0,
eyes: 0
},
timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14140/timeline',
performed_via_github_app: null,
state_reason: null
}
]

View File

@@ -1,406 +0,0 @@
module.exports = [
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/labels{/name}',
comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/comments',
events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/events',
html_url: 'https://github.com/iptv-org/iptv/issues/14179',
id: 1884926953,
node_id: 'I_kwDOCWUK8M5wWbPp',
number: 14179,
title: 'Add: Manorama News',
user: {
login: 'freearhey',
id: 7253922,
node_id: 'MDQ6VXNlcjcyNTM5MjI=',
avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4',
gravatar_id: '',
url: 'https://api.github.com/users/freearhey',
html_url: 'https://github.com/freearhey',
followers_url: 'https://api.github.com/users/freearhey/followers',
following_url: 'https://api.github.com/users/freearhey/following{/other_user}',
gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}',
starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions',
organizations_url: 'https://api.github.com/users/freearhey/orgs',
repos_url: 'https://api.github.com/users/freearhey/repos',
events_url: 'https://api.github.com/users/freearhey/events{/privacy}',
received_events_url: 'https://api.github.com/users/freearhey/received_events',
type: 'User',
site_admin: false
},
labels: [
{
id: 1694119113,
node_id: 'MDU6TGFiZWwxNjk0MTE5MTEz',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/IN',
name: 'IN',
color: 'd8139a',
default: false,
description: 'India'
},
{
id: 5923508587,
node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
name: 'streams:add',
color: '017ff9',
default: false,
description: 'Request to add a new link to a playlist'
}
],
state: 'open',
locked: false,
assignee: null,
assignees: [],
milestone: null,
comments: 0,
created_at: '2023-09-07T00:38:55Z',
updated_at: '2023-09-07T00:48:32Z',
closed_at: null,
author_association: 'COLLABORATOR',
active_lock_reason: null,
body: '### Channel ID\n\nManoramaNews.in\n\n### Stream URL\n\nhttps://ythls.onrender.com/channel/UCP0uG-mcMImgKnJz-VjJZmQ.m3u8\n\n### Label\n\nNot 24/7\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv/issues/14007#issuecomment-1686942043\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
reactions: {
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/reactions',
total_count: 0,
'+1': 0,
'-1': 0,
laugh: 0,
hooray: 0,
confused: 0,
heart: 0,
rocket: 0,
eyes: 0
},
timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14179/timeline',
performed_via_github_app: null,
state_reason: null
},
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/labels{/name}',
comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/comments',
events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/events',
html_url: 'https://github.com/iptv-org/iptv/issues/14178',
id: 1884922249,
node_id: 'I_kwDOCWUK8M5wWaGJ',
number: 14178,
title: 'Add: TV3',
user: {
login: 'freearhey',
id: 7253922,
node_id: 'MDQ6VXNlcjcyNTM5MjI=',
avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4',
gravatar_id: '',
url: 'https://api.github.com/users/freearhey',
html_url: 'https://github.com/freearhey',
followers_url: 'https://api.github.com/users/freearhey/followers',
following_url: 'https://api.github.com/users/freearhey/following{/other_user}',
gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}',
starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions',
organizations_url: 'https://api.github.com/users/freearhey/orgs',
repos_url: 'https://api.github.com/users/freearhey/repos',
events_url: 'https://api.github.com/users/freearhey/events{/privacy}',
received_events_url: 'https://api.github.com/users/freearhey/received_events',
type: 'User',
site_admin: false
},
labels: [
{
id: 1912922147,
node_id: 'MDU6TGFiZWwxOTEyOTIyMTQ3',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/MY',
name: 'MY',
color: 'ea59cf',
default: false,
description: 'Malaysia'
},
{
id: 5923508587,
node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
name: 'streams:add',
color: '017ff9',
default: false,
description: 'Request to add a new link to a playlist'
}
],
state: 'open',
locked: false,
assignee: null,
assignees: [],
milestone: null,
comments: 1,
created_at: '2023-09-07T00:30:51Z',
updated_at: '2023-09-07T00:48:23Z',
closed_at: null,
author_association: 'COLLABORATOR',
active_lock_reason: null,
body: '### Channel ID\n\nTV3.my\n\n### Stream URL\n\nhttps://live-streams-ssai-01.tonton.com.my/live/2dd2b7cd-1b34-4871-b669-57b5c9beca23/live.isml/.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv/issues/14063#issuecomment-1695783106\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
reactions: {
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/reactions',
total_count: 0,
'+1': 0,
'-1': 0,
laugh: 0,
hooray: 0,
confused: 0,
heart: 0,
rocket: 0,
eyes: 0
},
timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14178/timeline',
performed_via_github_app: null,
state_reason: null
},
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14177',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14177/labels{/name}',
comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14177/comments',
events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14177/events',
html_url: 'https://github.com/iptv-org/iptv/issues/14177',
id: 1884920274,
node_id: 'I_kwDOCWUK8M5wWZnS',
number: 14177,
title: 'Add: Temple University TV',
user: {
login: 'freearhey',
id: 7253922,
node_id: 'MDQ6VXNlcjcyNTM5MjI=',
avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4',
gravatar_id: '',
url: 'https://api.github.com/users/freearhey',
html_url: 'https://github.com/freearhey',
followers_url: 'https://api.github.com/users/freearhey/followers',
following_url: 'https://api.github.com/users/freearhey/following{/other_user}',
gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}',
starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions',
organizations_url: 'https://api.github.com/users/freearhey/orgs',
repos_url: 'https://api.github.com/users/freearhey/repos',
events_url: 'https://api.github.com/users/freearhey/events{/privacy}',
received_events_url: 'https://api.github.com/users/freearhey/received_events',
type: 'User',
site_admin: false
},
labels: [
{
id: 1694118251,
node_id: 'MDU6TGFiZWwxNjk0MTE4MjUx',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/US',
name: 'US',
color: '463faa',
default: false,
description: 'United States'
},
{
id: 5923508587,
node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
name: 'streams:add',
color: '017ff9',
default: false,
description: 'Request to add a new link to a playlist'
}
],
state: 'open',
locked: false,
assignee: null,
assignees: [],
milestone: null,
comments: 1,
created_at: '2023-09-07T00:27:51Z',
updated_at: '2023-09-07T00:47:15Z',
closed_at: null,
author_association: 'COLLABORATOR',
active_lock_reason: null,
body: '### Channel ID\n\nTUTV.us\n\n### Stream URL\n\nhttps://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv/issues/14096#issue-1874505679\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
reactions: {
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14177/reactions',
total_count: 0,
'+1': 0,
'-1': 0,
laugh: 0,
hooray: 0,
confused: 0,
heart: 0,
rocket: 0,
eyes: 0
},
timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14177/timeline',
performed_via_github_app: null,
state_reason: null
},
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14176',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14176/labels{/name}',
comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14176/comments',
events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14176/events',
html_url: 'https://github.com/iptv-org/iptv/issues/14176',
id: 1884926953,
node_id: 'I_kwDOCWUK8M5wWbPp',
number: 14176,
title: 'Add: Manorama News',
user: {
login: 'freearhey',
id: 7253922,
node_id: 'MDQ6VXNlcjcyNTM5MjI=',
avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4',
gravatar_id: '',
url: 'https://api.github.com/users/freearhey',
html_url: 'https://github.com/freearhey',
followers_url: 'https://api.github.com/users/freearhey/followers',
following_url: 'https://api.github.com/users/freearhey/following{/other_user}',
gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}',
starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions',
organizations_url: 'https://api.github.com/users/freearhey/orgs',
repos_url: 'https://api.github.com/users/freearhey/repos',
events_url: 'https://api.github.com/users/freearhey/events{/privacy}',
received_events_url: 'https://api.github.com/users/freearhey/received_events',
type: 'User',
site_admin: false
},
labels: [
{
id: 1694119113,
node_id: 'MDU6TGFiZWwxNjk0MTE5MTEz',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/IN',
name: 'IN',
color: 'd8139a',
default: false,
description: 'India'
},
{
id: 5923508587,
node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
name: 'streams:add',
color: '017ff9',
default: false,
description: 'Request to add a new link to a playlist'
}
],
state: 'open',
locked: false,
assignee: null,
assignees: [],
milestone: null,
comments: 0,
created_at: '2023-09-07T00:38:55Z',
updated_at: '2023-09-07T00:48:32Z',
closed_at: null,
author_association: 'COLLABORATOR',
active_lock_reason: null,
body: '### Channel ID\n\nManoramaNews.in\n\n### Stream URL\n\nhttps://ythls.onrender.com/channel/UCP0uG-mcMImgKnJz-VjJZmQ.m3u8\n\n### Label\n\nNot 24/7\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv/issues/14007#issuecomment-1686942043\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
reactions: {
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14176/reactions',
total_count: 0,
'+1': 0,
'-1': 0,
laugh: 0,
hooray: 0,
confused: 0,
heart: 0,
rocket: 0,
eyes: 0
},
timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14176/timeline',
performed_via_github_app: null,
state_reason: null
},
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/labels{/name}',
comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/comments',
events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/events',
html_url: 'https://github.com/iptv-org/iptv/issues/14175',
id: 1884859778,
node_id: 'I_kwDOCWUK8M5wWK2C',
number: 14175,
title: 'Add: TFX',
user: {
login: 'freearhey',
id: 7253922,
node_id: 'MDQ6VXNlcjcyNTM5MjI=',
avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4',
gravatar_id: '',
url: 'https://api.github.com/users/freearhey',
html_url: 'https://github.com/freearhey',
followers_url: 'https://api.github.com/users/freearhey/followers',
following_url: 'https://api.github.com/users/freearhey/following{/other_user}',
gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}',
starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions',
organizations_url: 'https://api.github.com/users/freearhey/orgs',
repos_url: 'https://api.github.com/users/freearhey/repos',
events_url: 'https://api.github.com/users/freearhey/events{/privacy}',
received_events_url: 'https://api.github.com/users/freearhey/received_events',
type: 'User',
site_admin: false
},
labels: [
{
id: 1694117286,
node_id: 'MDU6TGFiZWwxNjk0MTE3Mjg2',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/FR',
name: 'FR',
color: 'f7ec1b',
default: false,
description: 'France'
},
{
id: 5923498886,
node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved',
name: 'approved',
color: '85ddde',
default: false,
description: ''
},
{
id: 5923508587,
node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
name: 'streams:add',
color: '017ff9',
default: false,
description: 'Request to add a new link to a playlist'
}
],
state: 'open',
locked: false,
assignee: null,
assignees: [],
milestone: null,
comments: 1,
created_at: '2023-09-06T22:54:25Z',
updated_at: '2023-09-07T00:57:11Z',
closed_at: null,
author_association: 'COLLABORATOR',
active_lock_reason: null,
body: '### Channel ID\n\nTFX.fr\n\n### Stream URL\n\nhttp://livetv.ktv.zone/13/play.m3u8\n\n### Label\n\nNone\n\n### Notes (optional)\n\nSource: https://github.com/iptv-org/iptv-org.github.io/issues/1381\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
reactions: {
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/reactions',
total_count: 0,
'+1': 0,
'-1': 0,
laugh: 0,
hooray: 0,
confused: 0,
heart: 0,
rocket: 0,
eyes: 0
},
timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14175/timeline',
performed_via_github_app: null,
state_reason: null
}
]

View File

@@ -1,160 +0,0 @@
module.exports = [
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/labels{/name}',
comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/comments',
events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/events',
html_url: 'https://github.com/iptv-org/iptv/issues/14110',
id: 1884922249,
node_id: 'I_kwDOCWUK8M5wWaGJ',
number: 14110,
title: 'Edit: Tele2000',
user: {
login: 'freearhey',
id: 7253922,
node_id: 'MDQ6VXNlcjcyNTM5MjI=',
avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4',
gravatar_id: '',
url: 'https://api.github.com/users/freearhey',
html_url: 'https://github.com/freearhey',
followers_url: 'https://api.github.com/users/freearhey/followers',
following_url: 'https://api.github.com/users/freearhey/following{/other_user}',
gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}',
starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions',
organizations_url: 'https://api.github.com/users/freearhey/orgs',
repos_url: 'https://api.github.com/users/freearhey/repos',
events_url: 'https://api.github.com/users/freearhey/events{/privacy}',
received_events_url: 'https://api.github.com/users/freearhey/received_events',
type: 'User',
site_admin: false
},
labels: [
{
id: 5923498886,
node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved',
name: 'approved',
color: '85ddde',
default: false,
description: ''
},
{
id: 5923508587,
node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
name: 'streams:edit',
color: '017ff9',
default: false,
description: 'Request to add a new link to a playlist'
}
],
state: 'open',
locked: false,
assignee: null,
assignees: [],
milestone: null,
comments: 1,
created_at: '2023-09-07T00:30:51Z',
updated_at: '2023-09-07T00:48:23Z',
closed_at: null,
author_association: 'COLLABORATOR',
active_lock_reason: null,
body: '### Stream URL\n\nhttps://servilive.com:3126/live/tele2000live.m3u8\n\n### Channel ID\n\nBBCAmericaEast.us\n\n### Quality\n\n720p\n\n### Label\n\nGeo-blocked\n\n### HTTP User-Agent\n\nMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246\n\n### HTTP Referrer\n\n_No response_\n\n### Notes\n\n_No response_\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
reactions: {
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/reactions',
total_count: 0,
'+1': 0,
'-1': 0,
laugh: 0,
hooray: 0,
confused: 0,
heart: 0,
rocket: 0,
eyes: 0
},
timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/timeline',
performed_via_github_app: null,
state_reason: null
},
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/labels{/name}',
comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/comments',
events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/events',
html_url: 'https://github.com/iptv-org/iptv/issues/14120',
id: 1884922249,
node_id: 'I_kwDOCWUK8M5wWaGJ',
number: 14120,
title: 'Edit: Tele2000',
user: {
login: 'freearhey',
id: 7253922,
node_id: 'MDQ6VXNlcjcyNTM5MjI=',
avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4',
gravatar_id: '',
url: 'https://api.github.com/users/freearhey',
html_url: 'https://github.com/freearhey',
followers_url: 'https://api.github.com/users/freearhey/followers',
following_url: 'https://api.github.com/users/freearhey/following{/other_user}',
gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}',
starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions',
organizations_url: 'https://api.github.com/users/freearhey/orgs',
repos_url: 'https://api.github.com/users/freearhey/repos',
events_url: 'https://api.github.com/users/freearhey/events{/privacy}',
received_events_url: 'https://api.github.com/users/freearhey/received_events',
type: 'User',
site_admin: false
},
labels: [
{
id: 5923498886,
node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved',
name: 'approved',
color: '85ddde',
default: false,
description: ''
},
{
id: 5923508587,
node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
name: 'streams:edit',
color: '017ff9',
default: false,
description: 'Request to add a new link to a playlist'
}
],
state: 'open',
locked: false,
assignee: null,
assignees: [],
milestone: null,
comments: 1,
created_at: '2023-09-07T00:30:51Z',
updated_at: '2023-09-07T00:48:23Z',
closed_at: null,
author_association: 'COLLABORATOR',
active_lock_reason: null,
body: '### Stream URL\n\nhttps://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8\n\n### Channel ID\n\nboo.us\n\n### Channel Name\n\nBBC America\n\n### Quality\n\n720p\n\n### Label\n\nGeo-blocked\n\n### HTTP User-Agent\n\nMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246\n\n### HTTP Referrer\n\n_No response_\n\n### Notes\n\n_No response_\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
reactions: {
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/reactions',
total_count: 0,
'+1': 0,
'-1': 0,
laugh: 0,
hooray: 0,
confused: 0,
heart: 0,
rocket: 0,
eyes: 0
},
timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/timeline',
performed_via_github_app: null,
state_reason: null
}
]

View File

@@ -1,160 +0,0 @@
module.exports = [
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/labels{/name}',
comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/comments',
events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/events',
html_url: 'https://github.com/iptv-org/iptv/issues/14110',
id: 1884922249,
node_id: 'I_kwDOCWUK8M5wWaGJ',
number: 14110,
title: 'Edit: Tele2000',
user: {
login: 'freearhey',
id: 7253922,
node_id: 'MDQ6VXNlcjcyNTM5MjI=',
avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4',
gravatar_id: '',
url: 'https://api.github.com/users/freearhey',
html_url: 'https://github.com/freearhey',
followers_url: 'https://api.github.com/users/freearhey/followers',
following_url: 'https://api.github.com/users/freearhey/following{/other_user}',
gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}',
starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions',
organizations_url: 'https://api.github.com/users/freearhey/orgs',
repos_url: 'https://api.github.com/users/freearhey/repos',
events_url: 'https://api.github.com/users/freearhey/events{/privacy}',
received_events_url: 'https://api.github.com/users/freearhey/received_events',
type: 'User',
site_admin: false
},
labels: [
{
id: 5923498886,
node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved',
name: 'approved',
color: '85ddde',
default: false,
description: ''
},
{
id: 5923508587,
node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
name: 'streams:edit',
color: '017ff9',
default: false,
description: 'Request to add a new link to a playlist'
}
],
state: 'open',
locked: false,
assignee: null,
assignees: [],
milestone: null,
comments: 1,
created_at: '2023-09-07T00:30:51Z',
updated_at: '2023-09-07T00:48:23Z',
closed_at: null,
author_association: 'COLLABORATOR',
active_lock_reason: null,
body: '### Stream URL\n\nhttps://servilive.com:3126/live/tele2000live.m3u8\n\n### Channel ID\n\nBBCAmericaEast.us\n\n### Channel Name\n\nBBC America\n\n### Quality\n\n720p\n\n### Label\n\n~\n\n### Timeshift\n\n-4\n\n### HTTP User-Agent\n\nMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Edge/12.246\n\n### HTTP Referrer\n\n~\n\n### Notes\n\n_No response_\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
reactions: {
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/reactions',
total_count: 0,
'+1': 0,
'-1': 0,
laugh: 0,
hooray: 0,
confused: 0,
heart: 0,
rocket: 0,
eyes: 0
},
timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14110/timeline',
performed_via_github_app: null,
state_reason: null
},
{
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120',
repository_url: 'https://api.github.com/repos/iptv-org/iptv',
labels_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/labels{/name}',
comments_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/comments',
events_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/events',
html_url: 'https://github.com/iptv-org/iptv/issues/14120',
id: 1884922249,
node_id: 'I_kwDOCWUK8M5wWaGJ',
number: 14120,
title: 'Edit: Tele2000',
user: {
login: 'freearhey',
id: 7253922,
node_id: 'MDQ6VXNlcjcyNTM5MjI=',
avatar_url: 'https://avatars.githubusercontent.com/u/7253922?v=4',
gravatar_id: '',
url: 'https://api.github.com/users/freearhey',
html_url: 'https://github.com/freearhey',
followers_url: 'https://api.github.com/users/freearhey/followers',
following_url: 'https://api.github.com/users/freearhey/following{/other_user}',
gists_url: 'https://api.github.com/users/freearhey/gists{/gist_id}',
starred_url: 'https://api.github.com/users/freearhey/starred{/owner}{/repo}',
subscriptions_url: 'https://api.github.com/users/freearhey/subscriptions',
organizations_url: 'https://api.github.com/users/freearhey/orgs',
repos_url: 'https://api.github.com/users/freearhey/repos',
events_url: 'https://api.github.com/users/freearhey/events{/privacy}',
received_events_url: 'https://api.github.com/users/freearhey/received_events',
type: 'User',
site_admin: false
},
labels: [
{
id: 5923498886,
node_id: 'LA_kwDOCWUK8M8AAAABYRFrhg',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/approved',
name: 'approved',
color: '85ddde',
default: false,
description: ''
},
{
id: 5923508587,
node_id: 'LA_kwDOCWUK8M8AAAABYRGRaw',
url: 'https://api.github.com/repos/iptv-org/iptv/labels/streams:add',
name: 'streams:edit',
color: '017ff9',
default: false,
description: 'Request to add a new link to a playlist'
}
],
state: 'open',
locked: false,
assignee: null,
assignees: [],
milestone: null,
comments: 1,
created_at: '2023-09-07T00:30:51Z',
updated_at: '2023-09-07T00:48:23Z',
closed_at: null,
author_association: 'COLLABORATOR',
active_lock_reason: null,
body: '### Stream URL\n\nhttps://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajg.m3u8\n\n### Channel ID\n\n_No response_\n\n### Quality\n\nNone\n\n### Label\n\nNone\n\n### HTTP User-Agent\n\n_No response_\n\n### HTTP Referrer\n\n_No response_\n\n### Notes\n\n_No response_\n\n### Contributing Guide\n\n- [X] I have read [Contributing Guide](https://github.com/iptv-org/iptv/blob/master/CONTRIBUTING.md)',
reactions: {
url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/reactions',
total_count: 0,
'+1': 0,
'-1': 0,
laugh: 0,
hooray: 0,
confused: 0,
heart: 0,
rocket: 0,
eyes: 0
},
timeline_url: 'https://api.github.com/repos/iptv-org/iptv/issues/14120/timeline',
performed_via_github_app: null,
state_reason: null
}
]

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,6 @@
#EXTM3U
#EXTINF:-1 tvg-id="",VTV [Not 24/7]
https://ythls.onrender.com/channel/UC40TUSUx490U5uR1lZt3Ajg.m3u8
#EXTINF:-1 tvg-id="",Tele2000 [Not 24/7]
#EXTVLCOPT:http-referrer=https://example2.com/
https://servilive.com:3126/live/tele2000live.m3u8

View File

@@ -0,0 +1,5 @@
#EXTM3U
#EXTINF:-1 tvg-id="",RIK HD Cyprus
http://l6.cloudskep.com/rikcy/rikhd/playlist.m3u8
#EXTINF:-1 tvg-id="",RIK 2
http://l6.cloudskep.com/rikcy/rik2/playlist.m3u8

View File

@@ -0,0 +1,5 @@
#EXTM3U
#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (720p) [Not 24/7]
http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/index.m3u8
#EXTINF:-1 tvg-id="BBCNews.uk",BBC News HD (480p) [Geo-blocked]
http://1111296894.rsc.cdn77.org/LS-ATL-54548-6/playlist.m3u8

View File

@@ -1,7 +1,7 @@
#EXTM3U
#EXTINF:-1 tvg-id="",Fox Sports 2 Asia (Thai) (720p)
#EXTINF:-1 tvg-id="FoxSports2Asia.us",Fox Sports 2 Asia (Thai) (720p)
https://example.com/playlist.m3u8
#EXTINF:-1 tvg-id="",TVN
#EXTINF:-1 tvg-id="TVN.pl",TVN
https://example.com/playlist2.m3u8
#EXTINF:-1 tvg-id="EverydayHeroes.us",Everyday Heroes (720p)
https://a.jsrdn.com/broadcast/7b1451fa52/+0000/c.m3u8

View File

@@ -26,7 +26,7 @@ it('can format playlists', () => {
})
expect(stdout).toBe(
'OUTPUT=closes #14151, closes #14140, closes #14110, closes #14120, closes #14178\n'
'OUTPUT=closes #14151, closes #14140, closes #14110, closes #14120, closes #14175, closes #14174, closes #14173, closes #14172, closes #14171, closes #14170, closes #14169, closes #14164, closes #14162, closes #14160, closes #14159, closes #14158, closes #14155, closes #14153, closes #14152, closes #14105, closes #14104, closes #14057, closes #14034, closes #13964, closes #13893, closes #13881, closes #13793, closes #13751, closes #13715\n'
)
})

View File

@@ -5,7 +5,7 @@ type ExecError = {
stdout: string
}
it('show an error if channel name in the blocklist', () => {
it('show an error if channel id in the blocklist', () => {
try {
execSync(
'DATA_DIR=tests/__data__/input/data STREAMS_DIR=tests/__data__/input/streams_validate npm run playlist:validate -- us_blocked.m3u',
@@ -16,9 +16,11 @@ it('show an error if channel name in the blocklist', () => {
process.exit(1)
} catch (error) {
expect((error as ExecError).status).toBe(1)
expect((error as ExecError).stdout).toContain(
'us_blocked.m3u\n 2 error "Fox Sports 2 Asia (Thai)" is on the blocklist due to claims of copyright holders or NSFW content (https://github.com/iptv-org/iptv/issues/0000)\n\n1 problems (1 errors, 0 warnings)\n'
)
expect((error as ExecError).stdout).toContain(`us_blocked.m3u
2 error "FoxSports2Asia.us" is on the blocklist due to claims of copyright holders (https://github.com/iptv-org/iptv/issues/0002)
4 error "TVN.pl" is on the blocklist due to NSFW content (https://github.com/iptv-org/iptv/issues/0003)
2 problems (2 errors, 0 warnings)`)
}
})

View File

@@ -10,17 +10,18 @@ it('can create report', () => {
expect(
stdout.includes(`
┌─────────┬─────────────┬──────────────────────────────────────┬────────────────┐
│ (index) │ issueNumber │ type │ channelId │ status
├─────────┼─────────────┼──────────────────────────────────────┼────────────────┤
│ 0 │ 14110 │ 'streams:edit' │ 'BBCAmericaEast.us' │ 'invalid_link'
│ 1 │ 14120 │ 'streams:edit' │ 'boo.us' │ 'invalid_id' │
│ 2 │ 14140 │ 'broken stream' │ undefined │ 'invalid_link'
│ 3 │ 14175 │ 'streams:add' │ 'TFX.fr' │ 'invalid_id' │
│ 4 │ 14176 │ 'streams:add' │ 'ManoramaNews.in' │ 'duplicate'
│ 5 │ 14177 │ 'streams:add' │ 'TUTV.us' │ 'fullfilled' │
│ 6 │ 14178 │ 'streams:add' │ 'TV3.my' │ 'blocked'
│ 7 │ 14179 │ 'streams:add' │ 'ManoramaNews.in' │ 'pending'
└─────────┴─────────────┴─────────────────┴─────────────────────┴────────────────┘`)
┌─────────┬─────────────┬──────────────────┬────────────────────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────┬───────────────
│ (index) │ issueNumber │ type │ channelId │ streamUrl │ status │
├─────────┼─────────────┼──────────────────┼────────────────────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────────────
│ 0 │ 14120 │ 'streams:edit' │ 'boo.us' │ 'https://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8' │ 'invalid_id'
│ 1 │ 14135 │ 'streams:add' │ 'BBCWorldNewsSouthAsia.uk' │ 'http://103.199.161.254/Content/bbcworld/Live/Channel%28BBCworld%29/Stream%2801%29/index.m3u8' │ 'wrong_id'
│ 2 │ 14140 │ 'streams:add' │ undefined │ undefined │ 'missing_id'
│ 3 │ 14175 │ 'streams:add' │ 'TFX.fr' │ 'http://livetv.ktv.zone/13/play.m3u8' │ 'duplicate' │
│ 4 │ 14177 │ 'streams:add' │ 'TUTV.us' │ 'https://livestream.telvue.com/templeuni1/f7b44cfafd5c52223d5498196c8a2e7b.sdp/playlist.m3u8' │ 'on_playlist'
│ 5 │ 14178 │ 'streams:add' │ 'TV3.my' │ 'https://live-streams-ssai-01.tonton.com.my/live/2dd2b7cd-1b34-4871-b669-57b5c9beca23/live.isml/.m3u8' │ 'blocked'
│ 6 │ 16120 │ 'broken stream' │ undefined │ 'http://190.61.102.67:2000/play/a038/index.m3u8' │ 'wrong_link'
│ 7 │ 19956 │ 'channel search' │ 'CNBCe.tr' │ undefined │ 'invalid_id'
│ 8 │ 19957 │ 'channel search' │ '13thStreet.au' │ undefined │ 'closed' │
└─────────┴─────────────┴──────────────────┴────────────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────┴───────────────┘`)
).toBe(true)
})