mirror of
https://github.com/iptv-org/epg.git
synced 2025-05-10 00:50:09 -04:00
Merge pull request #1306 from iptv-org/add-ionplustv.com
Add guide from ionplustv.com
This commit is contained in:
commit
9fd405a84d
6 changed files with 4004 additions and 0 deletions
17
.github/workflows/ionplustv.com.yml
vendored
Normal file
17
.github/workflows/ionplustv.com.yml
vendored
Normal file
|
@ -0,0 +1,17 @@
|
|||
name: ionplustv.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 }}
|
3233
sites/ionplustv.com/__data__/content.html
Normal file
3233
sites/ionplustv.com/__data__/content.html
Normal file
File diff suppressed because it is too large
Load diff
588
sites/ionplustv.com/__data__/no-content.html
Normal file
588
sites/ionplustv.com/__data__/no-content.html
Normal file
|
@ -0,0 +1,588 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<link rel="shortcut icon" href="https://ionplustv.com/favicon.ico?v=2" type="image/x-icon">
|
||||
<link rel="icon" href="https://ionplustv.com/favicon.ico?v=2" type="image/x-icon">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="https://ionplustv.com/static/global/IONPlus120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="https://ionplustv.com/static/global/IONPlus152x152.png">
|
||||
<meta charset="utf-8">
|
||||
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.4.1/css/all.css"
|
||||
integrity="sha384-5sAR7xN1Nv6T6+dT2mhtzEpVJvfS3NScPQTrOxhwjIuvcA67KV2R5Jz6kr4abQsz" crossorigin="anonymous">
|
||||
<title> - ION Plus</title>
|
||||
|
||||
<meta name="site_name" content="ION Plus" /><meta property="og:site_name" content="ION Plus" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta name="url" content="http://ionplustv.com/schedule/2023-11-08" /><meta property="og:url" content="http://ionplustv.com/schedule/2023-11-08" />
|
||||
<meta name="locale" content="en_US" /><meta property="og:locale" content="en_US" />
|
||||
|
||||
|
||||
|
||||
<meta name="robots" content="index" />
|
||||
<link rel="image_src" href="https://ionplustv.com/static/global/IONPlusDefault.jpg" /><meta name="image" content="https://ionplustv.com/static/global/IONPlusDefault.jpg" /><meta property="og:image" content="https://ionplustv.com/static/global/IONPlusDefault.jpg" /><meta name="twitter:image" content="https://ionplustv.com/static/global/IONPlusDefault.jpg" />
|
||||
<link rel="canonical" href="https://ionplustv.com/schedule/2023-11-08" />
|
||||
|
||||
<meta property="fb:admins" content="2056770" />
|
||||
<meta name="csrf-token" content="rPuSragJhlH3NgEm4UTCJKoikPCrHSPvA6pdeZim" />
|
||||
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Montserrat:400,500,600,700">
|
||||
<link href="https://ionplustv.com/css/ion.css" rel="stylesheet" type="text/css" />
|
||||
<link href="https://ionplustv.com/css/main_nav.css" rel="stylesheet" type="text/css" />
|
||||
<link rel="stylesheet" type="text/css" href="https://ionplustv.com/css/shows.css" />
|
||||
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"
|
||||
type="text/css" />
|
||||
|
||||
<link href="https://ionplustv.com/plugins/jquery-qtip/jquery.qtip.min.css" rel="stylesheet" type="text/css" />
|
||||
<link href="https://ionplustv.com/css/tippy.css" rel="stylesheet" type="text/css" />
|
||||
<!--[if lt IE 9]>
|
||||
<script async src="//oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js" type="text/javascript"></script>
|
||||
<script async src="//oss.maxcdn.com/respond/1.4.2/respond.min.js" type="text/javascript"></script><![endif]-->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "http://schema.org",
|
||||
"@type": "WebSite",
|
||||
"name" : "ION Plus",
|
||||
"alternateName" : "ION Plus",
|
||||
"url": "https://ionplustv.com"
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Google Tag Manager -->
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-T38SVZL');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
<script>
|
||||
var Laravel = {"csrfToken":"rPuSragJhlH3NgEm4UTCJKoikPCrHSPvA6pdeZim"}
|
||||
window.url = {
|
||||
base: "https://ionplustv.com",
|
||||
api: "https://ionplustv.com/api/v1",
|
||||
};
|
||||
</script>
|
||||
<style>
|
||||
#image-modal {
|
||||
top: 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body class="schedule schedule-2023-11-08">
|
||||
<!-- Google Tag Manager (noscript) -->
|
||||
<noscript>
|
||||
<iframe src="https://www.googletagmanager.com/ns.html?id=GTM-T38SVZL"
|
||||
height="0"
|
||||
width="0"
|
||||
style="display:none;visibility:hidden"
|
||||
></iframe>
|
||||
</noscript>
|
||||
<!-- End Google Tag Manager (noscript) -->
|
||||
<div class="wrapper">
|
||||
|
||||
<div class="nav-wrapper">
|
||||
<div class="row-fluid top-bar primary-bg-color" data-spy="affix" data-offset-top="50">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xs-4">
|
||||
<a href="https://ionplustv.com" title="ION Plus">
|
||||
<span id="logo" title="ION Plus">
|
||||
<img src="https://ionplustv.com/static/global/IONPlus-logo1.svg" />
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-sm-8 pull-right">
|
||||
<nav class="navbar navbar-default">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<div class="mobile-header">
|
||||
<button class="small-screen-trigger" title="show menu">
|
||||
<i class="fa fa-bars"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collapse navbar-collapse" id="ion-main-nav">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="active"><a href="https://ionplustv.com/shows">Shows</a></li>
|
||||
|
||||
|
||||
<li><a href="https://ionplustv.com/holiday-movies">Movies</a></li>
|
||||
|
||||
|
||||
|
||||
<li><a href="https://ionplustv.com/schedule">Schedule</a></li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- /main nav --> <div id="sub-nav" class="hidden-xs row-fluid sub-nav" data-spy="affix" data-offset-top="75">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-md-9">
|
||||
<ul class="list-inline elements">
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-3 hidden-xs hidden-sm text-right social">
|
||||
<ul class="social list-inline">
|
||||
<li><a href="https://www.facebook.com/IONTelevision"
|
||||
class="qtip-basic"
|
||||
title="Like us on Facebook."
|
||||
target="_blank"><em class="fa fa-facebook text-white"></em></a></li>
|
||||
<li><a href="https://twitter.com/iontv/"
|
||||
class="qtip-basic"
|
||||
title="Follow us on Twitter."
|
||||
target="_blank"><em class="fa fa-twitter text-white"></em></a></li>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<li><a href="#"
|
||||
class="channel-finder-btn qtip-full"
|
||||
title-header="Find ION Plus."
|
||||
title="See where you can watch ION Plus.">
|
||||
<em class="fa fa-search" style="margin-right: 0.5rem;"></em> <small>Find <span class="visible-lg-inline">ION PLUS</span></small>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- /sub nav -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="main-content-holder" id="">
|
||||
<div class="row-fluid content">
|
||||
<div class="row-fluid content">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="page-content" style="min-height:300px;">
|
||||
<div>
|
||||
<h1>Whoops, looks like something went wrong.</h1>
|
||||
<p>The link you followed may be broken, or the page may have been removed.</p>
|
||||
<ul class="error-actions-list">
|
||||
<li><a onclick="window.history.back();" href="javascript:void(0);">Go back to the previous page</a></li>
|
||||
<li><a href="https://ionplustv.com" target="_top">Go to ION Television's homepage</a></li>
|
||||
<li><a href="https://ionplustv.com/contact" target="_top" href="javascript:void(0);">Contact us</a></li>
|
||||
<li><a class="search-btn" href="javascript:void(0);">Search ION Television</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div></div>
|
||||
<div class="row-fluid content">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div class="page-content" style="min-height:250px;">
|
||||
<div>
|
||||
<h3>About ION Television</h3>
|
||||
<p>
|
||||
A leading U.S. general entertainment network, ION Television combines high-quality programming and dependable distribution with an attitude of innovation and growth. Its "Positively Entertaining" network brand positioning features a formula of proven series, an expansive catalog of blockbuster movies and a commitment to introduce new original programming. If you don't get ION Television on your system, click here to
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row-fluid footer">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xs-12 text-center">
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<ul class="list-inline ">
|
||||
<li><a href="https://ionplustv.com/privacy-policy" title="Privacy Policy">PRIVACY POLICY</a></li>
|
||||
<li>|</li>
|
||||
<li><a href="https://ionplustv.com/privacy-center" title="Privacy Center">PRIVACY CENTER</a></li>
|
||||
<li>|</li>
|
||||
<li><a href="https://ionplustv.com/terms-of-use" title="Terms of Use">TERMS OF USE</a></li>
|
||||
<li>|</li>
|
||||
<li><a href="http://iontelevision.com" target="_blank" title="ION Television">ION TELEVISION</a></li>
|
||||
<li>|</li>
|
||||
<li><a href="https://ionplustv.com/faqs" title="FAQs">FAQS</a></li>
|
||||
<li>|</li>
|
||||
<li><a href="https://iontelevision.com/contact?source=ion-plustv" title="Contact Us">CONTACT</a></li>
|
||||
<li>|</li>
|
||||
<li><a href="https://www.facebook.com/IONTelevision" target="_blank"><em class="fa fa-facebook-square text-white fa-2x"></em></a></li>
|
||||
<li><a href="https://twitter.com/iontv/" target="_blank"><em class="fa fa-twitter-square text-white fa-2x"></em></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<p>
|
||||
All content, images, media and associated materials are property of <a href="https://ionmedia.com" target="_blank" title="ION Media Networks">ION Media Networks</a>.
|
||||
© 2022 <a href="https://ionmedia.com" target="_blank" title="ionmedia.com">ION Media Networks</a>, all rights reserved.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- end footer --> </div>
|
||||
|
||||
<div class="modal fade modal-fullscreen force-fullscreen" id="search-modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h4 class="modal-title">Search ION Plus</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="pull-right"><em class="fa fa-map-marker"></em> Looking for ION Plus in your area? <a href="javascript:void(0);" class="channel-finder-toggle-btn" >Click Here</a></div>
|
||||
<input x-webkit-speech onwebkitspeechchange="transcribe(this.value)" autocomplete='off' class="search-bar default-search-bar" type="text" name="q" placeholder="Search for shows, movies or channels." />
|
||||
<div id="search-results-container">
|
||||
<div id="search-results-message" class="search-results-message"></div>
|
||||
<ul id="search-results" class="search-results"></ul>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div><!-- /.modal -->
|
||||
|
||||
<div class="modal fade modal-fullscreen force-fullscreen" id="channel-finder-modal" tabindex="-1" role="dialog"
|
||||
aria-labelledby="myModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true" title="Close"><i
|
||||
class="fa fa-times"></i></button>
|
||||
<div class="modal-content">
|
||||
<h3 class="find-ion__header">ION Plus is available to stream free</h3>
|
||||
<div class="modal-body">
|
||||
<div class="viewing-platforms__wrapper">
|
||||
<ul class="viewing-platforms__list">
|
||||
<li class="viewing-platform__item">
|
||||
<a href="https://www.amazon.com/adlp/freevee-about?ref=IMDBTV_ACQ_PSR_BRN_zzz_0hrW8Hqnc_c592503922558_" target="_blank" class="viewing-platform__link">
|
||||
<img class="viewing-platform__logo" src="https://ionplustv.com/static/viewing-platforms/original/viewing-platform-logo-62cc7c6d38bcb-10d0b0bfe0ac52a16032f06383548e1e4b3f3896.png"
|
||||
alt="Freevee" />
|
||||
<div class="viewing-platform__channel">
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="viewing-platform__item">
|
||||
<a href="https://www.samsungtvplus.com/" target="_blank" class="viewing-platform__link">
|
||||
<img class="viewing-platform__logo" src="https://ionplustv.com/static/viewing-platforms/original/viewing-platform-logo-630c2dd7f29e0-6ac98e7a15e3e1ffbce6aec767d282d437526750.png"
|
||||
alt="Samsung TV Plus" />
|
||||
<div class="viewing-platform__channel">
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="viewing-platform__item">
|
||||
<a href="https://www.tclchannel.com/en/home/Home/513" target="_blank" class="viewing-platform__link">
|
||||
<img class="viewing-platform__logo" src="https://ionplustv.com/static/viewing-platforms/original/viewing-platform-logo-62cc7c21b8b9d-981a7b2c97f575d36ca6d8af4178da4470b3d3eb.png"
|
||||
alt="TCL Channel" />
|
||||
<div class="viewing-platform__channel">
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="viewing-platform__item">
|
||||
<a href="https://tubitv.com/live/684165/ion-plus" target="_blank" class="viewing-platform__link">
|
||||
<img class="viewing-platform__logo" src="https://ionplustv.com/static/viewing-platforms/original/viewing-platform-logo-6307a9ddec842-b591adb3ab1ed212531ed4e6165c68dbb9fe84ca.png"
|
||||
alt="Tubi" />
|
||||
<div class="viewing-platform__channel">
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="viewing-platform__item">
|
||||
<a href="https://therokuchannel.roku.com/" target="_blank" class="viewing-platform__link">
|
||||
<img class="viewing-platform__logo" src="https://ionplustv.com/static/viewing-platforms/original/viewing-platform-logo-62fbb5f3a5b2a-90b1dea3c5386f7ea82b077710eacc67a76ccb28.png"
|
||||
alt="Roku Channel" />
|
||||
<div class="viewing-platform__channel">
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="viewing-platform__item">
|
||||
<a href="https://www.vizio.com/en/watchfreeplus" target="_blank" class="viewing-platform__link">
|
||||
<img class="viewing-platform__logo" src="https://ionplustv.com/static/viewing-platforms/original/viewing-platform-logo-62c4a4391ab84-b0c86a44a53aab68a8b6a551d5d455f68c306f68.png"
|
||||
alt="Vizio WatchFree Plus" />
|
||||
<div class="viewing-platform__channel">
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
<li class="viewing-platform__item">
|
||||
<a href="https://xumo.com" target="_blank" class="viewing-platform__link">
|
||||
<img class="viewing-platform__logo" src="https://ionplustv.com/static/viewing-platforms/original/viewing-platform-logo-62c4a569464e3-44d1be135b95d06f9e5e54c283483b2399e2e1a1.png"
|
||||
alt="Xumo" />
|
||||
<div class="viewing-platform__channel">
|
||||
|
||||
</div>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="channel-finder__tv-screens">
|
||||
<img class="tv-screens--large"
|
||||
src="https://ionplustv.com/static/global/find-ion/tv-screens-small-murdoch-mysteries.png"
|
||||
alt="" />
|
||||
<img class="tv-screens--small"
|
||||
src="https://ionplustv.com/static/global/find-ion/tv-screens-small-murdoch-mysteries.png"
|
||||
alt="" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="find-us__ad-wrapper">
|
||||
<div class="find-us__img find-us__ad--mobile">
|
||||
<a href="https://www.thefreetvproject.org/scan/?utm_campaign=digital_networks_scan_ionplus&utm_source=website&utm_medium=static"
|
||||
title="Learn how to get more free channels on your TV"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
<img src="https://iontelevision.com/static/global/PSC-53177_Networks_Rescan_ads_R5-A-300x250.png" alt="Love finding more free channels? Rescan your TV to get new channels with your atenna. Learn How Here" />
|
||||
</a>
|
||||
</div>
|
||||
<div class="find-us__img">
|
||||
<a href="https://www.thefreetvproject.org/scan/?utm_campaign=digital_networks_scan_ionplus&utm_source=website&utm_medium=static"
|
||||
title="Learn how to get more free channels on your TV"
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
>
|
||||
<img src="https://iontelevision.com/static/global/PSC-53177_Networks_Rescan_ads_R5-A-728x90.png" alt="Love finding more free channels? Rescan your TV to get new channels with your atenna. Learn How Here" style="border: 1px solid #ddd;"/>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div><!-- /.modal --> <div id="video-modal" class="modal fade modal-fullscreen force-fullscreen" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close pull-right close-video-modal" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
|
||||
<h3 id="video-modal-title"></h3>
|
||||
<h4 id="video-modal-subtitle"></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-9">
|
||||
<div id="video-modal-container">
|
||||
<div class="row"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-3 dark-bg" id="video-modal-info-box-wrapper">
|
||||
<div id="video-modal-info-box" class="scrollbox">
|
||||
<div class="content">
|
||||
<h2 id="video-modal-airdate" class="air-date brand-color"></h2>
|
||||
<a id="video-modal-more-showtimes-link" href="javascript:void(0)">More Showtimes</a>
|
||||
<div id="video-modal-more-showtimes"></div>
|
||||
<p> </p>
|
||||
<h4 id="video-modal-description-label">ON THIS EPISODE</h4>
|
||||
<span id="video-modal-description" ></span>
|
||||
<a id="video-modal-show-url" href=""><em class="fa fa-share"></em></a>
|
||||
|
||||
<h4 id="video-modal-cast-label">CAST</h4>
|
||||
<div id="video-modal-casts"></div>
|
||||
<br/>
|
||||
<div id="video-modal-more-episodes-wrapper">
|
||||
<h4>MORE EPISODES</h4>
|
||||
<div id="video-modal-more-episodes"></div>
|
||||
</div>
|
||||
<div id="video-modal-learn-more-wrapper"></div>
|
||||
<br clear="all"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div><!-- /.modal -->
|
||||
|
||||
<div id="video-only-modal" class="modal fade modal-fullscreen force-fullscreen" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close pull-right close-video-modal" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<h3 id="video-only-modal-title"></h3>
|
||||
<h4 id="video-only-modal-subtitle"></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div id="video-only-modal-container">
|
||||
<div class="row"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div><!-- /.modal --> <div id="image-modal" class="modal fade modal-fullscreen force-fullscreen" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content" >
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div id="image-modal-container">
|
||||
<button type="button" class="close pull-right close-image-modal" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<div class="row text-center">
|
||||
<div class="col-sm-12">
|
||||
<img style="margin: 3% auto;" class="img img-responsive" src="" /></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div><!-- /.modal --> <div id="add-this-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content" >
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
<div id="image-modal-container">
|
||||
<button type="button" class="close pull-right close-image-modal" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<div class="row text-center">
|
||||
<div class="col-sm-12">
|
||||
<img style="margin: 3% auto;" class="img img-responsive" src="" /></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div><!-- /.modal -->
|
||||
|
||||
<div id="social-share-container" style="display:none;">
|
||||
<div style="height:auto;font-size:30px;">
|
||||
<center>
|
||||
<a class="share_link" title="Share this page on Facebook" href="javascript:void(0);" onClick="socialShare('Facebook')" >
|
||||
<i class="fa fa-facebook facebook-icon"> </i>
|
||||
</a>
|
||||
|
||||
<a class="share_link" title="Share this page on Twitter" href="javascript:void(0);" onClick="socialShare('Twitter')" >
|
||||
<i class="fa fa-twitter twitter-icon"> </i>
|
||||
</a>
|
||||
</center>
|
||||
</div>
|
||||
</div>
|
||||
<nav class="small-screen-nav" role="navigation">
|
||||
<button type="button" class="small-screen-nav__close">×</button>
|
||||
<div class="main-nav__secondary-nav">
|
||||
<ul class="small-screen-nav__main">
|
||||
<li>
|
||||
<a href="https://ionplustv.com" class="small-screen-nav__ion-plus main-nav__logo" rel="noopener"><span class="sr-only">ION Plus</span></a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/shows">Shows</a>
|
||||
</li>
|
||||
<!-- -->
|
||||
<li>
|
||||
<a href="/holiday-movies">Holiday Movies</a>
|
||||
</li>
|
||||
<!-- -->
|
||||
<li>
|
||||
<a href="/schedule">Schedule</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="#" class="channel-finder-btn" title="See where you can watch ION Plus.">Find ION PLUS</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class='small-screen-nav__social'>
|
||||
<a href="http://www.facebook.com/IONPlusTV" target="_blank" rel="noreferrer">
|
||||
<span class="sr-only">Facebook</span>
|
||||
<i class="fa fa-facebook"></i>
|
||||
</a>
|
||||
<a href="http://twitter.com/ionplustv" target="_blank" rel="noreferrer">
|
||||
<span class="sr-only">Twitter</span>
|
||||
<i class="fa fa-twitter"></i>
|
||||
</a>
|
||||
<!-- <a href="https://www.instagram.com/iontelevision/" target="_blank" rel="noreferrer">
|
||||
<span class="sr-only">Instagram</span>
|
||||
<i class="fa fa-instagram"></i>
|
||||
</a> -->
|
||||
</div>
|
||||
<hr class='small-screen-nav__seperator'/>
|
||||
<div class='small-screen-nav__related-sites'>
|
||||
<a class="related-sites__link related-sites--ion" href="https://iontelevision.com" target="_blank" rel="noreferrer">
|
||||
<span class='sr-only'>ION Televison</span>
|
||||
</a>
|
||||
<a class="related-sites__link related-sites--ion-mystery" href="https://ionmystery.com" target="_blank" rel="noreferrer">
|
||||
<span class='sr-only'>ION Mystery</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<script>
|
||||
var site_url = "https://ionplustv.com/";
|
||||
</script>
|
||||
<script src="https://ionplustv.com/js/localforage.min.js"></script>
|
||||
<script src="//maps.googleapis.com/maps/api/js?key=AIzaSyCe4fzC9oWfIiCeLyUZsie7l7GQoGF68ME"></script>
|
||||
<script async src="//sadmin.brightcove.com/js/BrightcoveExperiences.js" type="text/javascript"></script>
|
||||
<script src="https://ionplustv.com/js/ion.js" type="text/javascript"></script>
|
||||
<!-- Go to www.addthis.com/dashboard to customize your tools -->
|
||||
<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-59dcce4786590758">
|
||||
</script>
|
||||
<script type="text/javascript">
|
||||
var addthis_share = addthis_share || {}
|
||||
addthis_share = {
|
||||
passthrough : {
|
||||
twitter: {
|
||||
via: "ionlife",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setTimeout(function() {
|
||||
|
||||
if ($('#modal-background').length && !$('body').attr('class').length ) {
|
||||
$('#modal-background, #survey-modal').addClass('visible');
|
||||
|
||||
$('.survey-close').on('click', function() {
|
||||
$('#modal-background, #survey-modal').removeClass('visible');
|
||||
});
|
||||
|
||||
$('#modal-background').on('click', function() {
|
||||
$('#modal-background, #survey-modal').removeClass('visible');
|
||||
});
|
||||
}
|
||||
|
||||
}, 500);
|
||||
$(document).ready(function() {
|
||||
$(".small-screen-trigger").on('click', function(e) {
|
||||
e.preventDefault();
|
||||
$('.small-screen-nav').addClass('small-screen-nav--active');
|
||||
});
|
||||
|
||||
$('.small-screen-nav__close').on('click', function(e) {
|
||||
e.preventDefault();
|
||||
$('.small-screen-nav').removeClass('small-screen-nav--active');
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
if(parent !== window){
|
||||
window.location = window.location.origin+"/iframe-not-found";
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
107
sites/ionplustv.com/ionplustv.com.config.js
Normal file
107
sites/ionplustv.com/ionplustv.com.config.js
Normal file
|
@ -0,0 +1,107 @@
|
|||
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: 'ionplustv.com',
|
||||
url({ date }) {
|
||||
return `https://ionplustv.com/schedule/${date.format('YYYY-MM-DD')}`
|
||||
},
|
||||
parser: function ({ content, date }) {
|
||||
let programs = []
|
||||
const items = parseItems(content)
|
||||
for (let item of items) {
|
||||
const $item = cheerio.load(item)
|
||||
const prev = programs[programs.length - 1]
|
||||
let start = parseStart($item, date)
|
||||
if (prev) {
|
||||
if (start.isBefore(prev.start)) {
|
||||
start = start.add(1, 'd')
|
||||
date = date.add(1, 'd')
|
||||
}
|
||||
prev.stop = start
|
||||
}
|
||||
const duration = parseDuration($item)
|
||||
let stop = start.add(duration, 'm')
|
||||
|
||||
programs.push({
|
||||
title: parseTitle($item),
|
||||
sub_title: parseSubTitle($item),
|
||||
description: parseDescription($item),
|
||||
icon: parseIcon($item),
|
||||
rating: parseRating($item),
|
||||
start,
|
||||
stop
|
||||
})
|
||||
}
|
||||
|
||||
return programs
|
||||
}
|
||||
}
|
||||
|
||||
function parseDescription($item) {
|
||||
return $item('.panel-body > div > div > div > p:nth-child(2)').text().trim()
|
||||
}
|
||||
|
||||
function parseIcon($item) {
|
||||
return $item('.video-thumbnail img').attr('src')
|
||||
}
|
||||
|
||||
function parseTitle($item) {
|
||||
return $item('.show-title').text().trim()
|
||||
}
|
||||
|
||||
function parseSubTitle($item) {
|
||||
return $item('.panel-title > div > div > div > div:nth-child(2) > p')
|
||||
.text()
|
||||
.trim()
|
||||
.replace(/\s\s+/g, ' ')
|
||||
}
|
||||
|
||||
function parseRating($item) {
|
||||
const [_, rating] = $item('.tv-rating')
|
||||
.text()
|
||||
.match(/([^(]+)/) || [null, null]
|
||||
|
||||
return rating
|
||||
? {
|
||||
system: 'MPA',
|
||||
value: rating.trim()
|
||||
}
|
||||
: null
|
||||
}
|
||||
|
||||
function parseStart($item, date) {
|
||||
let time = $item('.panel-title h2').clone().children().remove().end().text().trim()
|
||||
time = time.includes(':') ? time : time + ':00'
|
||||
const meridiem = $item('.panel-title h2 > .meridiem').text().trim()
|
||||
|
||||
return dayjs.tz(
|
||||
`${date.format('YYYY-MM-DD')} ${time} ${meridiem}`,
|
||||
'YYYY-MM-DD H:mm A',
|
||||
'America/New_York'
|
||||
)
|
||||
}
|
||||
|
||||
function parseDuration($item) {
|
||||
const [_, duration] = $item('.tv-rating')
|
||||
.text()
|
||||
.trim()
|
||||
.match(/\((\d+)/) || [null, null]
|
||||
|
||||
return parseInt(duration)
|
||||
}
|
||||
|
||||
function parseItems(content) {
|
||||
if (!content) return []
|
||||
const $ = cheerio.load(content)
|
||||
|
||||
return $(`#accordion > div`).toArray()
|
||||
}
|
53
sites/ionplustv.com/ionplustv.com.test.js
Normal file
53
sites/ionplustv.com/ionplustv.com.test.js
Normal file
|
@ -0,0 +1,53 @@
|
|||
// npx epg-grabber --config=sites/ionplustv.com/ionplustv.com.config.js --channels=sites/ionplustv.com/ionplustv.com_us.channels.xml --output=guide.xml --days=2
|
||||
|
||||
const { parser, url, request } = require('./ionplustv.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-11-08', 'YYYY-MM-DD').startOf('d')
|
||||
const channel = {
|
||||
site_id: '#',
|
||||
xmltv_id: 'IONPlus.us'
|
||||
}
|
||||
|
||||
it('can generate valid url', () => {
|
||||
expect(url({ date })).toBe('https://ionplustv.com/schedule/2022-11-08')
|
||||
})
|
||||
|
||||
it('can parse response', () => {
|
||||
const content = fs.readFileSync(path.resolve(__dirname, '__data__/content.html'))
|
||||
|
||||
let results = parser({ content, date })
|
||||
results = results.map(p => {
|
||||
p.start = p.start.toJSON()
|
||||
p.stop = p.stop.toJSON()
|
||||
return p
|
||||
})
|
||||
|
||||
expect(results[0]).toMatchObject({
|
||||
start: '2022-11-08T10:00:00.000Z',
|
||||
stop: '2022-11-08T11:00:00.000Z',
|
||||
title: 'All For Nothing?',
|
||||
sub_title: '226 : Randy & Sarita Vs. Jean-marcel & Melodie',
|
||||
icon: 'https://ionplustv.com/static/programs/shows/all-for-nothing/show-banner-all-for-nothing-5ab162f2d8ee6-897aca6d7d9a7d4e2026ca3b592d8b2a047238fa.png',
|
||||
rating: {
|
||||
system: 'MPA',
|
||||
value: 'TV-PG+L'
|
||||
},
|
||||
description:
|
||||
"Randy and Sarita want to take their relationship to the next level and move-in together. Blending their families will require space for seven so they must sell Randy's dated bungalow for top dollar. Paul and Penny have differing opinions on the best plan for this house, but they do agree that all the wallpaper boarders must go! Having struggled to get the demolition started, Randy and Sarita turn up the reno pace in the second week which includes gambling on a poker night fundraiser. In preparation for retirement, Jean-Marcel and Melodie are ready to downsize. Having been out of the real estate market for ages, they have no idea how to ˜wow' the buyers of today. Armed with Paul and Penny's job list to bring their house into the now, they make major progress on day one. Flu, leaks, and a free shower insert that won't fit into their bathroom slow down their pace giving the competition a chance to overtake their early lead."
|
||||
})
|
||||
})
|
||||
|
||||
it('can handle empty guide', () => {
|
||||
const results = parser({
|
||||
content: fs.readFileSync(path.resolve(__dirname, '__data__/no-content.html')),
|
||||
date
|
||||
})
|
||||
expect(results).toMatchObject([])
|
||||
})
|
6
sites/ionplustv.com/ionplustv.com_us.channels.xml
Normal file
6
sites/ionplustv.com/ionplustv.com_us.channels.xml
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<site site="ionplustv.com">
|
||||
<channels>
|
||||
<channel lang="en" xmltv_id="IONPlusEast.us" site_id="#">ION Plus</channel>
|
||||
</channels>
|
||||
</site>
|
Loading…
Add table
Add a link
Reference in a new issue