Repository: any23
Updated Branches:
  refs/heads/master 0291f588d -> 817e744af


ANY23-381 fix illegal unescaped characters in JSON-LD


Project: http://git-wip-us.apache.org/repos/asf/any23/repo
Commit: http://git-wip-us.apache.org/repos/asf/any23/commit/817e744a
Tree: http://git-wip-us.apache.org/repos/asf/any23/tree/817e744a
Diff: http://git-wip-us.apache.org/repos/asf/any23/diff/817e744a

Branch: refs/heads/master
Commit: 817e744af90d8f3c9bf419e5c395c421e0c3924a
Parents: 0291f58
Author: Hans <[email protected]>
Authored: Thu Aug 2 16:33:36 2018 -0500
Committer: Hans <[email protected]>
Committed: Thu Aug 2 16:45:17 2018 -0500

----------------------------------------------------------------------
 .../any23/extractor/rdf/BaseRDFExtractor.java   |  73 ++-
 .../html/EmbeddedJSONLDExtractorTest.java       |  12 +
 .../html/html-jsonld-unescaped-characters.html  | 536 +++++++++++++++++++
 3 files changed, 613 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/any23/blob/817e744a/core/src/main/java/org/apache/any23/extractor/rdf/BaseRDFExtractor.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/any23/extractor/rdf/BaseRDFExtractor.java 
b/core/src/main/java/org/apache/any23/extractor/rdf/BaseRDFExtractor.java
index 9e24412..c0994bd 100644
--- a/core/src/main/java/org/apache/any23/extractor/rdf/BaseRDFExtractor.java
+++ b/core/src/main/java/org/apache/any23/extractor/rdf/BaseRDFExtractor.java
@@ -241,14 +241,7 @@ public abstract class BaseRDFExtractor implements 
Extractor.ContentExtractor {
                 int c = stream.read();
 
                 if (inQuote) {
-                    if (inEscape) {
-                        inEscape = false;
-                    } else if (c == '"') {
-                        inQuote = false;
-                    } else if (c == '\\') {
-                        inEscape = true;
-                    }
-                    return c;
+                    return readQuoted(c, stream);
                 }
 
                 //we're not in a quote
@@ -284,6 +277,70 @@ public abstract class BaseRDFExtractor implements 
Extractor.ContentExtractor {
 
         }
 
+        private int readQuoted(int c, PushbackInputStream stream) throws 
IOException {
+            if (inEscape) {
+                switch (c) {
+                    case 'u':
+                        //TODO: validate that 'u' is followed by 4 hex chars?
+                    case '"':
+                    case '\\':
+                    case '/':
+                    case 'b':
+                    case 'f':
+                    case 'n':
+                    case 'r':
+                    case 't':
+                    case -1:
+                        inEscape = false;
+                        return c;
+                    default:
+                        stream.unread(c);
+                        inEscape = false;
+                        return '\\';
+                }
+            } else {
+                switch (c) {
+                    case '\\':
+                        break;
+                    case '\n':
+                        stream.unread('n');
+                        break;
+                    case '\r':
+                        stream.unread('r');
+                        break;
+                    case '\b':
+                        stream.unread('b');
+                        break;
+                    case '\f':
+                        stream.unread('f');
+                        break;
+                    case '\t':
+                        stream.unread('t');
+                        break;
+                    case '"':
+                        inQuote = false;
+                        return c;
+                    case -1:
+                        return c;
+                    default:
+                        if (c < 0x20 || c == 0x7f) {
+                            String hex = Integer.toHexString(c);
+                            int ind = hex.length() - 1;
+                            stream.unread(hex.charAt(ind));
+                            stream.unread(ind == 0 ? '0' : hex.charAt(--ind));
+                            stream.unread(ind == 0 ? '0' : hex.charAt(--ind));
+                            stream.unread(ind == 0 ? '0' : hex.charAt(--ind));
+                            stream.unread('u');
+                            break;
+                        } else {
+                            return c;
+                        }
+                }
+                inEscape = true;
+                return '\\';
+            }
+        }
+
         private int stripComments(int c, PushbackInputStream stream) throws 
IOException {
             switch (c) {
                 case '/':

http://git-wip-us.apache.org/repos/asf/any23/blob/817e744a/core/src/test/java/org/apache/any23/extractor/html/EmbeddedJSONLDExtractorTest.java
----------------------------------------------------------------------
diff --git 
a/core/src/test/java/org/apache/any23/extractor/html/EmbeddedJSONLDExtractorTest.java
 
b/core/src/test/java/org/apache/any23/extractor/html/EmbeddedJSONLDExtractorTest.java
index 30a0773..41a0711 100644
--- 
a/core/src/test/java/org/apache/any23/extractor/html/EmbeddedJSONLDExtractorTest.java
+++ 
b/core/src/test/java/org/apache/any23/extractor/html/EmbeddedJSONLDExtractorTest.java
@@ -70,6 +70,18 @@ public class EmbeddedJSONLDExtractorTest extends 
AbstractExtractorTestCase {
                assertStatementsSize(null, null, null, 30);
        }
 
+       @Test
+       public void testJSONLDUnescapedCharacters() {
+               assertExtract("/html/html-jsonld-unescaped-characters.html");
+               assertModelNotEmpty();
+               assertStatementsSize(null, null, null, 375);
+               assertContains(RDFUtils.iri("http://schema.org/name";), "Weezer 
& Pixies\\\u0008");
+               assertContains(RDFUtils.iri("http://schema.org/description";),
+                               "#1 MAGIC SHOW IN L.A.\nThe current WINNER of 
the CW’s Penn & Teller’s FOOL US, Illusionist " +
+                                               "extraordinaire Ivan Amodei is 
on a national tour with his show INTIMATE ILLUSIONS." +
+                                               "\n\nCurrently, on an ei...");
+       }
+
        @Override
        protected ExtractorFactory<?> getExtractorFactory() {
                return new EmbeddedJSONLDExtractorFactory();

http://git-wip-us.apache.org/repos/asf/any23/blob/817e744a/test-resources/src/test/resources/html/html-jsonld-unescaped-characters.html
----------------------------------------------------------------------
diff --git 
a/test-resources/src/test/resources/html/html-jsonld-unescaped-characters.html 
b/test-resources/src/test/resources/html/html-jsonld-unescaped-characters.html
new file mode 100644
index 0000000..7b91411
--- /dev/null
+++ 
b/test-resources/src/test/resources/html/html-jsonld-unescaped-characters.html
@@ -0,0 +1,536 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+        
"http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-transitional.dtd";>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+--> <!-- Excerpted from  http://losangeles.eventful.com/events  -->
+<html xml:lang="en" lang="en" >
+<head>
+    <title>Events and things to do in Los Angeles, CA - concerts, movies, 
comedy - Eventful</title>
+</head>
+
+<body>
+
+<script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "Weezer & Pixies\",
+    "description": "",
+    "startDate": "Wednesday, August  8, 2018  7:00 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/040/435/710-7.png_/weezer-pixies-10.png",
+    "location": {
+      "@type": "Place",
+      "name": "LA Forum",
+      "url": "//losangeles.eventful.com/venues/la-forum-/V0-001-000189244-3",
+      "address": {
+        "streetAddress": "3900 West Manchester Boulevard",
+        "addressLocality": "Inglewood",
+        "addressRegion": "California",
+        "postalCode": "90305"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/weezer-pixies-/E0-001-115047966-2/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "Weezer"
+        },        {
+          "@type": "MusicGroup",
+          "name": "Pixies"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "Jackson Browne",
+    "description": "",
+    "startDate": "Saturday, August  4, 2018  7:30 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/003/492/453-7.jpeg_/jackson-browne-53.jpeg",
+    "location": {
+      "@type": "Place",
+      "name": "The Greek Theatre",
+      "url": 
"//losangeles.eventful.com/venues/the-greek-theatre-/V0-001-001461305-9",
+      "address": {
+        "streetAddress": "2700 North Vermont",
+        "addressLocality": "Los Angeles",
+        "addressRegion": "California",
+        "postalCode": "90027"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/jackson-browne-/E0-001-116531839-2/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "Jackson Browne"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "TAILGATE FEST",
+    "description": "",
+    "startDate": "Saturday, September  1, 2018 12:30 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/003/932/712-8.jpeg_/toby-keith-12.jpeg",
+    "location": {
+      "@type": "Place",
+      "name": "LA Forum",
+      "url": "//losangeles.eventful.com/venues/la-forum-/V0-001-000189244-3",
+      "address": {
+        "streetAddress": "3900 West Manchester Boulevard",
+        "addressLocality": "Inglewood",
+        "addressRegion": "California",
+        "postalCode": "90305"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/tailgate-fest-/E0-001-113753340-2/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "Toby Keith"
+        },        {
+          "@type": "MusicGroup",
+          "name": "Randy Houser"
+        },        {
+          "@type": "MusicGroup",
+          "name": "Nelly"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "Shakira - EL Dorado World Tour",
+    "description": "",
+    "startDate": "Wednesday, August 29, 2018  7:30 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/039/725/816-6.jpeg_/shakira-16.jpeg",
+    "location": {
+      "@type": "Place",
+      "name": "LA Forum",
+      "url": "//losangeles.eventful.com/venues/la-forum-/V0-001-000189244-3",
+      "address": {
+        "streetAddress": "3900 West Manchester Boulevard",
+        "addressLocality": "Inglewood",
+        "addressRegion": "California",
+        "postalCode": "90305"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/shakira-el-dorado-world-tour-/E0-001-114205018-9/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "Shakira"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "Joe Bonamassa",
+    "description": "",
+    "startDate": "Friday, November 23, 2018  8:00 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/004/257/504-4.jpeg_/joe-bonamassa-04.jpeg",
+    "location": {
+      "@type": "Place",
+      "name": "Terrace Theater @ Long Beach Convention and Entertainment 
Center",
+      "url": 
"//losangeles.eventful.com/venues/terrace-theater-long-beach-convention-and-ente-/V0-001-002167702-8",
+      "address": {
+        "streetAddress": "300 E. Ocean Blvd.",
+        "addressLocality": "Long Beach",
+        "addressRegion": "California",
+        "postalCode": "90802"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/joe-bonamassa-/E0-001-113400428-2/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "Joe Bonamassa"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "Elton John",
+    "description": "",
+    "startDate": "Saturday, February  2, 2019  8:00 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/000/770/159-6.jpeg_/elton-john-59.jpeg",
+    "location": {
+      "@type": "Place",
+      "name": "LA Forum",
+      "url": "//losangeles.eventful.com/venues/la-forum-/V0-001-000189244-3",
+      "address": {
+        "streetAddress": "3900 West Manchester Boulevard",
+        "addressLocality": "Inglewood",
+        "addressRegion": "California",
+        "postalCode": "90305"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/elton-john-/E0-001-111352091-6/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "Elton John"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "The Tallest Man On Earth",
+    "description": "",
+    "startDate": "Thursday, November 29, 2018  8:00 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/002/748/067-3.jpeg_/the-tallest-man-on-earth-67.jpeg",
+    "location": {
+      "@type": "Place",
+      "name": "Immanuel Presbyterian Church",
+      "url": 
"//losangeles.eventful.com/venues/immanuel-presbyterian-church-/V0-001-000204461-8",
+      "address": {
+        "streetAddress": "3300 Wilshire Boulevard",
+        "addressLocality": "Los Angeles",
+        "addressRegion": "California",
+        "postalCode": "90010"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/tallest-man-earth-/E0-001-112634153-1/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "The Tallest Man On Earth"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "LSD Tour: Lucinda Williams/Steve Earle/Dwight Yoakam pres. by 
SiriusXM",
+    "description": "",
+    "startDate": "Thursday, August  2, 2018  7:00 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/004/209/928-9.jpeg_/lucinda-williams-28.jpeg",
+    "location": {
+      "@type": "Place",
+      "name": "The Greek Theatre",
+      "url": 
"//losangeles.eventful.com/venues/the-greek-theatre-/V0-001-001461305-9",
+      "address": {
+        "streetAddress": "2700 North Vermont",
+        "addressLocality": "Los Angeles",
+        "addressRegion": "California",
+        "postalCode": "90027"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/lsd-tour-lucinda-williamssteve-earledwight-yo-/E0-001-114053008-9/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "Lucinda Williams"
+        },        {
+          "@type": "MusicGroup",
+          "name": "Steve Earle"
+        },        {
+          "@type": "MusicGroup",
+          "name": "Dwight Yoakam"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "Event",
+    "name": "#1 Magic Show in L.A.",
+    "description": "#1 MAGIC SHOW IN L.A.
+The current WINNER of the CW’s Penn & Teller’s FOOL US, Illusionist 
extraordinaire Ivan Amodei is on a national tour with his show INTIMATE 
ILLUSIONS.
+
+Currently, on an ei...",
+    "startDate": "Saturday, August 11, 2018  4:00 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/040/358/185-9.png_/1-magic-show-la-85.png",
+    "location": {
+      "@type": "Place",
+      "name": "Beverly Wilshire Hotel",
+      "url": 
"//losangeles.eventful.com/venues/beverly-wilshire-hotel-/V0-001-003541383-4",
+      "address": {
+        "streetAddress": "9500 Wilshire Boulevard",
+        "addressLocality": "Beverly Hills",
+        "addressRegion": "California",
+        "postalCode": "90212"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/1-magic-show-la-/E0-001-114704991-1/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "Person",
+          "name": "Ivan Amodei"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "Avenged Sevenfold",
+    "description": "If you missed Avenged Sevenfold last year, don’t worry 
– they’re still on tour!! This year, they’re teaming up with the Prophets 
of Rage and Three Days Grace – bringing the End Of The World Tour to...",
+    "startDate": "Wednesday, August 22, 2018  7:00 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/040/435/755-0.png_/avenged-sevenfold-55.png",
+    "location": {
+      "@type": "Place",
+      "name": "LA Forum",
+      "url": "//losangeles.eventful.com/venues/la-forum-/V0-001-000189244-3",
+      "address": {
+        "streetAddress": "3900 West Manchester Boulevard",
+        "addressLocality": "Inglewood",
+        "addressRegion": "California",
+        "postalCode": "90305"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/avenged-sevenfold-/E0-001-115048054-3/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "Avenged Sevenfold"
+        },        {
+          "@type": "MusicGroup",
+          "name": "Prophets of Rage"
+        },        {
+          "@type": "MusicGroup",
+          "name": "Three Days Grace"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "DAVID ALLAN COE",
+    "description": " <br>Location:8901 SUNSET BLVD.<br>Venue:WHISKY A GO 
GO<br><a>Buy Tickets</a><br><p><br></p>",
+    "startDate": "Tuesday, August 14, 2018  8:00 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/004/225/729-0.jpeg_/david-allan-coe-29.jpeg",
+    "location": {
+      "@type": "Place",
+      "name": "Whisky A Go-Go",
+      "url": 
"//losangeles.eventful.com/venues/whisky-a-gogo-/V0-001-001379983-9",
+      "address": {
+        "streetAddress": "8901 Sunset Boulevard",
+        "addressLocality": "West Hollywood",
+        "addressRegion": "California",
+        "postalCode": "90069"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/david-allan-coe-/E0-001-113709667-3/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "David Allan Coe"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "Event",
+    "name": "Phantom Of The Opera",
+    "description": "",
+    "startDate": "Thursday, June  6, 2019  8:00 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/014/885/834-4.jpeg_/the-phantom-of-the-opera-34.jpeg",
+    "location": {
+      "@type": "Place",
+      "name": "Pantages Theatre",
+      "url": 
"//losangeles.eventful.com/venues/pantages-theatre-/V0-001-000189214-2",
+      "address": {
+        "streetAddress": "6233 Hollywood Boulevard",
+        "addressLocality": "Los Angeles",
+        "addressRegion": "California",
+        "postalCode": "90028"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/phantom-opera-/E0-001-114073063-4@2019060620/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "Person",
+          "name": "The Phantom of the Opera"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "Elton John",
+    "description": "There’s nothing better than seeing your favorite artist 
take to the live stage…. so if you love Elton John then be sure to head on 
down for Friday 1st February 2019, for his LAST EVER tour! With a ...",
+    "startDate": "Friday, February  1, 2019  7:00 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/040/436/073-0.jpeg_/elton-john-73.jpeg",
+    "location": {
+      "@type": "Place",
+      "name": "LA Forum",
+      "url": "//losangeles.eventful.com/venues/la-forum-/V0-001-000189244-3",
+      "address": {
+        "streetAddress": "3900 West Manchester Boulevard",
+        "addressLocality": "Inglewood",
+        "addressRegion": "California",
+        "postalCode": "90305"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/elton-john-/E0-001-115048356-8/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "Elton John"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "OneRepublic",
+    "description": "
+",
+    "startDate": "Tuesday, August  7, 2018  8:00 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/004/214/493-2.jpeg_/onerepublic-93.jpeg",
+    "location": {
+      "@type": "Place",
+      "name": "The Theatre at Ace Hotel",
+      "url": 
"//losangeles.eventful.com/venues/the-theatre-at-ace-hotel-/V0-001-007549478-3",
+      "address": {
+        "streetAddress": "929 South Broadway",
+        "addressLocality": "Los Angeles",
+        "addressRegion": "California",
+        "postalCode": "90015"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/onerepublic-/E0-001-116490632-1/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "OneRepublic"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "ALT 98.7 Summer Camp 2018  - Death Cab For Cutie, ODESZA, 
CHVRCHES, Judah & The Lion, AJR, Sir Sly, Jungle, lovelytheband, Superorganism 
and Two Feet",
+    "description": " <p>Attention Campers! <strong>ALT 98.7 Summer 
Camp</strong> is BACK for another year of sceneary and epic performances. 
<p>This year&#39;s stacked lineup includes: <strong>Death Cab For 
Cutie</str...",
+    "startDate": "Sunday, August 12, 2018  4:00 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/023/875/184-5.jpeg_/death-cab-for-cutie-84.jpeg",
+    "location": {
+      "@type": "Place",
+      "name": "Queen Mary",
+      "url": "//losangeles.eventful.com/venues/queen-mary-/V0-001-000841320-9",
+      "address": {
+        "streetAddress": "1126 Queens Highway",
+        "addressLocality": "Long Beach",
+        "addressRegion": "California",
+        "postalCode": "90802"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/alt-987-summer-camp-2018-death-cab-cutie-odesza-/E0-001-114486866-1/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "Death Cab for Cutie"
+        },        {
+          "@type": "MusicGroup",
+          "name": "Judah & The Lion"
+        },        {
+          "@type": "MusicGroup",
+          "name": "CHVRCHES"
+        },        {
+          "@type": "MusicGroup",
+          "name": "ODESZA"
+        },        {
+          "@type": "MusicGroup",
+          "name": "AJR"
+        },        {
+          "@type": "MusicGroup",
+          "name": "Superorganism"
+        }    ]
+  }
+</script><script type="application/ld+json">
+  {
+    "@context": "http://schema.org";,
+    "@type": "MusicEvent",
+    "name": "Nine Inch Nails: Cold and Black and Infinite North America 2018",
+    "description": "",
+    "startDate": "Saturday, December  8, 2018  6:30 PM",
+    "image": 
"//d1marr3m5x4iac.cloudfront.net/images/perspectivecrop373by249/I0-001/001/493/351-9.jpeg_/nine-inch-nails-51.jpeg",
+    "location": {
+      "@type": "Place",
+      "name": "Hollywood Palladium",
+      "url": 
"//losangeles.eventful.com/venues/hollywood-palladium-/V0-001-000228876-2",
+      "address": {
+        "streetAddress": "6215 Sunset Blvd.",
+        "addressLocality": "Los Angeles",
+        "addressRegion": "California",
+        "postalCode": "90028"
+      }
+    },
+    "offers": {
+      "@type": "Offer",
+      "url": 
"//losangeles.eventful.com/events/nine-inch-nails-cold-a-/E0-001-116683067-9@2018120818/tickets",
+      "availability": "http://schema.org/InStock";
+    },
+    "performer": [        {
+          "@type": "MusicGroup",
+          "name": "Nine Inch Nails"
+        },        {
+          "@type": "MusicGroup",
+          "name": "The Jesus and Mary Chain"
+        }    ]
+  }
+</script>
+
+</body>
+</html>
\ No newline at end of file

Reply via email to