Merge pull request #1153 from iptv-org/add-tvpassport.com

Add guide from tvpassport.com
This commit is contained in:
Aleksandr Statciuk 2022-10-04 22:30:18 +03:00 committed by GitHub
commit 0788a18adf
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 945 additions and 0 deletions

17
.github/workflows/tvpassport.com.yml vendored Normal file
View file

@ -0,0 +1,17 @@
name: tvpassport.com
on:
schedule:
- cron: '0 3 * * *'
workflow_dispatch:
workflow_run:
workflows: [_trigger]
types:
- completed
jobs:
load:
uses: ./.github/workflows/_load.yml
with:
site: ${{github.workflow}}
secrets:
APP_ID: ${{ secrets.APP_ID }}
APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,140 @@
const axios = require('axios')
const dayjs = require('dayjs')
const cheerio = require('cheerio')
const utc = require('dayjs/plugin/utc')
const timezone = require('dayjs/plugin/timezone')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(utc)
dayjs.extend(timezone)
dayjs.extend(customParseFormat)
module.exports = {
site: 'tvpassport.com',
url({ channel, date }) {
return `https://www.tvpassport.com/tv-listings/stations/${channel.site_id}/${date.format(
'YYYY-MM-DD'
)}`
},
request: {
headers: {
Cookie: 'cisession=e49ff13191d6875887193cae9e324b44ef85768d;'
}
},
parser: function ({ content }) {
let programs = []
const items = parseItems(content)
for (let item of items) {
const $item = cheerio.load(item)
const start = parseStart($item)
const duration = parseDuration($item)
const stop = start.add(duration, 'm')
programs.push({
title: parseTitle($item),
sub_title: parseSubTitle($item),
description: parseDescription($item),
icon: parseIcon($item),
category: parseCategory($item),
rating: parseRating($item),
actors: parseActors($item),
guest: parseGuest($item),
director: parseDirector($item),
start,
stop
})
}
return programs
},
async channels() {
const content = await axios
.get(`https://www.tvpassport.com/tv-listings`, {
headers: {
Cookie: 'cisession=317b3a464bfe449650b7cc4b16ccf900a6646d88;'
}
})
.then(r => r.data)
.catch(console.log)
const $ = cheerio.load(content)
return $('.channel_cell')
.map((i, el) => {
const site_id = $(el)
.find('a')
.attr('href')
.replace('https://www.tvpassport.com/tv-listings/stations/', '')
const name = $(el).find('.sr-only').text().trim()
return {
site_id,
name
}
})
.get()
}
}
function parseDescription($item) {
return $item('*').data('description')
}
function parseIcon($item) {
const showpicture = $item('*').data('showpicture')
const url = new URL(showpicture, 'https://cdn.tvpassport.com/image/show/960x540/')
return url.href
}
function parseTitle($item) {
return $item('*').data('showname')
}
function parseSubTitle($item) {
return $item('*').data('episodetitle')
}
function parseCategory($item) {
return $item('*').data('showtype').split(', ')
}
function parseActors($item) {
return $item('*').data('cast').split(', ')
}
function parseDirector($item) {
return $item('*').data('director').split(', ')
}
function parseGuest($item) {
return $item('*').data('guest').split(', ')
}
function parseRating($item) {
const rating = $item('*').data('rating')
return rating
? {
system: 'MPA',
value: rating.replace(/^TV/, 'TV-')
}
: null
}
function parseStart($item) {
const time = $item('*').data('st')
return dayjs.tz(time, 'YYYY-MM-DD HH:mm:ss', 'America/New_York')
}
function parseDuration($item) {
const duration = $item('*').data('duration')
return parseInt(duration)
}
function parseItems(content) {
if (!content) return []
const $ = cheerio.load(content)
return $(`.station-listings .list-group-item`).toArray()
}

View file

