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'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
