It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn't find one. Please enter the address of your feed to validate.

Source: http://tapinto.net

  1. <!DOCTYPE html>
  2. <html class='no-js' dir='ltr' lang='en'>
  3. <head>
  4. <meta charset='utf-8'>
  5. <meta content='width=device-width, initial-scale=1.0, maximum-scale=5' name='viewport'>
  6.  
  7. <title>TAPinto</title>
  8. <link rel="shortcut icon" type="image/x-icon" href="/assets/favicon-ec33319a938e1fd16505424c4c26b30688b7d6498833f1f9bf004fe7ff291176.ico" />
  9. <script>
  10.  window.fbAsyncInit = function() {
  11.    FB.init({
  12.      appId      : '1883897348500567',
  13.      xfbml      : true,
  14.      version    : 'v2.9'
  15.    });
  16.    FB.AppEvents.logPageView();
  17.  };
  18.  
  19.  (function(d, s, id) {
  20.    var js, fjs = d.getElementsByTagName(s)[0];
  21.    if (d.getElementById(id)) return;
  22.    js = d.createElement(s); js.id = id;
  23.    js.src = "https://connect.facebook.net/en_US/sdk.js#xfbml=1&version=v3.0";
  24.    fjs.parentNode.insertBefore(js, fjs);
  25.  }(document, 'script', 'facebook-jssdk'))
  26. </script>
  27.  
  28. <link rel="preconnect" href="https://fonts.gstatic.com">
  29. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Tangerine">
  30. <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Montserrat">
  31. <script src="//imasdk.googleapis.com/js/sdkloader/ima3.js" async></script>
  32. <script src="https://securepubads.g.doubleclick.net/tag/js/gpt.js" async></script>
  33. <script src="https://www.google.com/recaptcha/api.js?render=6LfXe74ZAAAAAHJBK2_g20veCbjMOmv54wNOLE_i"></script>
  34.  
  35. <meta name="description" content="TAPinto is a network of online local news and digital marketing platforms for communities in FL, NJ, NY and PA." />
  36.  
  37. <script>
  38.  var _gaq = _gaq || [];
  39.  _gaq.push(['_setAccount', 'UA-5656205-1']);
  40.  _gaq.push(['_trackPageview']);
  41.    
  42.  (function() {
  43.    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  44.    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  45.    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  46.  })();
  47. </script>
  48. <!-- Google Tag Manager -->
  49. <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
  50. new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
  51. j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
  52. 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
  53. })(window,document,'script','dataLayer','GTM-T6GGB6V');</script>
  54. <!-- End Google Tag Manager -->
  55.  
  56. <script>
  57.  !function(f,b,e,v,n,t,s)
  58.  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  59.  n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  60.  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  61.  n.queue=[];t=b.createElement(e);t.async=!0;
  62.  t.src=v;s=b.getElementsByTagName(e)[0];
  63.  s.parentNode.insertBefore(t,s)}(window,document,'script',
  64.  'https://connect.facebook.net/en_US/fbevents.js');
  65.  fbq('init', '904299443083000');
  66. </script>
  67. <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=904299443083000&ev=PageView&noscript=1"/></noscript>
  68. <script>
  69.  fbq('track', 'PageView');
  70. </script>
  71.  
  72. <script>
  73.  (function() {
  74.    window._pa = window._pa || {};
  75.    // _pa.orderId = "myOrderId"; // OPTIONAL: attach unique conversion identifier to conversions
  76.    // _pa.revenue = "19.99"; // OPTIONAL: attach dynamic purchase values to conversions
  77.    // _pa.productId = "myProductId"; // OPTIONAL: Include product ID for use with dynamic ads
  78.    var pa = document.createElement('script'); pa.type = 'text/javascript'; pa.async = true;
  79.    pa.src = ('https:' == document.location.protocol ? 'https:' : 'http:') + "//tag.marinsm.com/serve/5b58b4bf6f4e021abd0000b8.js";
  80.    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(pa, s);
  81.  })();
  82. </script>
  83. <link rel="stylesheet" media="screen" href="/assets/application-60ca58c378124f29343ed12ff12b4d808cd9650353fd97747672a1fef2960783.css" />
  84. <link rel="stylesheet" media="print" href="/assets/print-8326726ca213bace3745d8d4efbdaa7e288c712db4b660d6fd6b02cdd7c1a930.css" />
  85. <script src="/packs/js/overallHomepage-1b890e04721f23930bfa.js"></script>
  86. </head>
  87. <body class='index production' id='towns'>
  88. <!-- Google Tag Manager (noscript) -->
  89. <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-T6GGB6V"
  90. height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  91. <!-- End Google Tag Manager (noscript) -->
  92.  
  93. <div id='overall-header-container'>
  94. <div id="Masterhead-react-component-e2b8e3d1-2beb-4aa5-a855-31462d539bc3"></div>
  95.      <script type="application/json" class="js-react-on-rails-component" data-component-name="Masterhead" data-dom-id="Masterhead-react-component-e2b8e3d1-2beb-4aa5-a855-31462d539bc3">{"is_article_preview":false,"is_path_user_sign_in":false,"is_iframe":false,"town_slug":null,"section":null,"overall_page":true,"current_user":null,"display_weather":null,"is_weather_clickable":null,"sponsor_info":null,"show_thankyou_message":false,"show_permission_form":false}</script>
  96.      
  97.  
  98. </div>
  99. <div class='mobile_no_margin'>
  100. <script type="application/json" id="js-react-on-rails-context">{"railsEnv":"production","inMailer":false,"i18nLocale":"en","i18nDefaultLocale":"en","rorVersion":"11.3.1","rorPro":false,"href":"http://tapinto.net/","location":"/","scheme":"http","host":"tapinto.net","port":null,"pathname":"/","search":null,"httpAcceptLanguage":null,"serverSide":false}</script>
  101. <div id="OverallHomepage-react-component-feb2f320-db15-44f3-8821-69768ea46d9a"></div>
  102.      <script type="application/json" class="js-react-on-rails-component" data-component-name="OverallHomepage" data-dom-id="OverallHomepage-react-component-feb2f320-db15-44f3-8821-69768ea46d9a">{}</script>
  103.      
  104.  
  105.  
  106. </div>
  107. <div id="Footer-react-component-43d7817d-a19b-4bc3-a37f-034039b6214d"></div>
  108.      <script type="application/json" class="js-react-on-rails-component" data-component-name="Footer" data-dom-id="Footer-react-component-43d7817d-a19b-4bc3-a37f-034039b6214d">{}</script>
  109.      
  110.  
  111. <script type="text/javascript">
  112.  (function(e,t,o,n,p,r,i){e.visitorGlobalObjectAlias=n;e[e.visitorGlobalObjectAlias]=e[e.visitorGlobalObjectAlias]||function(){(e[e.visitorGlobalObjectAlias].q=e[e.visitorGlobalObjectAlias].q||[]).push(arguments)};e[e.visitorGlobalObjectAlias].l=(new Date).getTime();r=t.createElement("script");r.src=o;r.async=true;i=t.getElementsByTagName("script")[0];i.parentNode.insertBefore(r,i)})(window,document,"https://diffuser-cdn.app-us1.com/diffuser/diffuser.js","vgo");
  113.  vgo('setAccount', '90850284');
  114.  vgo('setTrackByDefault', true);
  115.  
  116.  vgo('process');
  117. </script>
  118.  
  119. <script>
  120.  // Copyright 2013 Google Inc. All Rights Reserved.
  121.  // You may study, modify, and use this example for any purpose.
  122.  // Note that this example is provided "as is", WITHOUT WARRANTY
  123.  // of any kind either expressed or implied.
  124.  var town_name = "homepage";
  125.  var adsManager;
  126.  var adsLoader;
  127.  var adDisplayContainer;
  128.  var intervalTimer;
  129.  var playButton;
  130.  var videoContent;
  131.  var poster;
  132.  var dfp_config_id = "26641674"
  133.  
  134.  
  135.  function init() {
  136.    videoContent = document.getElementById('contentElement');
  137.    playButton = document.getElementById('playButton');
  138.    if (playButton){
  139.      playButton.addEventListener('click', playAds);
  140.    }
  141.    setUpIMA();
  142.  }
  143.  
  144.  function setUpIMA() {
  145.    // Create the ad display container.
  146.    createAdDisplayContainer();
  147.    // Create ads loader.
  148.    adsLoader = new google.ima.AdsLoader(adDisplayContainer);
  149.    // Listen and respond to ads loaded and error events.
  150.    adsLoader.addEventListener(
  151.        google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,
  152.        onAdsManagerLoaded,
  153.        false);
  154.    adsLoader.addEventListener(
  155.        google.ima.AdErrorEvent.Type.AD_ERROR,
  156.        onAdError,
  157.        false);
  158.  
  159.    // An event listener to tell the SDK that our content video
  160.    // is completed so the SDK can play any post-roll ads.
  161.    var contentEndedListener = function() {adsLoader.contentComplete();};
  162.    videoContent.onended = contentEndedListener;
  163.  
  164.    var tag_url = 'https://pubads.g.doubleclick.net/gampad/ads?sz=300x250&iu=/' + dfp_config_id + '/video-ad-unit&cust_params=town%3D' + town_name +  '&impl=s&gdfp_req=1&env=vp&output=vast&unviewed_position_start=1&url=[referrer_url]&description_url=[description_url]&correlator=[timestamp]'
  165.    // Request video ads.
  166.    var adsRequest = new google.ima.AdsRequest();
  167.    adsRequest.adTagUrl = tag_url;
  168.  
  169.    // Specify the linear and nonlinear slot sizes. This helps the SDK to
  170.    // select the correct creative if multiple are returned.
  171.    adsRequest.linearAdSlotWidth = 300;
  172.    adsRequest.linearAdSlotHeight = 250;
  173.  
  174.    adsRequest.nonLinearAdSlotWidth = 300;
  175.    adsRequest.nonLinearAdSlotHeight = 250;
  176.  
  177.    adsLoader.requestAds(adsRequest);
  178.  }
  179.  
  180.  
  181.  function createAdDisplayContainer() {
  182.    // We assume the adContainer is the DOM id of the element that will house
  183.    // the ads.
  184.    adDisplayContainer = new google.ima.AdDisplayContainer(
  185.        document.getElementById('adContainer'), videoContent);
  186.  }
  187.  
  188.  function playAds() {
  189.    // Initialize the container. Must be done via a user action on mobile devices.
  190.    videoContent.load();
  191.    adDisplayContainer.initialize();
  192.  
  193.    
  194.  
  195.    try {
  196.      // Initialize the ads manager. Ad rules playlist will start at this time.
  197.      adsManager.init(300, 250, google.ima.ViewMode.NORMAL);
  198.      // Call play to start showing the ad. Single video and overlay ads will
  199.      // start at this time; the call will be ignored for ad rules.
  200.      adsManager.start();
  201.  
  202.      document.getElementById('playButton').style.display = 'none';
  203.      
  204.      poster = $("#contentElement").attr("poster");
  205.    } catch (adError) {
  206.      // An error may be thrown if there was a problem with the VAST response.
  207.      videoContent.play();
  208.    }
  209.  }
  210.  
  211.  function onAdsManagerLoaded(adsManagerLoadedEvent) {
  212.    // Get the ads manager.
  213.    var adsRenderingSettings = new google.ima.AdsRenderingSettings();
  214.    adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true;
  215.    // videoContent should be set to the content video element.
  216.    adsManager = adsManagerLoadedEvent.getAdsManager(
  217.        videoContent, adsRenderingSettings);
  218.  
  219.    // Add listeners to the required events.
  220.    adsManager.addEventListener(
  221.        google.ima.AdErrorEvent.Type.AD_ERROR,
  222.        onAdError);
  223.    adsManager.addEventListener(
  224.        google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED,
  225.        onContentPauseRequested);
  226.    adsManager.addEventListener(
  227.        google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED,
  228.        onContentResumeRequested);
  229.    adsManager.addEventListener(
  230.        google.ima.AdEvent.Type.ALL_ADS_COMPLETED,
  231.        onAdEvent);
  232.  
  233.    // Listen to any additional events, if necessary.
  234.    adsManager.addEventListener(
  235.        google.ima.AdEvent.Type.LOADED,
  236.        onAdEvent);
  237.    adsManager.addEventListener(
  238.        google.ima.AdEvent.Type.STARTED,
  239.        onAdEvent);
  240.    adsManager.addEventListener(
  241.        google.ima.AdEvent.Type.COMPLETE,
  242.        onAdEvent);
  243.    adsManager.addEventListener(
  244.        google.ima.AdEvent.Type.CLICK,
  245.        onAdEvent);
  246.  }
  247.  
  248.  function onAdEvent(adEvent) {
  249.    // Retrieve the ad from the event. Some events (e.g. ALL_ADS_COMPLETED)
  250.    // don't have ad object associated.
  251.    var ad = adEvent.getAd();
  252.    switch (adEvent.type) {
  253.      case google.ima.AdEvent.Type.LOADED:
  254.        // This is the first event sent for an ad - it is possible to
  255.        // determine whether the ad is a video ad or an overlay.
  256.        if (!ad.isLinear()) {
  257.          // Position AdDisplayContainer correctly for overlay.
  258.          // Use ad.width and ad.height.
  259.          videoContent.play();
  260.        }
  261.        break;
  262.      case google.ima.AdEvent.Type.STARTED:
  263.        // This event indicates the ad has started - the video player
  264.        // can adjust the UI, for example display a pause button and
  265.        // remaining time.
  266.        if (ad.isLinear()) {
  267.          // For a linear ad, a timer can be started to poll for
  268.          // the remaining time.
  269.          intervalTimer = setInterval(
  270.              function() {
  271.                var remainingTime = adsManager.getRemainingTime();
  272.              },
  273.              300); // every 300ms
  274.        }
  275.        break;
  276.      case google.ima.AdEvent.Type.COMPLETE:
  277.        // This event indicates the ad has finished - the video player
  278.        // can perform appropriate UI actions, such as removing the timer for
  279.        // remaining time detection.
  280.        $("#adContainer").hide();  
  281.        if (ad.isLinear()) {
  282.          clearInterval(intervalTimer);
  283.        }
  284.        break;
  285.      case google.ima.AdEvent.Type.CLICK:
  286.        if (ad.isLinear()) {
  287.          adsManager.pause();
  288.          document.getElementById('playButton').style.display = 'initial';
  289.          $("#contentElement").attr("poster", poster);
  290.        }
  291.        break;
  292.    }
  293.  }
  294.  
  295.  function onAdError(adErrorEvent) {
  296.    // Handle the error logging.
  297.    console.log(adErrorEvent.getError());
  298.    adsManager.destroy();
  299.  }
  300.  
  301.  function onContentPauseRequested() {
  302.    videoContent.pause();
  303.    // This function is where you should setup UI for showing ads (e.g.
  304.    // display ad timer countdown, disable seeking etc.)
  305.    // setupUIForAds();
  306.  }
  307.  
  308.  function onContentResumeRequested() {
  309.    videoContent.play();
  310.    // This function is where you should ensure that your UI is ready
  311.    // to play content. It is the responsibility of the Publisher to
  312.    // implement this function when necessary.
  313.    // setupUIForContent();
  314.  
  315.  }
  316.  
  317.  // Wire UI element references and UI event listeners.
  318.  //Synchronically load video ad with react elements.
  319.  setTimeout(function () {
  320.  
  321.  console.log("start rendering mobile video ad")
  322.  init();
  323.  
  324.  }, 4000);
  325. </script>
  326.  
  327. </body>
  328. </html>
  329.  
Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda