mirror of
https://github.com/iptv-org/iptv
synced 2025-12-18 03:17:14 -05:00
Merge pull request #19986 from iptv-org/patch-2025.02.4
Patch 2025.02.4
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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}`
|
||||
}
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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')
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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}`,
|
||||
` ${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}`,
|
||||
` ${subdivision.name}`,
|
||||
logItem.count,
|
||||
`<code>https://iptv-org.github.io/iptv/${logItem.filepath}</code>`
|
||||
])
|
||||
}
|
||||
} else if (countryCode === 'INT') {
|
||||
data.add([
|
||||
'ZZ',
|
||||
|
||||
@@ -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}]
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"}]
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
}
|
||||
]
|
||||
@@ -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
|
||||
}
|
||||
]
|
||||
@@ -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
|
||||
}
|
||||
]
|
||||
@@ -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
6
tests/__data__/input/streams_report/br.m3u
Normal file
6
tests/__data__/input/streams_report/br.m3u
Normal 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
|
||||
5
tests/__data__/input/streams_report/cy.m3u
Normal file
5
tests/__data__/input/streams_report/cy.m3u
Normal 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
|
||||
5
tests/__data__/input/streams_report/uk.m3u
Normal file
5
tests/__data__/input/streams_report/uk.m3u
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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'
|
||||
)
|
||||
})
|
||||
|
||||
|
||||
@@ -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)`)
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@@ -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)
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user