@ -0,0 +1,63 @@
// npx epg-grabber --config=sites/tvpassport.com/tvpassport.com.config.js --channels=sites/tvpassport.com/tvpassport.com_us.channels.xml --output=guide.xml --days=2
// npm run channels:parse -- --config=./sites/tvpassport.com/tvpassport.com.config.js --output=./sites/tvpassport.com/tvpassport.com_us.channels.xml
const { parser, url, request } = require('./tvpassport.com.config.js')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
const utc = require('dayjs/plugin/utc')
const customParseFormat = require('dayjs/plugin/customParseFormat')
dayjs.extend(customParseFormat)
dayjs.extend(utc)
const date = dayjs.utc('2022-10-04', 'YYYY-MM-DD').startOf('d')
const channel = {
site_id: 'youtoo-america-network/5463',
xmltv_id: 'YTATV.us'
}
it('can generate valid url', () => {
expect(url({ channel, date })).toBe(
'https://www.tvpassport.com/tv-listings/stations/youtoo-america-network/5463/2022-10-04'
)
})
it('can generate valid request headers', () => {
expect(request.headers).toMatchObject({
Cookie: 'cisession=e49ff13191d6875887193cae9e324b44ef85768d;'
})
})
it('can parse response', () => {
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
let results = parser({ content })
results = results.map(p => {
p.start = p.start.toJSON()
p.stop = p.stop.toJSON()
return p
})
expect(results[0]).toMatchObject({
start: '2022-10-04T10:00:00.000Z',
stop: '2022-10-04T10:30:00.000Z',
title: 'Charlie Moore: No Offense',
sub_title: 'Under the Influencer',
category: ['Sports', 'Outdoors'],
icon: 'https://cdn.tvpassport.com/image/show/960x540/69103.jpg',
rating: {
system: 'MPA',
value: 'TV-G'
},
actors: ['John Reardon', 'Mayko Nguyen', 'Justin Kelly'],
director: ['Rob McElhenney'],
guest: ['Sean Penn'],
description:
'Celebrity interviews while fishing in various locations throughout the United States.'
})
})
it('can handle empty guide', () => {
const result = parser({ content: '' })
expect(result).toMatchObject([])
})

View file

