Skip to content

Update tataplay/dishtv#2970

Open
StrangeDrVN wants to merge 22 commits intoiptv-org:masterfrom
StrangeDrVN:Update-xmltv_id-for-Indian-channels.xml
Open

Update tataplay/dishtv#2970
StrangeDrVN wants to merge 22 commits intoiptv-org:masterfrom
StrangeDrVN:Update-xmltv_id-for-Indian-channels.xml

Conversation

@StrangeDrVN
Copy link
Contributor

@StrangeDrVN StrangeDrVN commented Dec 24, 2025

Updated dishtv.in.channels.xml and tataplay.com.channels.xml

Mapped new feeds while fixing a few = iptv-org/database#23562

tataplay.com

  • channels:parse overwrites previous xml and there's loss of around 200 channels. They seem to be exclusive to satellite and are not available on web. Hence, created a new tataplay.com_dth.channels.xml as a temporary fix. Update tataplay.com #2947 (comment)

dishtv.in

  • Added ~200 channels.
  • channels:parse sometimes throws an error 500.

npm run channels:parse

 npm run channels:parse --- --config=sites/dishtv.in/dishtv.in.config.js --output=sites/dishtv.in/dishtv.in.channels.xml            
> channels:parse
> tsx scripts/commands/channels/parse.ts --config=sites/dishtv.in/dishtv.in.config.js --output=sites/dishtv.in/dishtv.in.channels.xml

