Browse Source

parse instagram photos and videos

pull/39/head
Aaron Parecki 4 years ago
parent
commit
773252559d
13 changed files with 1677 additions and 7 deletions
  1. +1
    -0
      composer.json
  2. +7
    -7
      composer.lock
  3. +12
    -0
      controllers/Parse.php
  4. +216
    -0
      lib/Formats/Instagram.php
  5. +6
    -0
      lib/HTTPTest.php
  6. +71
    -0
      tests/ParseTest.php
  7. +7
    -0
      tests/data/www.instagram.com/aaronpk_?__a=1
  8. +261
    -0
      tests/data/www.instagram.com/explore_locations_109284789535230_
  9. +7
    -0
      tests/data/www.instagram.com/kmikeym_?__a=1
  10. +271
    -0
      tests/data/www.instagram.com/photo.html
  11. +271
    -0
      tests/data/www.instagram.com/photo_with_person_tag.html
  12. +271
    -0
      tests/data/www.instagram.com/photo_with_venue.html
  13. +276
    -0
      tests/data/www.instagram.com/video.html

+ 1
- 0
composer.json View File

@ -17,6 +17,7 @@
"lib/HTTPStream.php",
"lib/HTTP.php",
"lib/Formats/Mf2.php",
"lib/Formats/Instagram.php",
"lib/Formats/HTMLPurifier_AttrDef_HTML_Microformats2.php"
]
},

+ 7
- 7
composer.lock View File

@ -4,21 +4,21 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"hash": "2b5910cbc964bd8545d6a4737d319e5a",
"content-hash": "9dd49de07b7077eb937199147a258b4b",
"hash": "b55b9f1fabddb79bf5e8b0daf6b4f88e",
"content-hash": "a791e61b2f956830a8b7d9b0a2493148",
"packages": [
{
"name": "ezyang/htmlpurifier",
"version": "v4.7.0",
"version": "v4.8.0",
"source": {
"type": "git",
"url": "https://github.com/ezyang/htmlpurifier.git",
"reference": "ae1828d955112356f7677c465f94f7deb7d27a40"
"reference": "d0c392f77d2f2a3dcf7fcb79e2a1e2b8804e75b2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/ae1828d955112356f7677c465f94f7deb7d27a40",
"reference": "ae1828d955112356f7677c465f94f7deb7d27a40",
"url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/d0c392f77d2f2a3dcf7fcb79e2a1e2b8804e75b2",
"reference": "d0c392f77d2f2a3dcf7fcb79e2a1e2b8804e75b2",
"shasum": ""
},
"require": {
@ -49,7 +49,7 @@
"keywords": [
"html"
],
"time": "2015-08-05 01:03:42"
"time": "2016-07-16 12:58:58"
},
{
"name": "indieweb/link-rel-parser",

+ 12
- 0
controllers/Parse.php View File

@ -143,6 +143,16 @@ class Parse {
}
// Check for known services
$host = parse_url($result['url'], PHP_URL_HOST);
if(in_array($host, ['www.instagram.com','instagram.com'])) {
list($data, $parsed) = Formats\Instagram::parse($result['body'], $result['url'], $this->http);
if($request->get('include_original'))
$data['original'] = $parsed;
return $this->respond($response, 200, $data);
}
// attempt to parse the page as HTML
$doc = new DOMDocument();
@$doc->loadHTML(self::toHtmlEntities($result['body']));
@ -215,6 +225,8 @@ class Parse {
'found_fragment' => $foundFragment
];
}
if($request->get('include_original'))
$data['original'] = $html;
return $this->respond($response, 200, $data);
}
}

+ 216
- 0
lib/Formats/Instagram.php View File

@ -0,0 +1,216 @@
<?php
namespace XRay\Formats;
use DOMDocument, DOMXPath;
use Parse;
class Instagram {
public static function parse($html, $url, $http) {
$photoData = self::_extractPhotoDataFromPhotoPage($html);
if(!$photoData)
return false;
// Start building the h-entry
$entry = array(
'type' => 'entry',
'url' => $url,
'author' => [
'type' => 'card',
'name' => null,
'photo' => null,
'url' => null
]
);
// Fetch profile info for this user
$username = $photoData['owner']['username'];
$profile = self::_getInstagramProfile($username, $http);
if($profile) {
$entry['author'] = self::_buildHCardFromInstagramProfile($profile);
}
// Content and hashtags
if(isset($photoData['caption'])) {
if(preg_match_all('/#([a-z0-9_-]+)/i', $photoData['caption'], $matches)) {
$entry['category'] = [];
foreach($matches[1] as $match) {
$entry['category'][] = $match;
}
}
$entry['content'] = [
'text' => $photoData['caption']
];
}
// Include the photo/video media URLs
// (Always return arrays)
$entry['photo'] = [$photoData['display_src']];
if(array_key_exists('is_video', $photoData) && $photoData['is_video']) {
$entry['video'] = [$photoData['video_url']];
}
$refs = [];
$profiles = [];
// Find person tags and fetch user profiles
if(array_key_exists('usertags', $photoData) && $photoData['usertags']['nodes']) {
if(!isset($entry['category'])) $entry['category'] = [];
foreach($photoData['usertags']['nodes'] as $tag) {
$profile = self::_getInstagramProfile($tag['user']['username'], $http);
if($profile) {
$card = self::_buildHCardFromInstagramProfile($profile);
$entry['category'][] = $card['url'];
$refs[$card['url']] = $card;
$profiles[] = $profile;
}
}
}
// Include venue data
$locations = [];
if($photoData['location']) {
$location = self::_getInstagramLocation($photoData['location']['id'], $http);
if($location) {
$entry['location'] = [$location['url']];
$refs[$location['url']] = $location;
$locations[] = $location;
}
}
$response = [
'data' => $entry
];
if(count($refs)) {
$response['refs'] = $refs;
}
return [$response, [
'photo' => $photoData,
'profiles' => $profiles,
'locations' => $locations
]];
}
private static function _buildHCardFromInstagramProfile($profile) {
if(!$profile) return false;
$author = [
'type' => 'card'
];
if($profile['full_name'])
$author['name'] = $profile['full_name'];
else
$author['name'] = $profile['username'];
if(isset($profile['external_url']) && $profile['external_url'])
$author['url'] = $profile['external_url'];
else
$author['url'] = 'https://www.instagram.com/' . $username;
if(isset($profile['profile_pic_url_hd']))
$author['photo'] = $profile['profile_pic_url_hd'];
else
$author['photo'] = $profile['profile_pic_url'];
return $author;
}
private static function _getInstagramProfile($username, $http) {
$response = $http->get('https://www.instagram.com/'.$username.'/?__a=1');
if(!$response['error']) {
$profile = @json_decode($response['body'], true);
if($profile && array_key_exists('user', $profile)) {
$user = $profile['user'];
return $user;
}
}
return null;
}
private static function _getInstagramLocation($id, $http) {
$igURL = 'https://www.instagram.com/explore/locations/'.$id.'/';
$response = $http->get($igURL);
if($response['body']) {
$data = self::_extractVenueDataFromVenuePage($response['body']);
if($data) {
return [
'type' => 'card',
'name' => $data['name'],
'url' => $igURL,
'latitude' => $data['lat'],
'longitude' => $data['lng'],
];
}
}
return null;
}
private static function _extractPhotoDataFromPhotoPage($html) {
$data = self::_extractIGData($html);
if($data && is_array($data) && array_key_exists('entry_data', $data)) {
if(is_array($data['entry_data']) && array_key_exists('PostPage', $data['entry_data'])) {
$post = $data['entry_data']['PostPage'];
if(is_array($post) && array_key_exists(0, $post) && array_key_exists('media', $post[0])) {
$media = $post[0]['media'];
return $media;
}
}
}
return null;
}
private static function _extractVenueDataFromVenuePage($html) {
$data = self::_extractIGData($html);
if($data && is_array($data) && array_key_exists('entry_data', $data)) {
if(is_array($data['entry_data']) && array_key_exists('LocationsPage', $data['entry_data'])) {
$data = $data['entry_data']['LocationsPage'];
if(is_array($data) && array_key_exists(0, $data) && array_key_exists('location', $data[0])) {
$location = $data[0]['location'];
# we don't need these and they're huge, so drop them now
unset($location['media']);
unset($location['top_posts']);
return $location;
}
}
}
return null;
}
private static function _extractIGData($html) {
$doc = new DOMDocument();
@$doc->loadHTML($html);
if(!$doc) {
return null;
}
$xpath = new DOMXPath($doc);
$data = null;
foreach($xpath->query('//script') as $script) {
if(preg_match('/window\._sharedData = ({.+});/', $script->textContent, $match)) {
$data = json_decode($match[1], true);
}
}
return $data;
}
}

+ 6
- 0
lib/HTTPTest.php View File

@ -32,6 +32,12 @@ class HTTPTest extends HTTPCurl {
}
private function _read_file($url) {
$parts = parse_url($url);
if($parts['path']) {
$parts['path'] = '/'.str_replace('/','_',substr($parts['path'],1));
$url = \build_url($parts);
}
$filename = $this->_testDataPath.preg_replace('/https?:\/\//', '', $url);
if(!file_exists($filename)) {
$filename = $this->_testDataPath.'404.response.txt';

+ 71
- 0
tests/ParseTest.php View File

@ -332,6 +332,7 @@ class ParseTest extends PHPUnit_Framework_TestCase {
$body = $response->getContent();
$this->assertEquals(200, $response->getStatusCode());
$data = json_decode($body, true);
$this->assertEquals('event', $data['data']['type']);
$this->assertEquals('Homebrew Website Club', $data['data']['name']);
$this->assertEquals($url, $data['data']['url']);
@ -382,4 +383,74 @@ class ParseTest extends PHPUnit_Framework_TestCase {
$this->assertFalse($data['info']['found_fragment']);
}
public function testInstagramPhoto() {
$url = 'http://www.instagram.com/photo.html';
$response = $this->parse(['url' => $url]);
$body = $response->getContent();
$this->assertEquals(200, $response->getStatusCode());
$data = json_decode($body, true);
$this->assertEquals('entry', $data['data']['type']);
$this->assertContains('planning', $data['data']['category']);
$this->assertContains('2017', $data['data']['category']);
$this->assertEquals('Kind of crazy to see the whole year laid out like this. #planning #2017', $data['data']['content']['text']);
$this->assertEquals(1, count($data['data']['photo']));
$this->assertEquals(['https://scontent.cdninstagram.com/t51.2885-15/e35/15803256_1832278043695907_4846092951052353536_n.jpg?ig_cache_key=MTQyMTM1Nzk0NTMwNTEwMDkwNg%3D%3D.2'], $data['data']['photo']);
$this->assertEquals('http://aaronparecki.com/', $data['data']['author']['url']);
$this->assertEquals('Aaron Parecki', $data['data']['author']['name']);
$this->assertEquals('https://scontent.cdninstagram.com/t51.2885-19/s320x320/14240576_268350536897085_1129715662_a.jpg', $data['data']['author']['photo']);
}
public function testInstagramVideo() {
$url = 'http://www.instagram.com/video.html';
$response = $this->parse(['url' => $url]);
$body = $response->getContent();
$this->assertEquals(200, $response->getStatusCode());
$data = json_decode($body, true);
$this->assertEquals('entry', $data['data']['type']);
$this->assertContains('100daysofmusic', $data['data']['category']);
$this->assertEquals('Day 18. Maple and Spruce #100daysofmusic #100daysproject #the100dayproject https://aaronparecki.com/2017/01/07/14/day18', $data['data']['content']['text']);
$this->assertEquals(1, count($data['data']['photo']));
$this->assertEquals(['https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15624670_548881701986735_8264383763249627136_n.jpg?ig_cache_key=MTQyMjkzMTczMTg0MjE3NjE3Nw%3D%3D.2'], $data['data']['photo']);
$this->assertEquals(1, count($data['data']['video']));
$this->assertEquals(['https://scontent.cdninstagram.com/t50.2886-16/15921147_1074837002642259_2269307616507199488_n.mp4'], $data['data']['video']);
$this->assertEquals('http://aaronparecki.com/', $data['data']['author']['url']);
$this->assertEquals('Aaron Parecki', $data['data']['author']['name']);
$this->assertEquals('https://scontent.cdninstagram.com/t51.2885-19/s320x320/14240576_268350536897085_1129715662_a.jpg', $data['data']['author']['photo']);
}
public function testInstagramPhotoWithPersonTag() {
$url = 'http://www.instagram.com/photo_with_person_tag.html';
$response = $this->parse(['url' => $url]);
$body = $response->getContent();
$this->assertEquals(200, $response->getStatusCode());
$data = json_decode($body, true);
$this->assertEquals(2, count($data['data']['category']));
$this->assertContains('https://kmikeym.com/', $data['data']['category']);
$this->assertArrayHasKey('https://kmikeym.com/', $data['refs']);
$this->assertEquals(['type'=>'card','name'=>'Mike Merrill','url'=>'https://kmikeym.com/','photo'=>'https://scontent.cdninstagram.com/t51.2885-19/s320x320/12627953_686238411518831_1544976311_a.jpg'], $data['refs']['https://kmikeym.com/']);
}
public function testInstagramPhotoWithVenue() {
$url = 'http://www.instagram.com/photo_with_venue.html';
$response = $this->parse(['url' => $url]);
$body = $response->getContent();
$this->assertEquals(200, $response->getStatusCode());
$data = json_decode($body, true);
$this->assertEquals(1, count($data['data']['location']));
$this->assertContains('https://www.instagram.com/explore/locations/109284789535230/', $data['data']['location']);
$this->assertArrayHasKey('https://www.instagram.com/explore/locations/109284789535230/', $data['refs']);
$venue = $data['refs']['https://www.instagram.com/explore/locations/109284789535230/'];
$this->assertEquals('XOXO Outpost', $venue['name']);
$this->assertEquals('45.5261002', $venue['latitude']);
$this->assertEquals('-122.6558081', $venue['longitude']);
}
}

+ 7
- 0
tests/data/www.instagram.com/aaronpk_?__a=1
File diff suppressed because it is too large
View File


+ 261
- 0
tests/data/www.instagram.com/explore_locations_109284789535230_
File diff suppressed because it is too large
View File


+ 7
- 0
tests/data/www.instagram.com/kmikeym_?__a=1
File diff suppressed because it is too large
View File


+ 271
- 0
tests/data/www.instagram.com/photo.html View File

@ -0,0 +1,271 @@
HTTP/1.1 200 OK
Server: Apache
Date: Wed, 09 Dec 2015 03:29:14 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
<!DOCTYPE html>
<!--[if lt IE 7]> <html lang="en" class="no-js lt-ie9 lt-ie8 lt-ie7 not-logged-in "> <![endif]-->
<!--[if IE 7]> <html lang="en" class="no-js lt-ie9 lt-ie8 not-logged-in "> <![endif]-->
<!--[if IE 8]> <html lang="en" class="no-js lt-ie9 not-logged-in "> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en" class="no-js not-logged-in "> <!--<![endif]-->
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>
Instagram
</title>
<script type="text/javascript">
WebFontConfig = {
custom: {
families: ['proxima-nova:n3,n4,n6,n7'],
}
};
</script>
<script src="//instagramstatic-a.akamaihd.net/h1/scripts/webfont.js/c0456c81549b.js" type="text/javascript" async></script>
<style type="text/css">
/* @license
* MyFonts Webfont Build ID 2164953, 2012-03-23T23:06:30-0400
*
* The fonts listed in this notice are subject to the End User License
* Agreement(s) entered into by the website owner. All other parties are
* explicitly restricted from using the Licensed Webfonts(s).
*
* You may obtain a valid license at the URLs below.
*
*
* Webfont: Proxima Nova Light by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/light/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Regular by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/regular/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Semibold by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/semibold/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Bold Italic by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/bold-it/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Bold by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/bold/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Italic by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/regular-it/
* Licensed pageviews: unlimited
*
*
* License: http://www.myfonts.com/viewlicense?type=web&buildid=2164953
* Webfonts copyright: Copyright (c) Mark Simonson, 2005. All rights reserved.
*
* (c) 2012 Bitstream Inc
*/
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.eot/115b1f7f9c04.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.eot/115b1f7f9c04.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.woff/618250d25a4d.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.ttf/646346e03084.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.svg/e55a9d6051e8.svg#ProximaNovaBold') format("svg");
font-weight: bold;
font-style: normal; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.eot/1cbb869da891.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.eot/1cbb869da891.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.woff/b1cf049474c9.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.ttf/3adb020ceae3.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.svg/29948a2d3c58.svg#ProximaNovaBoldItalic') format("svg");
font-weight: bold;
font-style: italic; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.eot/12af77715cee.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.eot/12af77715cee.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.woff/a9a9773b8e29.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.ttf/99e19808976a.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.svg/c33d2fd56309.svg#ProximaNovaRegular') format("svg");
font-weight: normal;
font-style: normal; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.eot/1bbbd1312b0d.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.eot/1bbbd1312b0d.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.woff/9e306befca91.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.ttf/4a8663684135.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.svg/876278d4b189.svg#ProximaNovaRegularItalic') format("svg");
font-weight: normal;
font-style: italic; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.eot/5016edf79e1d.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.eot/5016edf79e1d.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.woff/615c1b06d8fa.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.ttf/2973bd483f7a.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.svg/868597833e49.svg#ProximaNovaSemibold') format("svg");
font-weight: 600;
font-style: normal; }
</style>
<style type="text/css">
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.eot/63c84728610f.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.eot/63c84728610f.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.woff/66bbe029f180.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.ttf/eb408516399b.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.svg/858f6a9b7ef3.svg#ProximaNovaLight') format("svg");
font-weight: 300;
font-style: normal; }
</style>
<meta name="robots" content="noimageindex">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta id="viewport" name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
<script type="text/javascript">
(function() {
var docElement = document.documentElement;
var classRE = new RegExp('(^|\\s)no-js(\\s|$)');
var className = docElement.className;
docElement.className = className.replace(classRE, '$1js$2');
})();
</script>
<script type="text/javascript">window._timings = {"domLoading": Date.now()}</script>
<link rel="apple-touch-icon-precomposed" sizes="76x76" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-76x76-precomposed.png/932e4d9af891.png">
<link rel="apple-touch-icon-precomposed" sizes="120x120" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-120x120-precomposed.png/004705c9353f.png">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-152x152-precomposed.png/82467bc9bcce.png">
<link rel="apple-touch-icon-precomposed" sizes="167x167" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-167x167-precomposed.png/515cb4eeeeee.png">
<link rel="apple-touch-icon-precomposed" sizes="180x180" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-180x180-precomposed.png/94fd767f257b.png">
<link rel="icon" sizes="192x192" href="//instagramstatic-a.akamaihd.net/h1/images/ico/favicon-192.png/b407fa101800.png">
<link rel="mask-icon" href="//instagramstatic-a.akamaihd.net/h1/images/ico/favicon.svg/9d8680ab8a3c.svg" color="#262626"><link rel="shortcut icon" type="image/x-icon" href="//instagramstatic-a.akamaihd.net/h1/images/ico/favicon.ico/dfa85bb1fd63.ico">
<link rel="canonical" href="https://www.instagram.com/p/BO5rYVElvJq/" />
<meta content="See this Instagram photo by @aaronpk • 13 likes" name="description" />
<meta property="og:site_name" content="Instagram" />
<meta property="og:title" content="Instagram photo by Aaron Parecki • Jan 5, 2017 at 11:31pm UTC" />
<meta property="og:image" content="https://scontent.cdninstagram.com/t51.2885-15/e35/15803256_1832278043695907_4846092951052353536_n.jpg?ig_cache_key=MTQyMTM1Nzk0NTMwNTEwMDkwNg%3D%3D.2" />
<meta property="og:description" content="See this Instagram photo by @aaronpk • 13 likes" />
<meta property="fb:app_id" content="124024574287414" />
<meta property="og:url" content="https://www.instagram.com/p/BO5rYVElvJq/" />
<meta property="instapp:owner_user_id" content="1500881" />
<meta property="al:ios:app_name" content="Instagram" />
<meta property="al:ios:app_store_id" content="389801252" />
<meta property="al:ios:url" content="instagram://media?id=1421357945305100906" />
<meta property="al:android:app_name" content="Instagram" />
<meta property="al:android:package" content="com.instagram.android" />
<meta property="al:android:url" content="https://www.instagram.com/p/BO5rYVElvJq/" />
<meta name="medium" content="image" />
<meta property="og:type" content="instapp:photo" />
<meta property="instapp:hashtags" content="planning" /><meta property="instapp:hashtags" content="2017" />
<link rel="alternate" href="android-app://com.instagram.android/https/instagram.com/p/BO5rYVElvJq/" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/" rel="alternate" hreflang="x-default" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=nb" rel="alternate" hreflang="nb" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=ru" rel="alternate" hreflang="ru" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=zh-hk" rel="alternate" hreflang="zh-hk" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=ko" rel="alternate" hreflang="ko" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=es" rel="alternate" hreflang="es" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=fr-ca" rel="alternate" hreflang="fr-ca" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=si" rel="alternate" hreflang="si" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=kn" rel="alternate" hreflang="kn" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=nl" rel="alternate" hreflang="nl" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=uk" rel="alternate" hreflang="uk" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=en" rel="alternate" hreflang="en" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=gu" rel="alternate" hreflang="gu" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=ur" rel="alternate" hreflang="ur" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=ml" rel="alternate" hreflang="ml" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=zh-tw" rel="alternate" hreflang="zh-tw" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=pt-br" rel="alternate" hreflang="pt-br" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=el" rel="alternate" hreflang="el" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=sk" rel="alternate" hreflang="sk" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=fi" rel="alternate" hreflang="fi" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=bg" rel="alternate" hreflang="bg" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=sv" rel="alternate" hreflang="sv" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=ta" rel="alternate" hreflang="ta" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=de" rel="alternate" hreflang="de" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=pt" rel="alternate" hreflang="pt" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=hi" rel="alternate" hreflang="hi" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=af" rel="alternate" hreflang="af" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=mr" rel="alternate" hreflang="mr" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=vi" rel="alternate" hreflang="vi" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=pl" rel="alternate" hreflang="pl" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=fr" rel="alternate" hreflang="fr" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=ms" rel="alternate" hreflang="ms" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=hu" rel="alternate" hreflang="hu" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=te" rel="alternate" hreflang="te" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=ja" rel="alternate" hreflang="ja" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=bn" rel="alternate" hreflang="bn" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=tl" rel="alternate" hreflang="tl" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=th" rel="alternate" hreflang="th" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=hr" rel="alternate" hreflang="hr" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=ro" rel="alternate" hreflang="ro" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=it" rel="alternate" hreflang="it" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=id" rel="alternate" hreflang="id" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=tr" rel="alternate" hreflang="tr" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=zh-cn" rel="alternate" hreflang="zh-cn" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=cs" rel="alternate" hreflang="cs" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=da" rel="alternate" hreflang="da" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=ne" rel="alternate" hreflang="ne" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=sr" rel="alternate" hreflang="sr" />
<link href="https://www.instagram.com/p/BO5rYVElvJq/?hl=pa" rel="alternate" hreflang="pa" />
</head>
<body class="">
<span id="react-root"></span>
<script type="text/javascript">window._sharedData = {"language_code": "en", "entry_data": {"PostPage": [{"media": {"caption": "Kind of crazy to see the whole year laid out like this. #planning #2017", "comments": {"nodes": [{"created_at": 1483659653.0, "id": "17868623683055933", "user": {"username": "tantek", "id": "2975244", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/11311201_811488138961840_1691446176_a.jpg"}, "text": "I need to make a newcal.org equivalent poster"}, {"created_at": 1483688285.0, "id": "17846710417150554", "user": {"username": "sammichfelge", "id": "2647364", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/14504841_373291629672785_7220018647970873344_a.jpg"}, "text": "\ud83d\ude0d"}], "count": 2, "page_info": {"has_previous_page": false, "end_cursor": null, "has_next_page": false, "start_cursor": null}}, "usertags": {"nodes": []}, "comments_disabled": false, "display_src": "https://scontent.cdninstagram.com/t51.2885-15/e35/15803256_1832278043695907_4846092951052353536_n.jpg?ig_cache_key=MTQyMTM1Nzk0NTMwNTEwMDkwNg%3D%3D.2", "caption_is_edited": false, "dimensions": {"height": 809, "width": 1080}, "code": "BO5rYVElvJq", "likes": {"nodes": [{"user": {"username": "sammichfelge", "id": "2647364", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/14504841_373291629672785_7220018647970873344_a.jpg"}}, {"user": {"username": "nicowavemountain", "id": "365314953", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/10683966_694638790612158_1278490263_a.jpg"}}, {"user": {"username": "katdeck", "id": "9677508", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/14515861_213093192465463_1350030331347992576_a.jpg"}}, {"user": {"username": "tyesha", "id": "672143", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/11244607_1479326915697757_920964813_a.jpg"}}, {"user": {"username": "floridafruitgeek", "id": "2216629212", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/13768338_738264412983359_1289238174_a.jpg"}}, {"user": {"username": "lotto_foto", "id": "1498519271", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/10661053_764894426909101_582133118_a.jpg"}}, {"user": {"username": "utopiancomplex", "id": "33859694", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/11821089_896550527059791_776602256_a.jpg"}}, {"user": {"username": "tantek", "id": "2975244", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/11311201_811488138961840_1691446176_a.jpg"}}, {"user": {"username": "ohcozyworld", "id": "4362367508", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/15802459_361915857497225_6701408704257851392_a.jpg"}}, {"user": {"username": "marisierra_", "id": "12321610", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/13249930_735283263241966_76491781_a.jpg"}}], "count": 13, "viewer_has_liked": false}, "location": null, "id": "1421357945305100906", "owner": {"requested_by_viewer": false, "id": "1500881", "followed_by_viewer": false, "blocked_by_viewer": false, "full_name": "Aaron Parecki", "username": "aaronpk", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/14240576_268350536897085_1129715662_a.jpg", "has_blocked_viewer": false, "is_unpublished": false, "is_private": false}, "date": 1483659092, "is_ad": false, "is_video": false}}]}, "gatekeepers": {}, "show_app_install": true, "qe": {"us": {"p": {"use_continue_text": "false"}, "g": "continue_vs_signup_text_control_03"}, "discovery": {"p": {}, "g": ""}, "gql": {"p": {}, "g": ""}, "br": {"p": {}, "g": ""}, "activity_stories": {"p": {}, "g": ""}, "su_universe": {"p": {}, "g": ""}, "us_li": {"p": {}, "g": ""}, "freq": {"p": {}, "g": ""}, "ebd": {"p": {}, "g": ""}, "feed": {"p": {}, "g": ""}, "profile": {"p": {}, "g": ""}}, "static_root": "//instagramstatic-a.akamaihd.net/h1", "hostname": "www.instagram.com", "display_properties_server_guess": {"viewport_width": 1423, "pixel_ratio": 1.0}, "environment_switcher_visible_server_guess": true, "country_code": "US", "platform": "web", "activity_counts": null, "config": {"viewer": null, "csrf_token": "JLDDjs3ZQuAg8z755OcfndJK6vD206Wz"}};</script>
<script src="//instagramstatic-a.akamaihd.net/h1/bundles/en_US_Commons.js/ad28dd60d42a.js" crossorigin="anonymous" type="text/javascript"></script>
<script src="//instagramstatic-a.akamaihd.net/h1/bundles/en_US_PostPage.js/ab1daa81add9.js" crossorigin="anonymous" type="text/javascript"></script>
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','//connect.facebook.net/en_US/fbevents.js');
fbq('init', '1425767024389221');
fbq('track', 'PageView');
</script>
<noscript>
</noscript>
<script type="text/javascript">window._timings.domInteractive = Date.now()</script>
</body>
</html>

+ 271
- 0
tests/data/www.instagram.com/photo_with_person_tag.html View File

@ -0,0 +1,271 @@
HTTP/1.1 200 OK
Server: Apache
Date: Wed, 09 Dec 2015 03:29:14 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
<!DOCTYPE html>
<!--[if lt IE 7]> <html lang="en" class="no-js lt-ie9 lt-ie8 lt-ie7 not-logged-in "> <![endif]-->
<!--[if IE 7]> <html lang="en" class="no-js lt-ie9 lt-ie8 not-logged-in "> <![endif]-->
<!--[if IE 8]> <html lang="en" class="no-js lt-ie9 not-logged-in "> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en" class="no-js not-logged-in "> <!--<![endif]-->
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>
Instagram
</title>
<script type="text/javascript">
WebFontConfig = {
custom: {
families: ['proxima-nova:n3,n4,n6,n7'],
}
};
</script>
<script src="//instagramstatic-a.akamaihd.net/h1/scripts/webfont.js/c0456c81549b.js" async type="text/javascript"></script>
<style type="text/css">
/* @license
* MyFonts Webfont Build ID 2164953, 2012-03-23T23:06:30-0400
*
* The fonts listed in this notice are subject to the End User License
* Agreement(s) entered into by the website owner. All other parties are
* explicitly restricted from using the Licensed Webfonts(s).
*
* You may obtain a valid license at the URLs below.
*
*
* Webfont: Proxima Nova Light by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/light/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Regular by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/regular/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Semibold by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/semibold/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Bold Italic by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/bold-it/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Bold by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/bold/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Italic by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/regular-it/
* Licensed pageviews: unlimited
*
*
* License: http://www.myfonts.com/viewlicense?type=web&buildid=2164953
* Webfonts copyright: Copyright (c) Mark Simonson, 2005. All rights reserved.
*
* (c) 2012 Bitstream Inc
*/
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.eot/115b1f7f9c04.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.eot/115b1f7f9c04.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.woff/618250d25a4d.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.ttf/646346e03084.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.svg/e55a9d6051e8.svg#ProximaNovaBold') format("svg");
font-weight: bold;
font-style: normal; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.eot/1cbb869da891.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.eot/1cbb869da891.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.woff/b1cf049474c9.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.ttf/3adb020ceae3.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.svg/29948a2d3c58.svg#ProximaNovaBoldItalic') format("svg");
font-weight: bold;
font-style: italic; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.eot/12af77715cee.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.eot/12af77715cee.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.woff/a9a9773b8e29.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.ttf/99e19808976a.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.svg/c33d2fd56309.svg#ProximaNovaRegular') format("svg");
font-weight: normal;
font-style: normal; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.eot/1bbbd1312b0d.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.eot/1bbbd1312b0d.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.woff/9e306befca91.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.ttf/4a8663684135.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.svg/876278d4b189.svg#ProximaNovaRegularItalic') format("svg");
font-weight: normal;
font-style: italic; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.eot/5016edf79e1d.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.eot/5016edf79e1d.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.woff/615c1b06d8fa.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.ttf/2973bd483f7a.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.svg/868597833e49.svg#ProximaNovaSemibold') format("svg");
font-weight: 600;
font-style: normal; }
</style>
<style type="text/css">
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.eot/63c84728610f.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.eot/63c84728610f.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.woff/66bbe029f180.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.ttf/eb408516399b.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.svg/858f6a9b7ef3.svg#ProximaNovaLight') format("svg");
font-weight: 300;
font-style: normal; }
</style>
<meta name="robots" content="noimageindex">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta id="viewport" name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
<script type="text/javascript">
(function() {
var docElement = document.documentElement;
var classRE = new RegExp('(^|\\s)no-js(\\s|$)');
var className = docElement.className;
docElement.className = className.replace(classRE, '$1js$2');
})();
</script>
<script type="text/javascript">window._timings = {"domLoading": Date.now()}</script>
<link rel="apple-touch-icon-precomposed" sizes="76x76" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-76x76-precomposed.png/932e4d9af891.png">
<link rel="apple-touch-icon-precomposed" sizes="120x120" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-120x120-precomposed.png/004705c9353f.png">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-152x152-precomposed.png/82467bc9bcce.png">
<link rel="apple-touch-icon-precomposed" sizes="167x167" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-167x167-precomposed.png/515cb4eeeeee.png">
<link rel="apple-touch-icon-precomposed" sizes="180x180" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-180x180-precomposed.png/94fd767f257b.png">
<link rel="icon" sizes="192x192" href="//instagramstatic-a.akamaihd.net/h1/images/ico/favicon-192.png/b407fa101800.png">
<link rel="mask-icon" href="//instagramstatic-a.akamaihd.net/h1/images/ico/favicon.svg/9d8680ab8a3c.svg" color="#262626"><link rel="shortcut icon" type="image/x-icon" href="//instagramstatic-a.akamaihd.net/h1/images/ico/favicon.ico/dfa85bb1fd63.ico">
<link rel="canonical" href="https://www.instagram.com/p/BNfqVfVlmkj/" />
<meta name="description" content="See this Instagram photo by @aaronpk • 8 likes" />
<meta property="og:site_name" content="Instagram" />
<meta property="og:title" content="Instagram photo by Aaron Parecki • Dec 2, 2016 at 12:30am UTC" />
<meta property="og:image" content="https://scontent.cdninstagram.com/t51.2885-15/e35/15306530_797555713747689_6958612945332862976_n.jpg?ig_cache_key=MTM5NjAyMDYwNDIxODc5NjMyMw%3D%3D.2" />
<meta property="og:description" content="See this Instagram photo by @aaronpk • 8 likes" />
<meta property="fb:app_id" content="124024574287414" />
<meta property="og:url" content="https://www.instagram.com/p/BNfqVfVlmkj/" />
<meta property="instapp:owner_user_id" content="1500881" />
<meta property="al:ios:app_name" content="Instagram" />
<meta property="al:ios:app_store_id" content="389801252" />
<meta property="al:ios:url" content="instagram://media?id=1396020604218796323" />
<meta property="al:android:app_name" content="Instagram" />
<meta property="al:android:package" content="com.instagram.android" />
<meta property="al:android:url" content="https://www.instagram.com/p/BNfqVfVlmkj/" />
<meta name="medium" content="image" />
<meta property="og:type" content="instapp:photo" />
<meta property="instapp:hashtags" content="kmikeym" />
<link rel="alternate" href="android-app://com.instagram.android/https/instagram.com/p/BNfqVfVlmkj/" />
<link hreflang="x-default" href="https://www.instagram.com/p/BNfqVfVlmkj/" rel="alternate" />
<link hreflang="bg" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=bg" rel="alternate" />
<link hreflang="af" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=af" rel="alternate" />
<link hreflang="es" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=es" rel="alternate" />
<link hreflang="si" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=si" rel="alternate" />
<link hreflang="th" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=th" rel="alternate" />
<link hreflang="de" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=de" rel="alternate" />
<link hreflang="te" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=te" rel="alternate" />
<link hreflang="el" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=el" rel="alternate" />
<link hreflang="pl" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=pl" rel="alternate" />
<link hreflang="ja" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=ja" rel="alternate" />
<link hreflang="hi" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=hi" rel="alternate" />
<link hreflang="it" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=it" rel="alternate" />
<link hreflang="zh-hk" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=zh-hk" rel="alternate" />
<link hreflang="nl" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=nl" rel="alternate" />
<link hreflang="fi" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=fi" rel="alternate" />
<link hreflang="sk" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=sk" rel="alternate" />
<link hreflang="ms" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=ms" rel="alternate" />
<link hreflang="ru" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=ru" rel="alternate" />
<link hreflang="kn" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=kn" rel="alternate" />
<link hreflang="cs" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=cs" rel="alternate" />
<link hreflang="hu" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=hu" rel="alternate" />
<link hreflang="sv" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=sv" rel="alternate" />
<link hreflang="id" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=id" rel="alternate" />
<link hreflang="zh-cn" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=zh-cn" rel="alternate" />
<link hreflang="en" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=en" rel="alternate" />
<link hreflang="fr-ca" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=fr-ca" rel="alternate" />
<link hreflang="ne" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=ne" rel="alternate" />
<link hreflang="pa" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=pa" rel="alternate" />
<link hreflang="ml" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=ml" rel="alternate" />
<link hreflang="bn" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=bn" rel="alternate" />
<link hreflang="nb" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=nb" rel="alternate" />
<link hreflang="tr" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=tr" rel="alternate" />
<link hreflang="fr" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=fr" rel="alternate" />
<link hreflang="pt-br" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=pt-br" rel="alternate" />
<link hreflang="hr" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=hr" rel="alternate" />
<link hreflang="ta" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=ta" rel="alternate" />
<link hreflang="ko" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=ko" rel="alternate" />
<link hreflang="gu" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=gu" rel="alternate" />
<link hreflang="da" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=da" rel="alternate" />
<link hreflang="sr" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=sr" rel="alternate" />
<link hreflang="vi" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=vi" rel="alternate" />
<link hreflang="mr" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=mr" rel="alternate" />
<link hreflang="ro" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=ro" rel="alternate" />
<link hreflang="uk" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=uk" rel="alternate" />
<link hreflang="zh-tw" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=zh-tw" rel="alternate" />
<link hreflang="pt" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=pt" rel="alternate" />
<link hreflang="tl" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=tl" rel="alternate" />
<link hreflang="ur" href="https://www.instagram.com/p/BNfqVfVlmkj/?hl=ur" rel="alternate" />
</head>
<body class="">
<span id="react-root"></span>
<script type="text/javascript">window._sharedData = {"country_code": "US", "display_properties_server_guess": {"viewport_width": 1423, "pixel_ratio": 1.0}, "show_app_install": true, "environment_switcher_visible_server_guess": true, "static_root": "//instagramstatic-a.akamaihd.net/h1", "activity_counts": null, "config": {"viewer": null, "csrf_token": "JLDDjs3ZQuAg8z755OcfndJK6vD206Wz"}, "language_code": "en", "hostname": "www.instagram.com", "qe": {"gql": {"p": {}, "g": ""}, "feed": {"p": {}, "g": ""}, "su_universe": {"p": {}, "g": ""}, "ebd": {"p": {}, "g": ""}, "br": {"p": {}, "g": ""}, "discovery": {"p": {}, "g": ""}, "us_li": {"p": {}, "g": ""}, "us": {"p": {"use_continue_text": "false"}, "g": "continue_vs_signup_text_control_03"}, "freq": {"p": {}, "g": ""}, "activity_stories": {"p": {}, "g": ""}, "profile": {"p": {}, "g": ""}}, "platform": "web", "gatekeepers": {}, "entry_data": {"PostPage": [{"media": {"dimensions": {"width": 1080, "height": 809}, "caption_is_edited": false, "location": null, "is_video": false, "usertags": {"nodes": [{"x": 0.588, "user": {"username": "kmikeym"}, "y": 0.3221755253399258}]}, "comments": {"count": 0, "nodes": [], "page_info": {"end_cursor": null, "has_next_page": false, "has_previous_page": false, "start_cursor": null}}, "likes": {"count": 8, "nodes": [{"user": {"username": "adron", "id": "22913067", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/11184435_499678936846282_1189326132_a.jpg"}}, {"user": {"username": "airbnbpets", "id": "2298056172", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/12479499_975617275825114_893714337_a.jpg"}}, {"user": {"username": "chuddy_gis", "id": "1107164297", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/13398587_580416648796655_1658848717_a.jpg"}}, {"user": {"username": "kmikeym", "id": "1538723", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/12627953_686238411518831_1544976311_a.jpg"}}, {"user": {"username": "mbijon", "id": "288900753", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/15538351_1179332335485104_9077554250728341504_a.jpg"}}, {"user": {"username": "marky.jackson", "id": "4172246144", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/15099585_344413402603108_8308164362057547776_a.jpg"}}, {"user": {"username": "springsandwire", "id": "5659134", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/14278925_261672440893397_4512501879099359232_a.jpg"}}, {"user": {"username": "marcusestes", "id": "1106053", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/11421941_1475902606053570_1957200355_a.jpg"}}], "viewer_has_liked": false}, "owner": {"username": "aaronpk", "id": "1500881", "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/14240576_268350536897085_1129715662_a.jpg", "is_private": false, "followed_by_viewer": false, "requested_by_viewer": false, "blocked_by_viewer": false, "is_unpublished": false, "full_name": "Aaron Parecki", "has_blocked_viewer": false}, "display_src": "https://scontent.cdninstagram.com/t51.2885-15/e35/15306530_797555713747689_6958612945332862976_n.jpg?ig_cache_key=MTM5NjAyMDYwNDIxODc5NjMyMw%3D%3D.2", "id": "1396020604218796323", "is_ad": false, "date": 1480638646, "caption": "Streaming the #kmikeym shareholder meeting!", "code": "BNfqVfVlmkj", "comments_disabled": false}}]}};</script>
<script src="//instagramstatic-a.akamaihd.net/h1/bundles/en_US_Commons.js/ad28dd60d42a.js" crossorigin="anonymous" type="text/javascript"></script>
<script src="//instagramstatic-a.akamaihd.net/h1/bundles/en_US_PostPage.js/ab1daa81add9.js" crossorigin="anonymous" type="text/javascript"></script>
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','//connect.facebook.net/en_US/fbevents.js');
fbq('init', '1425767024389221');
fbq('track', 'PageView');
</script>
<noscript>
</noscript>
<script type="text/javascript">window._timings.domInteractive = Date.now()</script>
</body>
</html>

+ 271
- 0
tests/data/www.instagram.com/photo_with_venue.html View File

@ -0,0 +1,271 @@
HTTP/1.1 200 OK
Server: Apache
Date: Wed, 09 Dec 2015 03:29:14 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
<!DOCTYPE html>
<!--[if lt IE 7]> <html lang="en" class="no-js lt-ie9 lt-ie8 lt-ie7 not-logged-in "> <![endif]-->
<!--[if IE 7]> <html lang="en" class="no-js lt-ie9 lt-ie8 not-logged-in "> <![endif]-->
<!--[if IE 8]> <html lang="en" class="no-js lt-ie9 not-logged-in "> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en" class="no-js not-logged-in "> <!--<![endif]-->
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>
Instagram
</title>
<script type="text/javascript">
WebFontConfig = {
custom: {
families: ['proxima-nova:n3,n4,n6,n7'],
}
};
</script>
<script type="text/javascript" async src="//instagramstatic-a.akamaihd.net/h1/scripts/webfont.js/c0456c81549b.js"></script>
<style type="text/css">
/* @license
* MyFonts Webfont Build ID 2164953, 2012-03-23T23:06:30-0400
*
* The fonts listed in this notice are subject to the End User License
* Agreement(s) entered into by the website owner. All other parties are
* explicitly restricted from using the Licensed Webfonts(s).
*
* You may obtain a valid license at the URLs below.
*
*
* Webfont: Proxima Nova Light by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/light/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Regular by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/regular/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Semibold by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/semibold/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Bold Italic by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/bold-it/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Bold by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/bold/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Italic by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/regular-it/
* Licensed pageviews: unlimited
*
*
* License: http://www.myfonts.com/viewlicense?type=web&buildid=2164953
* Webfonts copyright: Copyright (c) Mark Simonson, 2005. All rights reserved.
*
* (c) 2012 Bitstream Inc
*/
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.eot/115b1f7f9c04.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.eot/115b1f7f9c04.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.woff/618250d25a4d.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.ttf/646346e03084.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.svg/e55a9d6051e8.svg#ProximaNovaBold') format("svg");
font-weight: bold;
font-style: normal; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.eot/1cbb869da891.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.eot/1cbb869da891.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.woff/b1cf049474c9.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.ttf/3adb020ceae3.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.svg/29948a2d3c58.svg#ProximaNovaBoldItalic') format("svg");
font-weight: bold;
font-style: italic; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.eot/12af77715cee.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.eot/12af77715cee.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.woff/a9a9773b8e29.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.ttf/99e19808976a.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.svg/c33d2fd56309.svg#ProximaNovaRegular') format("svg");
font-weight: normal;
font-style: normal; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.eot/1bbbd1312b0d.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.eot/1bbbd1312b0d.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.woff/9e306befca91.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.ttf/4a8663684135.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.svg/876278d4b189.svg#ProximaNovaRegularItalic') format("svg");
font-weight: normal;
font-style: italic; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.eot/5016edf79e1d.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.eot/5016edf79e1d.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.woff/615c1b06d8fa.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.ttf/2973bd483f7a.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.svg/868597833e49.svg#ProximaNovaSemibold') format("svg");
font-weight: 600;
font-style: normal; }
</style>
<style type="text/css">
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.eot/63c84728610f.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.eot/63c84728610f.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.woff/66bbe029f180.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.ttf/eb408516399b.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.svg/858f6a9b7ef3.svg#ProximaNovaLight') format("svg");
font-weight: 300;
font-style: normal; }
</style>
<meta name="robots" content="noimageindex">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta id="viewport" name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
<script type="text/javascript">
(function() {
var docElement = document.documentElement;
var classRE = new RegExp('(^|\\s)no-js(\\s|$)');
var className = docElement.className;
docElement.className = className.replace(classRE, '$1js$2');
})();
</script>
<script type="text/javascript">window._timings = {"domLoading": Date.now()}</script>
<link rel="apple-touch-icon-precomposed" sizes="76x76" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-76x76-precomposed.png/932e4d9af891.png">
<link rel="apple-touch-icon-precomposed" sizes="120x120" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-120x120-precomposed.png/004705c9353f.png">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-152x152-precomposed.png/82467bc9bcce.png">
<link rel="apple-touch-icon-precomposed" sizes="167x167" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-167x167-precomposed.png/515cb4eeeeee.png">
<link rel="apple-touch-icon-precomposed" sizes="180x180" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-180x180-precomposed.png/94fd767f257b.png">
<link rel="icon" sizes="192x192" href="//instagramstatic-a.akamaihd.net/h1/images/ico/favicon-192.png/b407fa101800.png">
<link rel="mask-icon" href="//instagramstatic-a.akamaihd.net/h1/images/ico/favicon.svg/9d8680ab8a3c.svg" color="#262626"><link rel="shortcut icon" type="image/x-icon" href="//instagramstatic-a.akamaihd.net/h1/images/ico/favicon.ico/dfa85bb1fd63.ico">
<link rel="canonical" href="https://www.instagram.com/p/BN3Z5salSys/" />
<meta name="description" content="See this Instagram photo by @aaronpk • 25 likes" />
<meta property="og:site_name" content="Instagram" />
<meta property="og:title" content="Instagram photo by Aaron Parecki • Dec 11, 2016 at 5:48am UTC" />
<meta property="og:image" content="https://scontent.cdninstagram.com/t51.2885-15/e35/15306145_1623697164601623_3750679142983532544_n.jpg?ig_cache_key=MTQwMjcwMzcyNDgxMjc3NDU3Mg%3D%3D.2" />
<meta property="og:description" content="See this Instagram photo by @aaronpk • 25 likes" />
<meta property="fb:app_id" content="124024574287414" />
<meta property="og:url" content="https://www.instagram.com/p/BN3Z5salSys/" />
<meta property="instapp:owner_user_id" content="1500881" />
<meta property="al:ios:app_name" content="Instagram" />
<meta property="al:ios:app_store_id" content="389801252" />
<meta property="al:ios:url" content="instagram://media?id=1402703724812774572" />
<meta property="al:android:app_name" content="Instagram" />
<meta property="al:android:package" content="com.instagram.android" />
<meta property="al:android:url" content="https://www.instagram.com/p/BN3Z5salSys/" />
<meta name="medium" content="image" />
<meta property="og:type" content="instapp:photo" />
<meta content="xoxofest" property="instapp:hashtags" />
<link rel="alternate" href="android-app://com.instagram.android/https/instagram.com/p/BN3Z5salSys/" />
<link hreflang="x-default" href="https://www.instagram.com/p/BN3Z5salSys/" rel="alternate" />
<link hreflang="gu" href="https://www.instagram.com/p/BN3Z5salSys/?hl=gu" rel="alternate" />
<link hreflang="pt" href="https://www.instagram.com/p/BN3Z5salSys/?hl=pt" rel="alternate" />
<link hreflang="id" href="https://www.instagram.com/p/BN3Z5salSys/?hl=id" rel="alternate" />
<link hreflang="ur" href="https://www.instagram.com/p/BN3Z5salSys/?hl=ur" rel="alternate" />
<link hreflang="pa" href="https://www.instagram.com/p/BN3Z5salSys/?hl=pa" rel="alternate" />
<link hreflang="vi" href="https://www.instagram.com/p/BN3Z5salSys/?hl=vi" rel="alternate" />
<link hreflang="mr" href="https://www.instagram.com/p/BN3Z5salSys/?hl=mr" rel="alternate" />
<link hreflang="ml" href="https://www.instagram.com/p/BN3Z5salSys/?hl=ml" rel="alternate" />
<link hreflang="bn" href="https://www.instagram.com/p/BN3Z5salSys/?hl=bn" rel="alternate" />
<link hreflang="tr" href="https://www.instagram.com/p/BN3Z5salSys/?hl=tr" rel="alternate" />
<link hreflang="sk" href="https://www.instagram.com/p/BN3Z5salSys/?hl=sk" rel="alternate" />
<link hreflang="ms" href="https://www.instagram.com/p/BN3Z5salSys/?hl=ms" rel="alternate" />
<link hreflang="kn" href="https://www.instagram.com/p/BN3Z5salSys/?hl=kn" rel="alternate" />
<link hreflang="da" href="https://www.instagram.com/p/BN3Z5salSys/?hl=da" rel="alternate" />
<link hreflang="ta" href="https://www.instagram.com/p/BN3Z5salSys/?hl=ta" rel="alternate" />
<link hreflang="nb" href="https://www.instagram.com/p/BN3Z5salSys/?hl=nb" rel="alternate" />
<link hreflang="pl" href="https://www.instagram.com/p/BN3Z5salSys/?hl=pl" rel="alternate" />
<link hreflang="tl" href="https://www.instagram.com/p/BN3Z5salSys/?hl=tl" rel="alternate" />
<link hreflang="hu" href="https://www.instagram.com/p/BN3Z5salSys/?hl=hu" rel="alternate" />
<link hreflang="zh-cn" href="https://www.instagram.com/p/BN3Z5salSys/?hl=zh-cn" rel="alternate" />
<link hreflang="te" href="https://www.instagram.com/p/BN3Z5salSys/?hl=te" rel="alternate" />
<link hreflang="hr" href="https://www.instagram.com/p/BN3Z5salSys/?hl=hr" rel="alternate" />
<link hreflang="zh-tw" href="https://www.instagram.com/p/BN3Z5salSys/?hl=zh-tw" rel="alternate" />
<link hreflang="af" href="https://www.instagram.com/p/BN3Z5salSys/?hl=af" rel="alternate" />
<link hreflang="cs" href="https://www.instagram.com/p/BN3Z5salSys/?hl=cs" rel="alternate" />
<link hreflang="si" href="https://www.instagram.com/p/BN3Z5salSys/?hl=si" rel="alternate" />
<link hreflang="ne" href="https://www.instagram.com/p/BN3Z5salSys/?hl=ne" rel="alternate" />
<link hreflang="ru" href="https://www.instagram.com/p/BN3Z5salSys/?hl=ru" rel="alternate" />
<link hreflang="fr-ca" href="https://www.instagram.com/p/BN3Z5salSys/?hl=fr-ca" rel="alternate" />
<link hreflang="nl" href="https://www.instagram.com/p/BN3Z5salSys/?hl=nl" rel="alternate" />
<link hreflang="th" href="https://www.instagram.com/p/BN3Z5salSys/?hl=th" rel="alternate" />
<link hreflang="hi" href="https://www.instagram.com/p/BN3Z5salSys/?hl=hi" rel="alternate" />
<link hreflang="sv" href="https://www.instagram.com/p/BN3Z5salSys/?hl=sv" rel="alternate" />
<link hreflang="zh-hk" href="https://www.instagram.com/p/BN3Z5salSys/?hl=zh-hk" rel="alternate" />
<link hreflang="bg" href="https://www.instagram.com/p/BN3Z5salSys/?hl=bg" rel="alternate" />
<link hreflang="ja" href="https://www.instagram.com/p/BN3Z5salSys/?hl=ja" rel="alternate" />
<link hreflang="sr" href="https://www.instagram.com/p/BN3Z5salSys/?hl=sr" rel="alternate" />
<link hreflang="ro" href="https://www.instagram.com/p/BN3Z5salSys/?hl=ro" rel="alternate" />
<link hreflang="pt-br" href="https://www.instagram.com/p/BN3Z5salSys/?hl=pt-br" rel="alternate" />
<link hreflang="it" href="https://www.instagram.com/p/BN3Z5salSys/?hl=it" rel="alternate" />
<link hreflang="fi" href="https://www.instagram.com/p/BN3Z5salSys/?hl=fi" rel="alternate" />
<link hreflang="el" href="https://www.instagram.com/p/BN3Z5salSys/?hl=el" rel="alternate" />
<link hreflang="en" href="https://www.instagram.com/p/BN3Z5salSys/?hl=en" rel="alternate" />
<link hreflang="uk" href="https://www.instagram.com/p/BN3Z5salSys/?hl=uk" rel="alternate" />
<link hreflang="de" href="https://www.instagram.com/p/BN3Z5salSys/?hl=de" rel="alternate" />
<link hreflang="ko" href="https://www.instagram.com/p/BN3Z5salSys/?hl=ko" rel="alternate" />
<link hreflang="es" href="https://www.instagram.com/p/BN3Z5salSys/?hl=es" rel="alternate" />
<link hreflang="fr" href="https://www.instagram.com/p/BN3Z5salSys/?hl=fr" rel="alternate" />
</head>
<body class="">
<span id="react-root"></span>
<script type="text/javascript">window._sharedData = {"platform": "web", "display_properties_server_guess": {"pixel_ratio": 1.0, "viewport_width": 1423}, "show_app_install": true, "language_code": "en", "static_root": "//instagramstatic-a.akamaihd.net/h1", "gatekeepers": {}, "environment_switcher_visible_server_guess": true, "qe": {"us": {"g": "continue_vs_signup_text_control_03", "p": {"use_continue_text": "false"}}, "feed": {"g": "", "p": {}}, "us_li": {"g": "", "p": {}}, "freq": {"g": "", "p": {}}, "br": {"g": "", "p": {}}, "discovery": {"g": "", "p": {}}, "ebd": {"g": "", "p": {}}, "gql": {"g": "", "p": {}}, "profile": {"g": "", "p": {}}, "su_universe": {"g": "", "p": {}}, "activity_stories": {"g": "", "p": {}}}, "config": {"csrf_token": "JLDDjs3ZQuAg8z755OcfndJK6vD206Wz", "viewer": null}, "hostname": "www.instagram.com", "country_code": "US", "activity_counts": null, "entry_data": {"PostPage": [{"media": {"is_video": false, "owner": {"is_unpublished": false, "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/14240576_268350536897085_1129715662_a.jpg", "username": "aaronpk", "blocked_by_viewer": false, "requested_by_viewer": false, "id": "1500881", "followed_by_viewer": false, "full_name": "Aaron Parecki", "is_private": false, "has_blocked_viewer": false}, "date": 1481435336, "usertags": {"nodes": [{"user": {"username": "stream_pdx"}, "x": 0.7466666666666667, "y": 0.4704095904095904}]}, "comments": {"nodes": [{"text": "cheers", "user": {"profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/12959976_1733367483606521_1383901392_a.jpg", "id": "498129072", "username": "penichetony"}, "id": "17845480846179295", "created_at": 1481790403.0}], "count": 1, "page_info": {"end_cursor": null, "has_previous_page": false, "start_cursor": null, "has_next_page": false}}, "dimensions": {"height": 1001, "width": 1080}, "id": "1402703724812774572", "code": "BN3Z5salSys", "location": {"has_public_page": true, "id": "109284789535230", "slug": "xoxo-outpost", "name": "XOXO Outpost"}, "caption_is_edited": false, "caption": "Super thrilled about the launch of our podcast studio in an Airstream! It's been a fun day of a dozen people recording podcast episodes for the Podcast Challenge! An amazing variety of styles and topics. We're moving to a new location and need your help to buy the airstream from #xoxofest and transport it! streampdx.com/donate", "is_ad": false, "likes": {"viewer_has_liked": false, "count": 25, "nodes": [{"user": {"profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/14374264_1173581766051479_7286854188842090496_a.jpg", "id": "256750317", "username": "davidjohnmead"}}, {"user": {"profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/12627953_686238411518831_1544976311_a.jpg", "id": "1538723", "username": "kmikeym"}}, {"user": {"profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/15538351_1179332335485104_9077554250728341504_a.jpg", "id": "288900753", "username": "mbijon"}}, {"user": {"profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/10848337_630259027086405_573470705_a.jpg", "id": "1586387238", "username": "imcherylcrowe"}}, {"user": {"profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/14515861_213093192465463_1350030331347992576_a.jpg", "id": "9677508", "username": "katdeck"}}, {"user": {"profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/15625227_329288677470710_608797148758147072_a.jpg", "id": "181128730", "username": "sweetmadicakes"}}, {"user": {"profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/11934878_494550000723712_1579779553_a.jpg", "id": "304487340", "username": "prometheusred"}}, {"user": {"profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/15802159_1324040264284602_7393816544007946240_a.jpg", "id": "3240270247", "username": "wooliegang"}}, {"user": {"profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/11007925_1570816406494481_1137000895_a.jpg", "id": "3686317", "username": "html5cat"}}, {"user": {"profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/11373939_584524411650281_274945108_a.jpg", "id": "186345962", "username": "is_a_beau"}}]}, "display_src": "https://scontent.cdninstagram.com/t51.2885-15/e35/15306145_1623697164601623_3750679142983532544_n.jpg?ig_cache_key=MTQwMjcwMzcyNDgxMjc3NDU3Mg%3D%3D.2", "comments_disabled": false}}]}};</script>
<script type="text/javascript" crossorigin="anonymous" src="//instagramstatic-a.akamaihd.net/h1/bundles/en_US_Commons.js/ad28dd60d42a.js"></script>
<script type="text/javascript" crossorigin="anonymous" src="//instagramstatic-a.akamaihd.net/h1/bundles/en_US_PostPage.js/ab1daa81add9.js"></script>
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','//connect.facebook.net/en_US/fbevents.js');
fbq('init', '1425767024389221');
fbq('track', 'PageView');
</script>
<noscript>
</noscript>
<script type="text/javascript">window._timings.domInteractive = Date.now()</script>
</body>
</html>

+ 276
- 0
tests/data/www.instagram.com/video.html View File

@ -0,0 +1,276 @@
HTTP/1.1 200 OK
Server: Apache
Date: Wed, 09 Dec 2015 03:29:14 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
<!DOCTYPE html>
<!--[if lt IE 7]> <html lang="en" class="no-js lt-ie9 lt-ie8 lt-ie7 not-logged-in "> <![endif]-->
<!--[if IE 7]> <html lang="en" class="no-js lt-ie9 lt-ie8 not-logged-in "> <![endif]-->
<!--[if IE 8]> <html lang="en" class="no-js lt-ie9 not-logged-in "> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en" class="no-js not-logged-in "> <!--<![endif]-->
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>
Instagram
</title>
<script type="text/javascript">
WebFontConfig = {
custom: {
families: ['proxima-nova:n3,n4,n6,n7'],
}
};
</script>
<script src="//instagramstatic-a.akamaihd.net/h1/scripts/webfont.js/c0456c81549b.js" type="text/javascript" async></script>
<style type="text/css">
/* @license
* MyFonts Webfont Build ID 2164953, 2012-03-23T23:06:30-0400
*
* The fonts listed in this notice are subject to the End User License
* Agreement(s) entered into by the website owner. All other parties are
* explicitly restricted from using the Licensed Webfonts(s).
*
* You may obtain a valid license at the URLs below.
*
*
* Webfont: Proxima Nova Light by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/light/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Regular by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/regular/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Semibold by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/semibold/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Bold Italic by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/bold-it/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Bold by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/bold/
* Licensed pageviews: unlimited
*
* Webfont: Proxima Nova Italic by Mark Simonson
* URL: http://www.myfonts.com/fonts/marksimonson/proxima-nova/regular-it/
* Licensed pageviews: unlimited
*
*
* License: http://www.myfonts.com/viewlicense?type=web&buildid=2164953
* Webfonts copyright: Copyright (c) Mark Simonson, 2005. All rights reserved.
*
* (c) 2012 Bitstream Inc
*/
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.eot/115b1f7f9c04.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.eot/115b1f7f9c04.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.woff/618250d25a4d.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.ttf/646346e03084.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-bold-webfont.svg/e55a9d6051e8.svg#ProximaNovaBold') format("svg");
font-weight: bold;
font-style: normal; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.eot/1cbb869da891.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.eot/1cbb869da891.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.woff/b1cf049474c9.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.ttf/3adb020ceae3.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-boldit-webfont.svg/29948a2d3c58.svg#ProximaNovaBoldItalic') format("svg");
font-weight: bold;
font-style: italic; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.eot/12af77715cee.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.eot/12af77715cee.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.woff/a9a9773b8e29.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.ttf/99e19808976a.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-reg-webfont.svg/c33d2fd56309.svg#ProximaNovaRegular') format("svg");
font-weight: normal;
font-style: normal; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.eot/1bbbd1312b0d.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.eot/1bbbd1312b0d.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.woff/9e306befca91.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.ttf/4a8663684135.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-regit-webfont.svg/876278d4b189.svg#ProximaNovaRegularItalic') format("svg");
font-weight: normal;
font-style: italic; }
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.eot/5016edf79e1d.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.eot/5016edf79e1d.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.woff/615c1b06d8fa.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.ttf/2973bd483f7a.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-sbold-webfont.svg/868597833e49.svg#ProximaNovaSemibold') format("svg");
font-weight: 600;
font-style: normal; }
</style>
<style type="text/css">
@font-face {
font-family: 'proxima-nova';
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.eot/63c84728610f.eot');
src: url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.eot/63c84728610f.eot?#iefix') format("embedded-opentype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.woff/66bbe029f180.woff') format("woff"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.ttf/eb408516399b.ttf') format("truetype"),
url(' //instagramstatic-a.akamaihd.net/h1/webfonts/proximanova-light-webfont.svg/858f6a9b7ef3.svg#ProximaNovaLight') format("svg");
font-weight: 300;
font-style: normal; }
</style>
<meta name="robots" content="noimageindex">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta id="viewport" name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, minimum-scale=1, maximum-scale=1">
<script type="text/javascript">
(function() {
var docElement = document.documentElement;
var classRE = new RegExp('(^|\\s)no-js(\\s|$)');
var className = docElement.className;
docElement.className = className.replace(classRE, '$1js$2');
})();
</script>
<script type="text/javascript">window._timings = {"domLoading": Date.now()}</script>
<link rel="apple-touch-icon-precomposed" sizes="76x76" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-76x76-precomposed.png/932e4d9af891.png">
<link rel="apple-touch-icon-precomposed" sizes="120x120" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-120x120-precomposed.png/004705c9353f.png">
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-152x152-precomposed.png/82467bc9bcce.png">
<link rel="apple-touch-icon-precomposed" sizes="167x167" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-167x167-precomposed.png/515cb4eeeeee.png">
<link rel="apple-touch-icon-precomposed" sizes="180x180" href="//instagramstatic-a.akamaihd.net/h1/images/ico/apple-touch-icon-180x180-precomposed.png/94fd767f257b.png">
<link rel="icon" sizes="192x192" href="//instagramstatic-a.akamaihd.net/h1/images/ico/favicon-192.png/b407fa101800.png">
<link rel="mask-icon" href="//instagramstatic-a.akamaihd.net/h1/images/ico/favicon.svg/9d8680ab8a3c.svg" color="#262626"><link rel="shortcut icon" type="image/x-icon" href="//instagramstatic-a.akamaihd.net/h1/images/ico/favicon.ico/dfa85bb1fd63.ico">
<link rel="canonical" href="https://www.instagram.com/p/BO_RN8AFZSx/" />
<meta content="See this Instagram video by @aaronpk • 2 likes" name="description" />
<meta property="og:site_name" content="Instagram" />
<meta property="og:title" content="Instagram video by Aaron Parecki • Jan 8, 2017 at 3:38am UTC" />
<meta property="og:image" content="https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15624670_548881701986735_8264383763249627136_n.jpg?ig_cache_key=MTQyMjkzMTczMTg0MjE3NjE3Nw%3D%3D.2" />
<meta property="og:description" content="See this Instagram video by @aaronpk • 2 likes" />
<meta property="fb:app_id" content="124024574287414" />
<meta property="og:url" content="https://www.instagram.com/p/BO_RN8AFZSx/" />
<meta property="instapp:owner_user_id" content="1500881" />
<meta property="al:ios:app_name" content="Instagram" />
<meta property="al:ios:app_store_id" content="389801252" />
<meta property="al:ios:url" content="instagram://media?id=1422931731842176177" />
<meta property="al:android:app_name" content="Instagram" />
<meta property="al:android:package" content="com.instagram.android" />
<meta property="al:android:url" content="https://www.instagram.com/p/BO_RN8AFZSx/" />
<meta name="medium" content="video" />
<meta property="og:type" content="video" />
<meta property="og:video" content="http://scontent.cdninstagram.com/t50.2886-16/15921147_1074837002642259_2269307616507199488_n.mp4" />
<meta property="og:video:secure_url" content="https://scontent.cdninstagram.com/t50.2886-16/15921147_1074837002642259_2269307616507199488_n.mp4" />
<meta property="og:video:type" content="video/mp4" />
<meta property="og:video:width" content="640" />
<meta property="og:video:height" content="360" />
<meta content="100daysofmusic" property="video:tag" /><meta content="the100dayproject" property="video:tag" /><meta content="100daysproject" property="video:tag" />
<link rel="alternate" href="android-app://com.instagram.android/https/instagram.com/p/BO_RN8AFZSx/" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/" hreflang="x-default" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=el" hreflang="el" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=ko" hreflang="ko" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=it" hreflang="it" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=en" hreflang="en" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=nb" hreflang="nb" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=cs" hreflang="cs" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=fi" hreflang="fi" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=id" hreflang="id" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=de" hreflang="de" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=zh-hk" hreflang="zh-hk" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=ro" hreflang="ro" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=ja" hreflang="ja" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=tr" hreflang="tr" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=uk" hreflang="uk" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=bg" hreflang="bg" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=sr" hreflang="sr" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=pa" hreflang="pa" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=te" hreflang="te" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=hr" hreflang="hr" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=pt-br" hreflang="pt-br" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=af" hreflang="af" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=th" hreflang="th" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=mr" hreflang="mr" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=kn" hreflang="kn" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=bn" hreflang="bn" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=pl" hreflang="pl" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=gu" hreflang="gu" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=ms" hreflang="ms" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=ml" hreflang="ml" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=fr" hreflang="fr" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=zh-tw" hreflang="zh-tw" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=hu" hreflang="hu" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=si" hreflang="si" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=pt" hreflang="pt" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=ru" hreflang="ru" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=ne" hreflang="ne" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=da" hreflang="da" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=es" hreflang="es" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=fr-ca" hreflang="fr-ca" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=ta" hreflang="ta" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=nl" hreflang="nl" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=tl" hreflang="tl" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=hi" hreflang="hi" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=zh-cn" hreflang="zh-cn" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=sv" hreflang="sv" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=ur" hreflang="ur" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=vi" hreflang="vi" rel="alternate" />
<link href="https://www.instagram.com/p/BO_RN8AFZSx/?hl=sk" hreflang="sk" rel="alternate" />
</head>
<body class="">
<span id="react-root"></span>
<script type="text/javascript">window._sharedData = {"qe": {"feed": {"p": {}, "g": ""}, "ebd": {"p": {}, "g": ""}, "us_li": {"p": {}, "g": ""}, "activity_stories": {"p": {}, "g": ""}, "su_universe": {"p": {}, "g": ""}, "discovery": {"p": {}, "g": ""}, "profile": {"p": {}, "g": ""}, "freq": {"p": {}, "g": ""}, "us": {"p": {"use_continue_text": "false"}, "g": "continue_vs_signup_text_control_03"}, "br": {"p": {}, "g": ""}, "gql": {"p": {}, "g": ""}}, "country_code": "US", "show_app_install": true, "platform": "web", "entry_data": {"PostPage": [{"media": {"caption": "Day 18. Maple and Spruce #100daysofmusic #100daysproject #the100dayproject https://aaronparecki.com/2017/01/07/14/day18", "comments": {"page_info": {"has_next_page": false, "has_previous_page": false, "end_cursor": null, "start_cursor": null}, "count": 0, "nodes": []}, "caption_is_edited": false, "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15624670_548881701986735_8264383763249627136_n.jpg?ig_cache_key=MTQyMjkzMTczMTg0MjE3NjE3Nw%3D%3D.2", "video_views": 32, "comments_disabled": false, "location": null, "likes": {"count": 2, "nodes": [{"user": {"profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/13551795_1697805083802299_107961861_a.jpg", "username": "paris.ehamiltoun", "id": "1973422170"}}, {"user": {"profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/15276675_345935352429588_7502013753811009536_a.jpg", "username": "ricky_guevarra", "id": "2072811324"}}], "viewer_has_liked": false}, "video_url": "https://scontent.cdninstagram.com/t50.2886-16/15921147_1074837002642259_2269307616507199488_n.mp4", "owner": {"blocked_by_viewer": false, "requested_by_viewer": false, "followed_by_viewer": false, "username": "aaronpk", "full_name": "Aaron Parecki", "is_unpublished": false, "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/14240576_268350536897085_1129715662_a.jpg", "id": "1500881", "is_private": false, "has_blocked_viewer": false}, "dimensions": {"width": 640, "height": 360}, "id": "1422931731842176177"