@ -0,0 +1,147 @@
<?xml version="1.0" encoding="UTF-8"?>
<site site="tvpassport.com">
<channels>
<channel lang="en" xmltv_id="W20CQD1.us" site_id="hope-channel-w20cqd-hempstead-ny/16436">Hope Channel (W20CQ-D) Hempstead, NY</channel>
<channel lang="en" xmltv_id="W20CQD2.us" site_id="esperanza-w20cqd2-hempstead-ny/16437">Esperanza (W20CQ-D2) Hempstead, NY</channel>
<channel lang="en" xmltv_id="WABCDT1.us" site_id="abc-wabc-new-york-ny/1769">ABC (WABC) New York, NY</channel>
<channel lang="en" xmltv_id="WABCDT2.us" site_id="localish-wabcdt2-new-york-ny/10497">Localish (WABC-DT2) New York, NY</channel>
<channel lang="en" xmltv_id="WABCDT3.us" site_id="this-wabctv3-new-york-ny/11049">THIS (WABC-TV3) New York, NY</channel>
<channel lang="en" xmltv_id="WABCDT4.us" site_id="hsn-wabctv4-new-york-ny/36168">HSN (WABC-TV4) New York, NY</channel>
<channel lang="en" xmltv_id="WASALD1.us" site_id="estrella-wasald-port-jervis-ny/11071">Estrella (WASA-LD) Port Jervis, NY</channel>
<channel lang="en" xmltv_id="WCBSDT1.us" site_id="cbs-wcbs-new-york-ny/1766">CBS (WCBS) New York, NY</channel>
<channel lang="en" xmltv_id="WCBSDT2.us" site_id="start-tv-wcbstv2-new-york-ny/11045">Start TV (WCBS-TV2) New York, NY</channel>
<channel lang="en" xmltv_id="WCBSDT3.us" site_id="dabl-wcbstv3-new-york-ny/34131">DABL (WCBS-TV3) New York, NY</channel>
<channel lang="en" xmltv_id="WDVBCD1.us" site_id="the-country-network-wdvb-edison-nj/11067">The Country Network (WDVB) Edison, NJ</channel>
<channel lang="en" xmltv_id="WDVBCD2.us" site_id="sstn-wdvbcd2-edison-nj/11068">SSTN (WDVB-CD2) Edison, NJ</channel>
<channel lang="en" xmltv_id="WEDWDT1.us" site_id="connecticut-public-television-wedw-bridgeport/2065">Connecticut Public Television (WEDW) Bridgeport</channel>
<channel lang="en" xmltv_id="WEDWDT3.us" site_id="cptv-spirit-wedwdt3-bridgeport-ct/11910">CPTV Spirit (WEDW-DT3) Bridgeport, CT</channel>
<channel lang="en" xmltv_id="WFTYDT1.us" site_id="unimas-wfty-smithtown-ny/1961">UniMás (WFTY) Smithtown, NY</channel>
<channel lang="en" xmltv_id="WFTYDT2.us" site_id="uni-wftydt2-new-york-ny/1962">UNI (WFTY-DT2) New York, NY</channel>
<channel lang="en" xmltv_id="WFTYDT4.us" site_id="ion-mystery-wftydt4-smithtown-ny/19460">ION Mystery (WFTY-DT4) Smithtown, NY</channel>
<channel lang="en" xmltv_id="WFUTDT2.us" site_id="true-crime-network-wfutdt2-newark-nj/16472">True Crime Network (WFUT-DT2) Newark, NJ</channel>
<channel lang="en" xmltv_id="WFUTDT3.us" site_id="gettv-wfutdt3-newark-nj/16429">GetTV (WFUT-DT3) Newark, NJ</channel>
<channel lang="en" xmltv_id="WFUTDT4.us" site_id="ion-mystery-wfutdt4-newark-nj/16471">ION Mystery (WFUT-DT4) Newark, NJ</channel>
<channel lang="en" xmltv_id="WJLPDT2.us" site_id="laff-wjlp2-new-jersey/15178">Laff (WJLP2) New Jersey</channel>
<channel lang="en" xmltv_id="WJLPDT3.us" site_id="grit-tv-wjlp3-new-jerseynew-york/20040">Grit TV (WJLP3) New Jersey/New York</channel>
<channel lang="en" xmltv_id="WJLPDT4.us" site_id="ion-mystery-wjlp4-new-jerseynew-york/20041">ION Mystery (WJLP4) New Jersey/New York</channel>
<channel lang="en" xmltv_id="WJLPDT5.us" site_id="retro-tv-wjlp5-middletown-township-nj/35854">Retro TV (WJLP5) Middletown Township, NJ</channel>
<channel lang="en" xmltv_id="WJLPDT6.us" site_id="heartland-wjlp6-middletown-township-nj/33652">Heartland (WJLP6) Middletown Township, NJ</channel>
<channel lang="en" xmltv_id="WKOBLD1.us" site_id="azteca-wkob-new-york-ny/5096">Azteca (WKOB) New York, NY</channel>
<channel lang="en" xmltv_id="WKOBLD2.us" site_id="daystar-wkobld2-new-york-ny/11083">Daystar (WKOB-LD2) New York, NY</channel>
<channel lang="en" xmltv_id="WKOBLD3.us" site_id="peace-tv-wkobld3-new-york-ny/11085">Peace TV (WKOB-LD3) New York, NY</channel>
<channel lang="en" xmltv_id="WKOBLD5.us" site_id="sonlife-network-wkobld5-new-york-ny/11087">SonLife Network (WKOB-LD5) New York, NY</channel>
<channel lang="en" xmltv_id="WKOBLD6.us" site_id="estrella-wkobdt6-new-york-ny/16453">Estrella (WKOB-DT6) New York, NY</channel>
<channel lang="en" xmltv_id="WKOBLD7.us" site_id="shop-lc-wkobdt7-new-york-ny/16454">Shop LC (WKOB-DT7) New York, NY</channel>
<channel lang="en" xmltv_id="WKOBLD8.us" site_id="ontv4u-wkobdt8-new-york-ny/17491">ONTV4U (WKOB-DT8) New York, NY</channel>
<channel lang="en" xmltv_id="WLIWDT1.us" site_id="pbs-wliw-long-island-ny/1775">PBS (WLIW) Long Island, NY</channel>
<channel lang="en" xmltv_id="WLIWDT2.us" site_id="create-wliw2-long-island-ny/6202">Create (WLIW2) Long Island, NY</channel>
<channel lang="en" xmltv_id="WLIWDT3.us" site_id="pbs-world-wliw3-long-island-ny/6203">PBS World (WLIW3) Long Island, NY</channel>
<channel lang="en" xmltv_id="WLNYDT2.us" site_id="comet-tv-wlnytv2-riverhead-ny/34536">Comet TV (WLNY-TV2) Riverhead, NY</channel>
<channel lang="en" xmltv_id="WLNYDT3.us" site_id="stadium-wlnytv3-riverhead-ny/34537">Stadium (WLNY-TV3) Riverhead, NY</channel>
<channel lang="en" xmltv_id="WLNYDT4.us" site_id="this-wlnytv4-riverhead-ny/34538">THIS (WLNY-TV4) Riverhead, NY</channel>
<channel lang="en" xmltv_id="WLNYDT5.us" site_id="circle-wlnytv5-riverhead-ny/34539">Circle (WLNY-TV5) Riverhead, NY</channel>
<channel lang="en" xmltv_id="WMBCDT2.us" site_id="quest-wmbctv2-newton-nj/16467">Quest (WMBC-TV2) Newton, NJ</channel>
<channel lang="en" xmltv_id="WMBCDT5.us" site_id="new-tang-dynasty-tv-wmbcdt5-newton-nj/15033">New Tang Dynasty TV (WMBC-DT5) Newton, NJ</channel>
<channel lang="en" xmltv_id="WMBCDT7.us" site_id="aliento-vision-wmbctv7-newton-nj/16468">Aliento Vision (WMBC-TV7) Newton, NJ</channel>
<channel lang="en" xmltv_id="WMBQCD1.us" site_id="biztv-wmbqcd-new-york-ny/16459">Biz-TV (WMBQ-CD) New York, NY</channel>
<channel lang="en" xmltv_id="WMBQCD2.us" site_id="hope-channel-wmbqcd2-new-york-ny/16460">Hope Channel (WMBQ-CD2) New York, NY</channel>
<channel lang="en" xmltv_id="WNBCDT1.us" site_id="nbc-wnbc-new-york-ny/1767">NBC (WNBC) New York, NY</channel>
<channel lang="en" xmltv_id="WNBCDT2.us" site_id="cozi-wnbcdt2-new-york-ny/10919">Cozi (WNBC-DT2) New York, NY</channel>
<channel lang="en" xmltv_id="WNDTCD1.us" site_id="fnx-wndtcd-manhattan-ny/34515">FNX (WNDT-CD) Manhattan, NY</channel>
<channel lang="en" xmltv_id="WNETDT1.us" site_id="pbs-wnet-new-york-ny/1774">PBS (WNET) New York, NY</channel>
<channel lang="en" xmltv_id="WNETDT2.us" site_id="pbs-kids-wnetdt2-new-york-ny/2088">PBS Kids (WNET-DT2) New York, NY</channel>
<channel lang="en" xmltv_id="WNETDT3.us" site_id="vme-wnetdt3-new-york-ny/7291">V-Me (WNET-DT3) New York, NY</channel>
<channel lang="en" xmltv_id="WNJBDT1.us" site_id="nj-pbs-wnjb-new-brunswick-nj/2124">NJ PBS (WNJB) New Brunswick, NJ</channel>
<channel lang="en" xmltv_id="WNJNDT1.us" site_id="nj-pbs-wnjn-montclair-nj/2574">NJ PBS (WNJN) Montclair, NJ</channel>
<channel lang="en" xmltv_id="WNJTDT1.us" site_id="nj-pbs-wnjt-trenton-nj/2564">NJ PBS (WNJT) Trenton, NJ</channel>
<channel lang="en" xmltv_id="WNJTDT2.us" site_id="nhk-world-wnjttv2-trenton-nj/32845">NHK World (WNJT-TV2) Trenton, NJ</channel>
<channel lang="en" xmltv_id="WNJUDT1.us" site_id="telemundo-wnju-teterboro-nj/1772">Telemundo (WNJU) Teterboro, NJ</channel>
<channel lang="en" xmltv_id="WNJUDT2.us" site_id="telexitos-wnju2-teterboro-nj/10749">TeleXitos (WNJU2) Teterboro, NJ</channel>
<channel lang="en" xmltv_id="WNMFLD1.us" site_id="infomercials-wnmf-new-york-ny/17860">Infomercials (WNMF) New York, NY</channel>
<channel lang="en" xmltv_id="WNMFLD2.us" site_id="jewelry-tv-wnmfld2-new-york-ny/17861">Jewelry TV (WNMF-LD2) New York, NY</channel>
<channel lang="en" xmltv_id="WNXYLD1.us" site_id="cgtn-wnxyld-new-york-ny/16456">CGTN (WNXY-LD) New York, NY</channel>
<channel lang="en" xmltv_id="WNXYLD2.us" site_id="cctv4-wnxyld2-new-york-ny/16457">CCTV-4 (WNXY-LD2) New York, NY</channel>
<channel lang="en" xmltv_id="WNXYLD3.us" site_id="cgtn-spanish-wnxyld3-new-york-ny/16458">CGTN Spanish (WNXY-LD3) New York, NY</channel>
<channel lang="en" xmltv_id="WNYEDT1.us" site_id="nyc-life-wnyedt1-new-york-ny/10011">NYC Life (WNYE-DT1) New York, NY</channel>
<channel lang="en" xmltv_id="WNYEDT2.us" site_id="nyc-gov-wnyedt2-new-york-ny/11074">NYC Gov (WNYE-DT2) New York, NY</channel>
<channel lang="en" xmltv_id="WNYEDT3.us" site_id="cuny-wnyedt3-new-york-ny/11075">CUNY (WNYE-DT3) New York, NY</channel>
<channel lang="en" xmltv_id="WNYJDT3.us" site_id="france-24-wnyjdt3-west-milford-nj/16470">France 24 (WNYJ-DT3) West Milford, NJ</channel>
<channel lang="en" xmltv_id="WNYNLD1.us" site_id="azteca-wnyn-new-york-ny/17851">Azteca (WNYN) New York, NY</channel>
<channel lang="en" xmltv_id="WNYNLD3.us" site_id="azteca-wnynld3-new-york-ny/5512">Azteca (WNYN-LD3) New York, NY</channel>
<channel lang="en" xmltv_id="WNYWDT1.us" site_id="fox-wnyw-new-york-ny/1638">FOX (WNYW) New York, NY</channel>
<channel lang="en" xmltv_id="WNYWDT2.us" site_id="movies-wnyw2-new-york-ny/11048">Movies! (WNYW2) New York, NY</channel>
<channel lang="en" xmltv_id="WNYWDT3.us" site_id="mnt-wnyw3-new-york-ny/17850">MNT (WNYW3) New York, NY</channel>
<channel lang="en" xmltv_id="WNYWDT4.us" site_id="the-grio-wnyw4-new-york-ny/31537">The Grio (WNYW4) New York, NY</channel>
<channel lang="en" xmltv_id="WNYWDT5.us" site_id="decades-wnyw5-new-york-ny/34342">Decades (WNYW5) New York, NY</channel>
<channel lang="en" xmltv_id="WNYXLD1.us" site_id="cgtn-wnyxld-new-york-ny/16441">CGTN (WNYX-LD) New York, NY</channel>
<channel lang="en" xmltv_id="WNYXLD2.us" site_id="cctv4-wnyxld2-new-york-ny/16442">CCTV-4 (WNYX-LD2) New York, NY</channel>
<channel lang="en" xmltv_id="WNYXLD3.us" site_id="cgtn-spanish-wnyxld3-new-york-ny/16445">CGTN Spanish (WNYX-LD3) New York, NY</channel>
<channel lang="en" xmltv_id="WNYXLD4.us" site_id="revn-wnyxld4-new-york-ny/16447">REV&apos;N (WNYX-LD4) New York, NY</channel>
<channel lang="en" xmltv_id="WNYXLD5.us" site_id="retro-tv-wnyxld5-new-york-ny/17849">Retro TV (WNYX-LD5) New York, NY</channel>
<channel lang="en" xmltv_id="WPIXDT2.us" site_id="antenna-wpix2-new-york-ny/10745">Antenna (WPIX2) New York, NY</channel>
<channel lang="en" xmltv_id="WPIXDT3.us" site_id="court-tv-wpix3-new-york-ny/9723">Court TV (WPIX3) New York, NY</channel>
<channel lang="en" xmltv_id="WPIXDT4.us" site_id="rewind-tv-us-wpix4-new-york-ny/32844">Rewind TV US (WPIX4) New York, NY</channel>
<channel lang="en" xmltv_id="WPVIDT2.us" site_id="localish-wpvidt2-philadelphia-pa/8852">Localish (WPVI-DT2) Philadelphia, PA</channel>
<channel lang="en" xmltv_id="WPVIDT3.us" site_id="this-wpvitv3-philadelphia-pa/14662">THIS (WPVI-TV3) Philadelphia, PA</channel>
<channel lang="en" xmltv_id="WPXNDT1.us" site_id="ion-wpxn-new-york-ny/1778">ION (WPXN) New York, NY</channel>
<channel lang="en" xmltv_id="WPXNDT2.us" site_id="bounce-wpxntv2-new-york-ny/11076">Bounce (WPXN-TV2) New York, NY</channel>
<channel lang="en" xmltv_id="WPXNDT3.us" site_id="ion-mystery-wpxntv3-new-york-ny/11077">ION Mystery (WPXN-TV3) New York, NY</channel>
<channel lang="en" xmltv_id="WPXNDT4.us" site_id="defy-wpxntv4-new-york-ny/12189">Defy (WPXN-TV4) New York, NY</channel>
<channel lang="en" xmltv_id="WPXNDT5.us" site_id="laff-wpxntv5-new-york-ny/12256">Laff (WPXN-TV5) New York, NY</channel>
<channel lang="en" xmltv_id="WPXNDT6.us" site_id="truereal-wpxntv6-new-york-ny/11713">TrueReal (WPXN-TV6) New York, NY</channel>
<channel lang="en" xmltv_id="WPXNDT7.us" site_id="newsy-wpxntv7-new-york-ny/37059">Newsy (WPXN-TV7) New York, NY</channel>
<channel lang="en" xmltv_id="WPXOLD1.us" site_id="america-teve-wpxold-east-orange-nj/11080">América TeVé (WPXO-LD) East Orange, NJ</channel>
<channel lang="en" xmltv_id="WPXUDT2.us" site_id="court-tv-wpxutv2-jacksonville-nc/12046">Court TV (WPXU-TV2) Jacksonville, NC</channel>
<channel lang="en" xmltv_id="WPXUDT3.us" site_id="grit-tv-wpxutv3-jacksonville-nc/12104">Grit TV (WPXU-TV3) Jacksonville, NC</channel>
<channel lang="en" xmltv_id="WPXUDT4.us" site_id="laff-wpxutv4-jacksonville-nc/12225">Laff (WPXU-TV4) Jacksonville, NC</channel>
<channel lang="en" xmltv_id="WPXUDT5.us" site_id="qvc-wpxutv5-jacksonville-nc/12292">QVC (WPXU-TV5) Jacksonville, NC</channel>
<channel lang="en" xmltv_id="WRNNDT2.us" site_id="circle-wrnntv2-new-york/8687">Circle (WRNN-TV2) New York</channel>
<channel lang="en" xmltv_id="WRNNDT3.us" site_id="canal-de-la-fe-wrnndt3-new-york-ny/11091">Canal de La Fe (WRNN-DT3) New York, NY</channel>
<channel lang="en" xmltv_id="WRNNDT4.us" site_id="qvc2-wrnntv4-new-york-ny/11092">QVC2 (WRNN-TV4) New York, NY</channel>
<channel lang="en" xmltv_id="WTBYDT1.us" site_id="tbn-wtby-new-york-ny/2575">TBN (WTBY) New York, NY</channel>
<channel lang="en" xmltv_id="WTBYDT2.us" site_id="smile-wtbytv2-new-york-ny/11093">Smile (WTBY-TV2) New York, NY</channel>
<channel lang="en" xmltv_id="WTBYDT3.us" site_id="enlace-wtbytv3-new-york-ny/11094">Enlace (WTBY-TV3) New York, NY</channel>
<channel lang="en" xmltv_id="WTBYDT4.us" site_id="positiv-wtbytv4-new-york-ny/11095">PosiTiV (WTBY-TV4) New York, NY</channel>
<channel lang="en" xmltv_id="WTNHDT1.us" site_id="abc-wtnh-sd-new-haven-ct/17476">ABC (WTNH) SD New Haven, CT</channel>
<channel lang="en" xmltv_id="WTNHDT2.us" site_id="rewind-tv-us-wtnh2-new-haven-ct/10741">Rewind TV US (WTNH2) New Haven, CT</channel>
<channel lang="en" xmltv_id="WWORDT1.us" site_id="mnt-wwor-new-york-ny/1612">MNT (WWOR) New York, NY</channel>
<channel lang="en" xmltv_id="WWORDT2.us" site_id="circle-wwortv2-new-york-ny/4793">Circle (WWOR-TV2) New York, NY</channel>
<channel lang="en" xmltv_id="WWORDT3.us" site_id="buzzr-tv-wwortv3-new-york-ny/10750">Buzzr TV (WWOR-TV3) New York, NY</channel>
<channel lang="en" xmltv_id="WWORDT4.us" site_id="hi-wwordt4-new-york-ny/11050">H&amp;I (WWOR-DT4) New York, NY</channel>
<channel lang="en" xmltv_id="WXNYLD1.us" site_id="cgtn-wxnyld-new-york-ny/11078">CGTN (WXNY-LD) New York, NY</channel>
<channel lang="en" xmltv_id="WXNYLD2.us" site_id="cctv4-wxnyld2-new-york-ny/16443">CCTV-4 (WXNY-LD2) New York, NY</channel>
<channel lang="en" xmltv_id="WXNYLD3.us" site_id="cgtn-spanish-wxnyld3-new-york-ny/16444">CGTN Spanish (WXNY-LD3) New York, NY</channel>
<channel lang="en" xmltv_id="WXNYLD4.us" site_id="retro-tv-wxnyld4-new-york-ny/16446">Retro TV (WXNY-LD4) New York, NY</channel>
<channel lang="en" xmltv_id="WXNYLD5.us" site_id="retro-tv-wxnyld5-new-york-ny/17346">Retro TV (WXNY-LD5) New York, NY</channel>
<channel lang="en" xmltv_id="WXTVDT1.us" site_id="uni-wxtv-teaneck-nj/1771">UNI (WXTV) Teaneck, NJ</channel>
<channel lang="en" xmltv_id="WXTVDT2.us" site_id="bounce-wxtvdt2-paterson-nj/16452">Bounce (WXTV-DT2) Paterson, NJ</channel>
<channel lang="en" xmltv_id="WXTVDT3.us" site_id="twist-wxtvdt3-paterson-nj/16450">Twist (WXTV-DT3) Paterson, NJ</channel>
<channel lang="en" xmltv_id="WXTVDT4.us" site_id="grit-tv-wxtvdt4-paterson-nj/16451">Grit TV (WXTV-DT4) Paterson, NJ</channel>
<channel lang="en" xmltv_id="WYXNLD1.us" site_id="cgtn-wyxnld-new-york-ny/29736">CGTN (WYXN-LD) New York, NY</channel>
<channel lang="en" xmltv_id="YTATV.us" site_id="youtoo-america-network/5463">Youtoo America - Network</channel>
<!-- <channel lang="en" xmltv_id="" site_id="azteca-wmbc-newton-nj/11536">Azteca (WMBC) Newton, NJ</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="daystar-wpxuld-amityville-ny/11066">Daystar (WPXU-LD) Amityville, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="gettv-wftydt3-los-angeles-ca/13521">GetTV (WFTY-DT3) Los Angeles, CA</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="grit-tv-wnwtld3-new-york-ny/16463">Grit TV (WNWT-LD3) New York, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="guide-us-tv-wkobld4-new-york-ny/11086">Guide Us TV (WKOB-LD4) New York, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="heartland-wnwtld6-new-york-ny/37095">Heartland (WNWT-LD6) New York, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="ion-mystery-wnwtld4-new-york-ny/16464">ION Mystery (WNWT-LD4) New York, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="laff-wnwtld2-new-york-ny/16462">Laff (WNWT-LD2) New York, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="metv-wjlp-new-jerseynew-york/5138">MeTV (WJLP) New Jersey/New York</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="retro-tv-wnwtld5-new-york-ny/37094">Retro TV (WNWT-LD5) New York, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="sab-tv-wdvbcd4-edison-nj/11070">SAB TV (WDVB-CD4) Edison, NJ</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="shop-lc-wpxold2-east-orange-nj/34186">Shop LC (WPXO-LD2) East Orange, NJ</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="shophq-wmbctv4-newton-nj/34591">SHOPHQ (WMBC-TV4) Newton, NJ</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="shophq-wrnn-kingston-ny/4689">ShopHQ (WRNN) Kingston, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="story-wnwtld-new-york-ny/11046">Story (WNWT-LD) New York, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="story-wnwtld7-new-york-ny/37096">Story (WNWT-LD7) New York, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="swagat-wdvbcd3-edison-nj/11069">Swagat (WDVB-CD3) Edison, NJ</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="tcv-39-wnynld2-new-york-ny/16448">TCV 39 (WNYN-LD2) New York, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="unimas-wfut-new-york-ny/1776">UniMás (WFUT) New York, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="wlny-tv1055-riverhead-ny/9574">WLNY TV10/55, Riverhead, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="wmbcnewton-nj/2561">WMBC-Newton, NJ</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="wnyndt4-new-york-ny/17852">WNYN-DT4 New York, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="wnyndt5-new-york-ny/17853">WNYN-DT5 New York, NY</channel> -->
<!-- <channel lang="en" xmltv_id="" site_id="wpix-new-york-superstation/63">WPIX New York (SUPERSTATION)</channel> -->
</channels>
</site>