AxiosError: Request failed with status code 500
    at settle (C:\Users\user\Github\iptv-org\epg\node_modules\axios\lib\core\settle.js:19:12)
    at IncomingMessage.handleStreamEnd (C:\Users\user\Github\iptv-org\epg\node_modules\axios\lib\adapters\http.js:617:11)
    at IncomingMessage.emit (node:events:520:35)
    at endReadableNT (node:internal/streams/readable:1701:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:89:21)
    at Axios.request (C:\Users\user\Github\iptv-org\epg\node_modules\axios\lib\core\Axios.js:45:41)
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
    at async Object.channels (C:\Users\user\Github\iptv-org\epg\sites\dishtv.in\dishtv.in.config.js:77:20)
    at async main (C:\Users\user\Github\iptv-org\epg\scripts\commands\channels\parse.ts:71:22) {
  code: 'ERR_BAD_RESPONSE',
  config: {
    transitional: {
      silentJSONParsing: true,
      forcedJSONParsing: true,
      clarifyTimeoutError: false
    },
    adapter: [ 'xhr', 'http', 'fetch' ],
    transformRequest: [ [Function: transformRequest] ],
    transformResponse: [ [Function: transformResponse] ],
    timeout: 0,
    xsrfCookieName: 'XSRF-TOKEN',
    xsrfHeaderName: 'X-XSRF-TOKEN',
    maxContentLength: -1,
    maxBodyLength: -1,
    env: { FormData: [Function [FormData]], Blob: [class Blob] },
    validateStatus: [Function: validateStatus],
    headers: Object [AxiosHeaders] {
      Accept: 'application/json, text/plain, */*',
      'Content-Type': 'multipart/form-data; boundary=axios-1.12.2-boundary-SWHJJ0519eQHz_gmU7_hMUMyS',
      'authorization-token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnRpZCI6ImRpc2h0di13ZWJzaXRlIiwicGxhdGZvcm0iOiJkaXNodHYiLCJpYXQiOjE3NzAyMDc1NjEsImV4cCI6MTc3MDI5Mzk2MX0.d44YfIMfVcfXMMM5xLiHTTHyEIRIh_Zg2vtUYx8Vg6I',
      'User-Agent': 'axios/1.12.2',
      'Content-Length': '268',
      'Accept-Encoding': 'gzip, compress, deflate, br'
    },
    method: 'post',
    url: 'https://www.dishtv.in/services/epg/channels',
    data: FormData { pageNum: '46', date: '04/02/2026' },
    allowAbsoluteUrls: true
  },
  request: <ref *1> ClientRequest {
    _events: [Object: null prototype] {
      abort: [Function (anonymous)],
      aborted: [Function (anonymous)],
      connect: [Function (anonymous)],
      error: [Function (anonymous)],
      socket: [Function (anonymous)],
      timeout: [Function (anonymous)],
      finish: [Function: requestOnFinish]
    },
    _eventsCount: 7,
    _maxListeners: undefined,
    outputData: [],
    outputSize: 0,
    writable: true,
    destroyed: false,
    _last: false,
    chunkedEncoding: false,
    shouldKeepAlive: false,
    maxRequestsOnConnectionReached: false,
    _defaultKeepAlive: true,
    useChunkedEncodingByDefault: true,
    sendDate: false,
    _removedConnection: false,
    _removedContLen: false,
    _removedTE: false,
    strictContentLength: false,
    _contentLength: 268,
    _hasBody: true,
    _trailer: '',
    finished: true,
    _headerSent: true,
    _closed: false,
    _header: 'POST /services/epg/channels HTTP/1.1\r\n' +
      'Accept: application/json, text/plain, */*\r\n' +
      'Content-Type: multipart/form-data; boundary=axios-1.12.2-boundary-SWHJJ0519eQHz_gmU7_hMUMyS\r\n' +
      'authorization-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnRpZCI6ImRpc2h0di13ZWJzaXRlIiwicGxhdGZvcm0iOiJkaXNodHYiLCJpYXQiOjE3NzAyMDc1NjEsImV4cCI6MTc3MDI5Mzk2MX0.d44YfIMfVcfXMMM5xLiHTTHyEIRIh_Zg2vtUYx8Vg6I\r\n' +
      'User-Agent: axios/1.12.2\r\n' +
      'Content-Length: 268\r\n' +
      'Accept-Encoding: gzip, compress, deflate, br\r\n' +
      'Host: www.dishtv.in\r\n' +
      'Connection: keep-alive\r\n' +
      '\r\n',
    _keepAliveTimeout: 0,
    _onPendingData: [Function: nop],
    agent: Agent {
      _events: [Object: null prototype],
      _eventsCount: 2,
      _maxListeners: undefined,
      options: [Object: null prototype],
      defaultPort: 443,
      protocol: 'https:',
      requests: [Object: null prototype] {},
      sockets: [Object: null prototype],
      freeSockets: [Object: null prototype] {},
      keepAliveMsecs: 1000,
      keepAlive: true,
      maxSockets: Infinity,
      maxFreeSockets: 256,
      scheduling: 'lifo',
      maxTotalSockets: Infinity,
      totalSocketCount: 1,
      agentKeepAliveTimeoutBuffer: 1000,
      maxCachedSessions: 100,
      _sessionCache: [Object],
      Symbol(shapeMode): false,
      Symbol(kCapture): false
    },
    socketPath: undefined,
    method: 'POST',
    maxHeaderSize: undefined,
    insecureHTTPParser: undefined,
    joinDuplicateHeaders: undefined,
    path: '/services/epg/channels',
    _ended: true,
    res: IncomingMessage {
      _events: [Object],
      _readableState: [ReadableState],
      _maxListeners: undefined,
      socket: [TLSSocket],
      httpVersionMajor: 1,
      httpVersionMinor: 1,
      httpVersion: '1.1',
      complete: true,
      rawHeaders: [Array],
      rawTrailers: [],
      joinDuplicateHeaders: undefined,
      aborted: false,
      upgrade: false,
      url: '',
      method: null,
      statusCode: 500,
      statusMessage: 'Internal Server Error',
      client: [TLSSocket],
      _consuming: true,
      _dumped: false,
      req: [Circular *1],
      _eventsCount: 4,
      responseUrl: 'https://www.dishtv.in/services/epg/channels',
      redirects: [],
      Symbol(shapeMode): true,
      Symbol(kCapture): false,
      Symbol(kHeaders): [Object],
      Symbol(kHeadersCount): 20,
      Symbol(kTrailers): null,
      Symbol(kTrailersCount): 0
    },
    aborted: false,
    timeoutCb: [Function: emitRequestTimeout],
    upgradeOrConnect: false,
    parser: null,
    maxHeadersCount: null,
    reusedSocket: true,
    host: 'www.dishtv.in',
    protocol: 'https:',
    _redirectable: Writable {
      _events: [Object],
      _writableState: [WritableState],
      _maxListeners: undefined,
      _options: [Object],
      _ended: true,
      _ending: true,
      _redirectCount: 0,
      _redirects: [],
      _requestBodyLength: 268,
      _requestBodyBuffers: [],
      _eventsCount: 6,
      _onNativeResponse: [Function (anonymous)],
      _currentRequest: [Circular *1],
      _currentUrl: 'https://www.dishtv.in/services/epg/channels',
      Symbol(shapeMode): true,
      Symbol(kCapture): false
    },
    Symbol(shapeMode): false,
    Symbol(kCapture): false,
    Symbol(kBytesWritten): 0,
    Symbol(kNeedDrain): false,
    Symbol(corked): 0,
    Symbol(kChunkedBuffer): [],
    Symbol(kChunkedLength): 0,
    Symbol(kSocket): TLSSocket {
      _tlsOptions: [Object],
      _secureEstablished: true,
      _securePending: false,
      _newSessionPending: false,
      _controlReleased: true,
      secureConnecting: false,
      _SNICallback: null,
      servername: 'www.dishtv.in',
      alpnProtocol: false,
      authorized: true,
      authorizationError: null,
      encrypted: true,
      _events: [Object: null prototype],
      _eventsCount: 10,
      connecting: false,
      _hadError: false,
      _parent: null,
      _host: 'www.dishtv.in',
      _closeAfterHandlingError: false,
      _readableState: [ReadableState],
      _writableState: [WritableState],
      allowHalfOpen: false,
      _maxListeners: undefined,
      _sockname: null,
      _pendingData: null,
      _pendingEncoding: '',
      server: undefined,
      _server: null,
      ssl: [TLSWrap],
      _requestCert: true,
      _rejectUnauthorized: true,
      timeout: 5000,
      parser: null,
      _httpMessage: [Circular *1],
      autoSelectFamilyAttemptedAddresses: [Array],
      Symbol(alpncallback): null,
      Symbol(res): [TLSWrap],
      Symbol(verified): true,
      Symbol(pendingSession): null,
      Symbol(async_id_symbol): 9441,
      Symbol(kHandle): [TLSWrap],
      Symbol(lastWriteQueueSize): 0,
      Symbol(timeout): Timeout {
        _idleTimeout: 5000,
        _idlePrev: [TimersList],
        _idleNext: [TimersList],
        _idleStart: 57110,
        _onTimeout: [Function: bound ],
        _timerArgs: undefined,
        _repeat: null,
        _destroyed: false,
        Symbol(refed): false,
        Symbol(kHasPrimitive): false,
        Symbol(asyncId): 9452,
        Symbol(triggerId): 9441,
        Symbol(kAsyncContextFrame): undefined
      },
      Symbol(kBuffer): null,
      Symbol(kBufferCb): null,
      Symbol(kBufferGen): null,
      Symbol(shapeMode): true,
      Symbol(kCapture): false,
      Symbol(kSetNoDelay): false,
      Symbol(kSetKeepAlive): true,
      Symbol(kSetKeepAliveInitialDelay): 60,
      Symbol(kBytesRead): 0,
      Symbol(kBytesWritten): 0,
      Symbol(connect-options): [Object]
    },
    Symbol(kOutHeaders): [Object: null prototype] {
      accept: [Array],
      'content-type': [Array],
      'authorization-token': [Array],
      'user-agent': [Array],
      'content-length': [Array],
      'accept-encoding': [Array],
      host: [Array]
    },
    Symbol(errored): null,
    Symbol(kHighWaterMark): 16384,
    Symbol(kRejectNonStandardBodyWrites): false,
    Symbol(kUniqueHeaders): null
  },
  response: {
    status: 500,
    statusText: 'Internal Server Error',
    headers: Object [AxiosHeaders] {
      connection: 'close',
      'content-length': '1034',
      'retry-after': '0',
      'content-type': 'text/html; charset=utf-8',
      'accept-ranges': 'bytes',
      date: 'Wed, 04 Feb 2026 12:20:17 GMT',
      'strict-transport-security': 'max-age=31557600',
      'x-served-by': 'cache-bom-vanm7210084-BOM',
      'x-cache': 'MISS',
      'x-timer': 'S1770207601.299533,VS0,VS0,VE15728'
    },
    config: {
      transitional: [Object],
      adapter: [Array],
      transformRequest: [Array],
      transformResponse: [Array],
      timeout: 0,
      xsrfCookieName: 'XSRF-TOKEN',
      xsrfHeaderName: 'X-XSRF-TOKEN',
      maxContentLength: -1,
      maxBodyLength: -1,
      env: [Object],
      validateStatus: [Function: validateStatus],
      headers: [Object [AxiosHeaders]],
      method: 'post',
      url: 'https://www.dishtv.in/services/epg/channels',
      data: FormData { pageNum: '46', date: '04/02/2026' },
      allowAbsoluteUrls: true
    },
    request: <ref *1> ClientRequest {
      _events: [Object: null prototype],
      _eventsCount: 7,
      _maxListeners: undefined,
      outputData: [],
      outputSize: 0,
      writable: true,
      destroyed: false,
      _last: false,
      chunkedEncoding: false,
      shouldKeepAlive: false,
      maxRequestsOnConnectionReached: false,
      _defaultKeepAlive: true,
      useChunkedEncodingByDefault: true,
      sendDate: false,
      _removedConnection: false,
      _removedContLen: false,
      _removedTE: false,
      strictContentLength: false,
      _contentLength: 268,
      _hasBody: true,
      _trailer: '',
      finished: true,
      _headerSent: true,
      _closed: false,
      _header: 'POST /services/epg/channels HTTP/1.1\r\n' +
        'Accept: application/json, text/plain, */*\r\n' +
        'Content-Type: multipart/form-data; boundary=axios-1.12.2-boundary-SWHJJ0519eQHz_gmU7_hMUMyS\r\n' +
        'authorization-token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnRpZCI6ImRpc2h0di13ZWJzaXRlIiwicGxhdGZvcm0iOiJkaXNodHYiLCJpYXQiOjE3NzAyMDc1NjEsImV4cCI6MTc3MDI5Mzk2MX0.d44YfIMfVcfXMMM5xLiHTTHyEIRIh_Zg2vtUYx8Vg6I\r\n' +
        'User-Agent: axios/1.12.2\r\n' +
        'Content-Length: 268\r\n' +
        'Accept-Encoding: gzip, compress, deflate, br\r\n' +
        'Host: www.dishtv.in\r\n' +
        'Connection: keep-alive\r\n' +
        '\r\n',
      _keepAliveTimeout: 0,
      _onPendingData: [Function: nop],
      agent: [Agent],
      socketPath: undefined,
      method: 'POST',
      maxHeaderSize: undefined,
      insecureHTTPParser: undefined,
      joinDuplicateHeaders: undefined,
      path: '/services/epg/channels',
      _ended: true,
      res: [IncomingMessage],
      aborted: false,
      timeoutCb: [Function: emitRequestTimeout],
      upgradeOrConnect: false,
      parser: null,
      maxHeadersCount: null,
      reusedSocket: true,
      host: 'www.dishtv.in',
      protocol: 'https:',
      _redirectable: [Writable],
      Symbol(shapeMode): false,
      Symbol(kCapture): false,
      Symbol(kBytesWritten): 0,
      Symbol(kNeedDrain): false,
      Symbol(corked): 0,
      Symbol(kChunkedBuffer): [],
      Symbol(kChunkedLength): 0,
      Symbol(kSocket): [TLSSocket],
      Symbol(kOutHeaders): [Object: null prototype],
      Symbol(errored): null,
      Symbol(kHighWaterMark): 16384,
      Symbol(kRejectNonStandardBodyWrites): false,
      Symbol(kUniqueHeaders): null
    },
    data: '<!DOCTYPE html>\n' +
      '      <html lang="en">\n' +
      '        <head>\n' +
      '          <meta charset="utf-8">\n' +
      '          <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">\n' +
      '\n' +
      '\n' +
      '          <link rel="stylesheet" href="https://errors.adobeaemcloud.com/src.status.css">\n' +
      '        </head>\n' +
      '        <body>\n' +
      '          <noscript>AEM Cloud Service.</noscript>\n' +
      '          <div id="root" status="500"\n' +
      '                            backend="06761ec80b3a84155fff5e2aa6515113--F_Skyline_Origin_Ingress_Publish"\n' +
      '                            healthy="1"\n' +
      '                            gen="0"\n' +
      '                            rid="3092b392-864d-491e-81ab-21a892abab1f"\n' +
      '                            xid="1890660515"\n' +
      '                            age="0.000"\n' +
      '                            ttl="0.000"\n' +
      '                            restarts="0"\n' +
      '                            nobranding="true"\n' +
      '                            statusApi=""\n' +
      '          > </div>\n' +
      '          <script src="https://errors.adobeaemcloud.com/src.status.js"> </script>\n' +
      '        </body>\n' +
      '      </html>\n' +
      '    '
  },
  status: 500
}
C:\Users\user\Github\iptv-org\epg\sites\dishtv.in\dishtv.in.config.js:81
      data.programDetailsByChannel.forEach(channel => {
           ^

TypeError: Cannot read properties of undefined (reading 'programDetailsByChannel')
    at Object.channels (C:\Users\user\Github\iptv-org\epg\sites\dishtv.in\dishtv.in.config.js:81:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:103:5)
    at async main (C:\Users\user\Github\iptv-org\epg\scripts\commands\channels\parse.ts:71:22)

Node.js v24.11.1

plex.tv - created a seperate PR.

prevents loss of channels by overwrite
@StrangeDrVN StrangeDrVN marked this pull request as ready for review December 24, 2025 15:34
@StrangeDrVN StrangeDrVN marked this pull request as draft December 28, 2025 10:04
according to the feeds/channels changes
dishtv/tataplay
from IN region
@StrangeDrVN StrangeDrVN marked this pull request as ready for review January 6, 2026 10:54
@StrangeDrVN StrangeDrVN changed the title Update xmltv id for indian channels.xml Update tataplay/dishtv Feb 4, 2026
@StrangeDrVN
Copy link
Contributor Author

@BellezaEmporium could you review this?

@BellezaEmporium BellezaEmporium self-assigned this Feb 4, 2026
@BellezaEmporium
Copy link
Contributor

If they're removed from the tataplay list, it might mean they do not provide EPG for those sources anymore. The addition of the "dth" list would most certainly be unnecessary, since it might not work at all.

@BellezaEmporium
Copy link
Contributor

Would this endpoint indicate more channels ?

https://www.tataplay.com/dth/read/core-api/packages/mp/channels/eyJ1c2VyIjp7Imxhbmd1YWdlIjpbXSwiZ2VucmUiOltdfSwiZmlsdGVyRGF0YSI6eyJsYW5ndWFnZSI6WyJFbmdsaXNoIiwiSGluZGkiLCJNYXJhdGhpIiwiUHVuamFiaSIsIkd1amFyYXRpIiwiQmVuZ2FsaSIsIk9kaWEiLCJUYW1pbCIsIlRlbHVndSIsIkthbm5hZGEiLCJNYWxheWFsYW0iLCJPdGhlcnMiLCJBc3NhbWVzZSJdLCJnZW5yZSI6WyJUViBTaG93cyIsIk5ld3MiLCJNb3ZpZXMiLCJLaWRzIiwiU3BvcnRzIiwiTXVzaWMiLCJLbm93bGVkZ2UgJiBMaWZlc3R5bGUiLCJTcGlyaXR1YWwiLCJPdGhlcnMiXX0sImZpbHRlciI6IjEiLCJoZCI6IiJ9

(what looks like rubbish is base64 : {"user":{"language":[],"genre":[]},"filterData":{"language":["English","Hindi","Marathi","Punjabi","Gujarati","Bengali","Odia","Tamil","Telugu","Kannada","Malayalam","Others","Assamese"],"genre":["TV Shows","News","Movies","Kids","Sports","Music","Knowledge & Lifestyle","Spiritual","Others"]},"filter":"1","hd":""} )

@StrangeDrVN
Copy link
Contributor Author

StrangeDrVN commented Feb 5, 2026

They do provide epg, the programs are being found. But the channels seem to be exclusive to someplace else. Majority of these channels are from same provider jiostar.
Their website mentions this during the first visit.

If they're removed from the tataplay list, it might mean they do not provide EPG for those sources anymore. The addition of the "dth" list would most certainly be unnecessary, since it might not work at all.

image
image

@StrangeDrVN
Copy link
Contributor Author

  1. Couldn't find any channels here. Will have to check their app for any clues.

Would this endpoint indicate more channels ?

  1. dishtv config currently gives programs in all the available languages and taking a bit of extra space. Would it be possible to separate/duplicate the channels into different xml for lang?
<programme start="20260204233000 +0000" stop="20260205000000 +0000" channel="9XM.in@SD"><title lang="en">9XM Music Idhar Hai</title><title lang="hi">9एक्सएम म्यूजिक इधर है</title><title lang="ta">9எக்ஸ்‌எம் ம்யூசிக் இதர் ஹை</title><title lang="te">9ఎక్స్ఎం మ్యూజిక్ ఇధర్ హై</title><desc lang="en">A comprehensive compilation of some of the hit songs composed by renowned artists and musicians is played back-to-back along with some popular jokes.</desc><desc lang="te">ప్రముఖ కళాకారులు, సంగీతకారులు స్వరపరచి ఆలపించిన అత్యంత ప్రజాదరణ పొందిన పాటలతో పాటు, హాస్యభరిత సన్నివేశాల ప్రసారం.</desc><date>19991231</date><category lang="en">Music</category><category lang="hi">संगीत</category><category lang="ta">இசை</category><category lang="te">సంగీతం</category><category lang="mr">संगीत</category><image>https://dtil.tmsimg.com/assets/p29726517_b_h10_aa.jpg?lock=1280x720</image><icon src="https://dtil.tmsimg.com/assets/p29726517_b_h9_aa.jpg?lock=880x660"/></programme>
<programme start="20260205000000 +0000" stop="20260205003000 +0000" channel="9XM.in@SD"><title lang="en">9XM Music Idhar Hai</title><title lang="hi">9एक्सएम म्यूजिक इधर है</title><title lang="ta">9எக்ஸ்‌எம் ம்யூசிக் இதர் ஹை</title><title lang="te">9ఎక్స్ఎం మ్యూజిక్ ఇధర్ హై</title><desc lang="en">A comprehensive compilation of some of the hit songs composed by renowned artists and musicians is played back-to-back along with some popular jokes.</desc><desc lang="te">ప్రముఖ కళాకారులు, సంగీతకారులు స్వరపరచి ఆలపించిన అత్యంత ప్రజాదరణ పొందిన పాటలతో పాటు, హాస్యభరిత సన్నివేశాల ప్రసారం.</desc><date>19991231</date><category lang="en">Music</category><category lang="hi">संगीत</category><category lang="ta">இசை</category><category lang="te">సంగీతం</category><category lang="mr">संगीत</category><image>https://dtil.tmsimg.com/assets/p29726517_b_h10_aa.jpg?lock=1280x720</image><icon src="https://dtil.tmsimg.com/assets/p29726517_b_h9_aa.jpg?lock=880x660"/></programme>
<programme start="20260205003000 +0000" stop="20260205010000 +0000" channel="9XM.in@SD"><title lang="en">9XM Bazillion Views</title><title lang="hi">9एक्सएम बैजिलियन व्यूज</title><title lang="ta">9எக்ஸ்‌எம் பேஸில்லியன் வியூஸ்</title><title lang="te">9ఎక్స్ఎం బజిలియన్ వ్యూస్</title><desc lang="en">A comprehensive compilation of the most popular and best-loved songs from some of the biggest names in music is played back to back to entertain the audience.</desc><desc lang="te">సంగీత రంగంలో పేరుగాంచిన కళాకారులు స్వరపరచి, ఆలపించిన అత్యంత ప్రజాదరణ పొందిన మధురమైన పాటల సంకలనం ప్రసారం.</desc><date>19991231</date><category lang="en">Music</category><category lang="hi">संगीत</category><category lang="ta">இசை</category><category lang="te">సంగీతం</category><category lang="mr">संगीत</category><image>https://dtil.tmsimg.com/assets/p29726538_b_h10_aa.jpg?lock=1280x720</image><icon src="https://dtil.tmsimg.com/assets/p29726538_b_h9_aa.jpg?lock=880x660"/></programme>
<programme start="20260205010000 +0000" stop="20260205013000 +0000" channel="9XM.in@SD"><title lang="en">9XM Bazillion Views</title><title lang="hi">9एक्सएम बैजिलियन व्यूज</title><title lang="ta">9எக்ஸ்‌எம் பேஸில்லியன் வியூஸ்</title><title lang="te">9ఎక్స్ఎం బజిలియన్ వ్యూస్</title><desc lang="en">A comprehensive compilation of the most popular and best-loved songs from some of the biggest names in music is played back to back to entertain the audience.</desc><desc lang="te">సంగీత రంగంలో పేరుగాంచిన కళాకారులు స్వరపరచి, ఆలపించిన అత్యంత ప్రజాదరణ పొందిన మధురమైన పాటల సంకలనం ప్రసారం.</desc><date>19991231</date><category lang="en">Music</category><category lang="hi">संगीत</category><category lang="ta">இசை</category><category lang="te">సంగీతం</category><category lang="mr">संगीत</category><image>https://dtil.tmsimg.com/assets/p29726538_b_h10_aa.jpg?lock=1280x720</image><icon src="https://dtil.tmsimg.com/assets/p29726538_b_h9_aa.jpg?lock=880x660"/></programme>
<programme start="20260205013000 +0000" stop="20260205020000 +0000" channel="9XM.in@SD"><title lang="en">9xm Fit - Hits</title><title lang="hi">9एक्सएम फ़िट - हिट्स</title><title lang="ta">9எக்ஸ்எம் ஃபிட் - ஹிட்ஸ்</title><title lang="te">9ఎక్స్‌ఎం ఫిట్ - హిట్స్</title><title lang="mr">9एक्सएम फ़िट - हिट्स</title><desc lang="en">A curated collection of superhit Bollywood songs from popular movies is played back-to-back to kick-start your morning with energy.</desc><desc lang="te">ప్రముఖ కళాకారులు స్వరపరచిన కొన్ని ప్రసిద్ధ బాలీవుడ్ పాటల సమగ్ర సంకలనాన్ని త్వరితగతిన ప్రసారం చేస్తారు.</desc><date>19991231</date><category lang="en">Music</category><category lang="hi">संगीत</category><category lang="ta">இசை</category><category lang="te">సంగీతం</category><category lang="mr">संगीत</category><image>https://dtil.tmsimg.com/assets/p29726546_b_h10_aa.jpg?lock=1280x720</image><icon src="https://dtil.tmsimg.com/assets/p29726546_b_h9_aa.jpg?lock=880x660"/></programme>

@StrangeDrVN
Copy link
Contributor Author

used this part of the tataplay config to query the parser url with random site_id and got a list of missing channels. Majority are osd/ad/service channels.

url({ date }) {
    return `https://tm.tapi.videoready.tv/content-detail/pub/api/v2/channels/schedule?date=${date.format(
      'DD-MM-YYYY'
    )}`
  },

  request: {
    method: 'POST',
    headers: {
...
...
    data({ channel }) {
      return { id: channel.site_id }
    }
  },

@BellezaEmporium
Copy link
Contributor

  1. Couldn't find any channels here. Will have to check their app for any clues.

Would this endpoint indicate more channels ?

  1. dishtv config currently gives programs in all the available languages and taking a bit of extra space. Would it be possible to separate/duplicate the channels into different xml for lang?
<programme start="20260204233000 +0000" stop="20260205000000 +0000" channel="9XM.in@SD"><title lang="en">9XM Music Idhar Hai</title><title lang="hi">9एक्सएम म्यूजिक इधर है</title><title lang="ta">9எக்ஸ்‌எம் ம்யூசிக் இதர் ஹை</title><title lang="te">9ఎక్స్ఎం మ్యూజిక్ ఇధర్ హై</title><desc lang="en">A comprehensive compilation of some of the hit songs composed by renowned artists and musicians is played back-to-back along with some popular jokes.</desc><desc lang="te">ప్రముఖ కళాకారులు, సంగీతకారులు స్వరపరచి ఆలపించిన అత్యంత ప్రజాదరణ పొందిన పాటలతో పాటు, హాస్యభరిత సన్నివేశాల ప్రసారం.</desc><date>19991231</date><category lang="en">Music</category><category lang="hi">संगीत</category><category lang="ta">இசை</category><category lang="te">సంగీతం</category><category lang="mr">संगीत</category><image>https://dtil.tmsimg.com/assets/p29726517_b_h10_aa.jpg?lock=1280x720</image><icon src="https://dtil.tmsimg.com/assets/p29726517_b_h9_aa.jpg?lock=880x660"/></programme>
<programme start="20260205000000 +0000" stop="20260205003000 +0000" channel="9XM.in@SD"><title lang="en">9XM Music Idhar Hai</title><title lang="hi">9एक्सएम म्यूजिक इधर है</title><title lang="ta">9எக்ஸ்‌எம் ம்யூசிக் இதர் ஹை</title><title lang="te">9ఎక్స్ఎం మ్యూజిక్ ఇధర్ హై</title><desc lang="en">A comprehensive compilation of some of the hit songs composed by renowned artists and musicians is played back-to-back along with some popular jokes.</desc><desc lang="te">ప్రముఖ కళాకారులు, సంగీతకారులు స్వరపరచి ఆలపించిన అత్యంత ప్రజాదరణ పొందిన పాటలతో పాటు, హాస్యభరిత సన్నివేశాల ప్రసారం.</desc><date>19991231</date><category lang="en">Music</category><category lang="hi">संगीत</category><category lang="ta">இசை</category><category lang="te">సంగీతం</category><category lang="mr">संगीत</category><image>https://dtil.tmsimg.com/assets/p29726517_b_h10_aa.jpg?lock=1280x720</image><icon src="https://dtil.tmsimg.com/assets/p29726517_b_h9_aa.jpg?lock=880x660"/></programme>
<programme start="20260205003000 +0000" stop="20260205010000 +0000" channel="9XM.in@SD"><title lang="en">9XM Bazillion Views</title><title lang="hi">9एक्सएम बैजिलियन व्यूज</title><title lang="ta">9எக்ஸ்‌எம் பேஸில்லியன் வியூஸ்</title><title lang="te">9ఎక్స్ఎం బజిలియన్ వ్యూస్</title><desc lang="en">A comprehensive compilation of the most popular and best-loved songs from some of the biggest names in music is played back to back to entertain the audience.</desc><desc lang="te">సంగీత రంగంలో పేరుగాంచిన కళాకారులు స్వరపరచి, ఆలపించిన అత్యంత ప్రజాదరణ పొందిన మధురమైన పాటల సంకలనం ప్రసారం.</desc><date>19991231</date><category lang="en">Music</category><category lang="hi">संगीत</category><category lang="ta">இசை</category><category lang="te">సంగీతం</category><category lang="mr">संगीत</category><image>https://dtil.tmsimg.com/assets/p29726538_b_h10_aa.jpg?lock=1280x720</image><icon src="https://dtil.tmsimg.com/assets/p29726538_b_h9_aa.jpg?lock=880x660"/></programme>
<programme start="20260205010000 +0000" stop="20260205013000 +0000" channel="9XM.in@SD"><title lang="en">9XM Bazillion Views</title><title lang="hi">9एक्सएम बैजिलियन व्यूज</title><title lang="ta">9எக்ஸ்‌எம் பேஸில்லியன் வியூஸ்</title><title lang="te">9ఎక్స్ఎం బజిలియన్ వ్యూస్</title><desc lang="en">A comprehensive compilation of the most popular and best-loved songs from some of the biggest names in music is played back to back to entertain the audience.</desc><desc lang="te">సంగీత రంగంలో పేరుగాంచిన కళాకారులు స్వరపరచి, ఆలపించిన అత్యంత ప్రజాదరణ పొందిన మధురమైన పాటల సంకలనం ప్రసారం.</desc><date>19991231</date><category lang="en">Music</category><category lang="hi">संगीत</category><category lang="ta">இசை</category><category lang="te">సంగీతం</category><category lang="mr">संगीत</category><image>https://dtil.tmsimg.com/assets/p29726538_b_h10_aa.jpg?lock=1280x720</image><icon src="https://dtil.tmsimg.com/assets/p29726538_b_h9_aa.jpg?lock=880x660"/></programme>
<programme start="20260205013000 +0000" stop="20260205020000 +0000" channel="9XM.in@SD"><title lang="en">9xm Fit - Hits</title><title lang="hi">9एक्सएम फ़िट - हिट्स</title><title lang="ta">9எக்ஸ்எம் ஃபிட் - ஹிட்ஸ்</title><title lang="te">9ఎక్స్‌ఎం ఫిట్ - హిట్స్</title><title lang="mr">9एक्सएम फ़िट - हिट्स</title><desc lang="en">A curated collection of superhit Bollywood songs from popular movies is played back-to-back to kick-start your morning with energy.</desc><desc lang="te">ప్రముఖ కళాకారులు స్వరపరచిన కొన్ని ప్రసిద్ధ బాలీవుడ్ పాటల సమగ్ర సంకలనాన్ని త్వరితగతిన ప్రసారం చేస్తారు.</desc><date>19991231</date><category lang="en">Music</category><category lang="hi">संगीत</category><category lang="ta">இசை</category><category lang="te">సంగీతం</category><category lang="mr">संगीत</category><image>https://dtil.tmsimg.com/assets/p29726546_b_h10_aa.jpg?lock=1280x720</image><icon src="https://dtil.tmsimg.com/assets/p29726546_b_h9_aa.jpg?lock=880x660"/></programme>

For number 2, if you can send the language in POST, for the "channels" part at least, you can split the channels by language, and the guide.xml file will stay the same. However, if you want separate guides for each language, you would need to precise which channels file it needs to use, and where to output it.

@StrangeDrVN
Copy link
Contributor Author

I was thinking of something similar to this but defaulting to en unless lang is specified.

English:

npm run grab --- --site=starhubtvplus.com --lang=en
Chinese:

npm run grab --- --site=starhubtvplus.com --lang=zh

the response currently seems to give program data on 4-5 languages in one request.

However, if you want separate guides for each language, you would need to precise which channels file it needs to use, and where to output it.

@BellezaEmporium
Copy link
Contributor

You need to change the language directly on the filter.

As an example, the main link (without any change) is this : https://www.tataplay.com/dth/read/core-api/packages/mp/channels/eyJ1c2VyIjp7Imxhbmd1YWdlIjpbXSwiZ2VucmUiOltdfSwiZmlsdGVyRGF0YSI6eyJsYW5ndWFnZSI6W10sImdlbnJlIjpbXX0sImZpbHRlciI6IjAiLCJoZCI6IiJ9

base64 : {"user":{"language":[],"genre":[]},"filterData":{"language":[],"genre":[]},"filter":"0","hd":""}

To filter by language, link "en" to it's equivalent in Tataplay (in your example : {"user":{"language":[],"genre":[]},"filterData":{"language":["English"],"genre":[]},"filter":"1","hd":""} )

@StrangeDrVN
Copy link
Contributor Author

I'm sorry, I was referring to dishtv.in and not tataplay.com regarding guides in other languages.

@BellezaEmporium
Copy link
Contributor

Was rechecking the tataplay API in the same stance, still the same as of today, so it seems they've just removed the ones they didn't provide.

@BellezaEmporium
Copy link
Contributor

BellezaEmporium commented Feb 5, 2026

I'm sorry, I was referring to dishtv.in and not tataplay.com regarding guides in other languages.

You would need to add the language in the POST query to "channels".

https://www.dishtv.in/services/epg/channels

Note that it uses Multipart.

------WebKitFormBoundarynAu79a9SD8HqHF7j
Content-Disposition: form-data; name="channelgenre"


------WebKitFormBoundarynAu79a9SD8HqHF7j
Content-Disposition: form-data; name="language"

Gujarati
------WebKitFormBoundarynAu79a9SD8HqHF7j
Content-Disposition: form-data; name="allowPastEvents"

true
------WebKitFormBoundarynAu79a9SD8HqHF7j
Content-Disposition: form-data; name="dataSize"

large
------WebKitFormBoundarynAu79a9SD8HqHF7j
Content-Disposition: form-data; name="pageNum"

1
------WebKitFormBoundarynAu79a9SD8HqHF7j
Content-Disposition: form-data; name="date"

05/02/2026
------WebKitFormBoundarynAu79a9SD8HqHF7j--

It looks like this. Technically, Axios supports multipart (https://axios-http.com/docs/multipart).

@StrangeDrVN
Copy link
Contributor Author

  • It's likely they made those channels exclusive to satellite but provide the epg.

Was rechecking the tataplay API in the same stance, still the same as of today, so it seems they've just removed the ones they didn't provide.

  • Regarding dishtv.in, I don't understand the technicalities. Currently I'm using a python script that removes the extra lang data in postprocessing.
  • even after modifying the language, the response didn't seem to change. even their webpage for epg defaults to english when a different language is selected.
------WebKitFormBoundarypPMDDoc22xhywY9X
Content-Disposition: form-data; name="language"

Hindi

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants