From 5f63ed79447f2a3588f8c3f10fc0dce23a7ff2de Mon Sep 17 00:00:00 2001 From: Aaron Parecki Date: Wed, 19 Apr 2017 09:21:58 -0700 Subject: [PATCH] updates for instagram scraping --- lib/Formats/Instagram.php | 56 +++- tests/InstagramTest.php | 24 +- tests/data/www.instagram.com/aaronpk_?__a=1 | 2 +- tests/data/www.instagram.com/kmikeym_?__a=1 | 2 +- tests/data/www.instagram.com/photo.html | 243 +++++------------ .../photo_with_person_tag.html | 241 +++++------------ .../www.instagram.com/photo_with_venue.html | 244 +++++------------ tests/data/www.instagram.com/video.html | 247 +++++------------- 8 files changed, 323 insertions(+), 736 deletions(-) diff --git a/lib/Formats/Instagram.php b/lib/Formats/Instagram.php index 995db2e..5cf70ec 100644 --- a/lib/Formats/Instagram.php +++ b/lib/Formats/Instagram.php @@ -37,8 +37,17 @@ class Instagram { } // Content and hashtags + $caption = false; + + if(isset($photoData['caption'])) { - if(preg_match_all('/#([a-z0-9_-]+)/i', $photoData['caption'], $matches)) { + $caption = $photoData['caption']; + } elseif(isset($photoData['edge_media_to_caption']['edges'][0]['node']['text'])) { + $caption = $photoData['edge_media_to_caption']['edges'][0]['node']['text']; + } + + if($caption) { + if(preg_match_all('/#([a-z0-9_-]+)/i', $caption, $matches)) { $entry['category'] = []; foreach($matches[1] as $match) { $entry['category'][] = $match; @@ -46,13 +55,16 @@ class Instagram { } $entry['content'] = [ - 'text' => $photoData['caption'] + 'text' => $caption ]; } // Include the photo/video media URLs // (Always return arrays) - $entry['photo'] = [$photoData['display_src']]; + if(array_key_exists('display_src', $photoData)) + $entry['photo'] = [$photoData['display_src']]; + elseif(array_key_exists('display_url', $photoData)) + $entry['photo'] = [$photoData['display_url']]; if(array_key_exists('is_video', $photoData) && $photoData['is_video']) { $entry['video'] = [$photoData['video_url']]; @@ -61,7 +73,9 @@ class Instagram { $refs = []; // Find person tags and fetch user profiles - if(array_key_exists('usertags', $photoData) && $photoData['usertags']['nodes']) { + + // old json + if(isset($photoData['usertags']['nodes'])) { if(!isset($entry['category'])) $entry['category'] = []; foreach($photoData['usertags']['nodes'] as $tag) { @@ -75,8 +89,26 @@ class Instagram { } } + // new json as of approximately 2017-04-19 + if(isset($photoData['edge_media_to_tagged_user']['edges'])) { + if(!isset($entry['category'])) $entry['category'] = []; + + foreach($photoData['edge_media_to_tagged_user']['edges'] as $edge) { + $profile = self::_getInstagramProfile($edge['node']['user']['username'], $http); + if($profile) { + $card = self::_buildHCardFromInstagramProfile($profile); + $entry['category'][] = $card['url']; + $refs[$card['url']] = $card; + $profiles[] = $profile; + } + } + } + // Published date - $published = DateTime::createFromFormat('U', $photoData['date']); + if(array_key_exists('taken_at_timestamp', $photoData)) + $published = DateTime::createFromFormat('U', $photoData['taken_at_timestamp']); + elseif(array_key_exists('date', $photoData)) + $published = DateTime::createFromFormat('U', $photoData['date']); // Include venue data $locations = []; @@ -176,10 +208,12 @@ class Instagram { 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; + if(isset($post[0]['graphql']['shortcode_media'])) { + return $post[0]['graphql']['shortcode_media']; + } elseif(isset($post[0]['graphql']['media'])) { + return $post[0]['graphql']['media']; + } elseif(isset($post[0]['media'])) { + return $post[0]['media']; } } } @@ -191,9 +225,9 @@ class Instagram { $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'])) { + if(isset($data['entry_data']['LocationsPage'])) { $data = $data['entry_data']['LocationsPage']; - if(is_array($data) && array_key_exists(0, $data) && array_key_exists('location', $data[0])) { + if(isset($data[0]['location'])) { $location = $data[0]['location']; # we don't need these and they're huge, so drop them now diff --git a/tests/InstagramTest.php b/tests/InstagramTest.php index c771fec..4681453 100644 --- a/tests/InstagramTest.php +++ b/tests/InstagramTest.php @@ -19,6 +19,7 @@ class InstagramTest extends PHPUnit_Framework_TestCase { } public function testInstagramPhoto() { + // Original URL: https://www.instagram.com/p/BO5rYVElvJq/ $url = 'http://www.instagram.com/photo.html'; $response = $this->parse(['url' => $url]); @@ -32,13 +33,14 @@ class InstagramTest extends PHPUnit_Framework_TestCase { $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(['https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/15803256_1832278043695907_4846092951052353536_n.jpg'], $data['data']['photo']); + $this->assertEquals('https://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']); + $this->assertEquals('https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-19/s320x320/14240576_268350536897085_1129715662_a.jpg', $data['data']['author']['photo']); } public function testInstagramVideo() { + // Original URL: https://www.instagram.com/p/BO_RN8AFZSx/ $url = 'http://www.instagram.com/video.html'; $response = $this->parse(['url' => $url]); @@ -50,15 +52,16 @@ class InstagramTest extends PHPUnit_Framework_TestCase { $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(['https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/e15/15624670_548881701986735_8264383763249627136_n.jpg'], $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(['https://instagram.fsjc1-3.fna.fbcdn.net/t50.2886-16/15921147_1074837002642259_2269307616507199488_n.mp4'], $data['data']['video']); + $this->assertEquals('https://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']); + $this->assertEquals('https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-19/s320x320/14240576_268350536897085_1129715662_a.jpg', $data['data']['author']['photo']); } public function testInstagramPhotoWithPersonTag() { + // Original URL: https://www.instagram.com/p/BNfqVfVlmkj/ $url = 'http://www.instagram.com/photo_with_person_tag.html'; $response = $this->parse(['url' => $url]); @@ -67,12 +70,13 @@ class InstagramTest extends PHPUnit_Framework_TestCase { $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/']); + $this->assertContains('http://tinyletter.com/kmikeym', $data['data']['category']); + $this->assertArrayHasKey('http://tinyletter.com/kmikeym', $data['refs']); + $this->assertEquals(['type'=>'card','name'=>'Mike Merrill','url'=>'http://tinyletter.com/kmikeym','photo'=>'https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-19/s320x320/12627953_686238411518831_1544976311_a.jpg'], $data['refs']['http://tinyletter.com/kmikeym']); } public function testInstagramPhotoWithVenue() { + // Original URL: https://www.instagram.com/p/BN3Z5salSys/ $url = 'http://www.instagram.com/photo_with_venue.html'; $response = $this->parse(['url' => $url]); diff --git a/tests/data/www.instagram.com/aaronpk_?__a=1 b/tests/data/www.instagram.com/aaronpk_?__a=1 index 791e6fd..15cd464 100644 --- a/tests/data/www.instagram.com/aaronpk_?__a=1 +++ b/tests/data/www.instagram.com/aaronpk_?__a=1 @@ -4,4 +4,4 @@ Date: Wed, 09 Dec 2015 03:29:14 GMT Content-Type: application/json Connection: keep-alive -{"user": {"followed_by": {"count": 373}, "profile_pic_url_hd": "https://scontent.cdninstagram.com/t51.2885-19/s320x320/14240576_268350536897085_1129715662_a.jpg", "is_private": false, "username": "aaronpk", "id": "1500881", "external_url": "http://aaronparecki.com/", "follows": {"count": 196}, "followed_by_viewer": false, "is_verified": false, "has_blocked_viewer": false, "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/14240576_268350536897085_1129715662_a.jpg", "biography": null, "external_url_linkshimmed": "http://l.instagram.com/?e=ATMouxm2Ftqd9PWctyaNWmAwjUOMz6oHuHXrMT5aP5dgmfHQrSemKTru1yOFmow\u0026u=http%3A%2F%2Faaronparecki.com%2F", "media": {"page_info": {"has_previous_page": false, "start_cursor": "1423583254649553942", "has_next_page": true, "end_cursor": "1416445372818376597"}, "nodes": [{"owner": {"id": "1500881"}, "dimensions": {"width": 640, "height": 360}, "caption": "Day 19. Something different. #100daysofmusic #100dayproject", "id": "1423583254649553942", "likes": {"count": 2}, "comments": {"count": 0}, "comments_disabled": false, "code": "BPBlW15lMQW", "is_video": true, "video_views": 18, "date": 1483924370, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/e15/c157.0.405.405/15803744_1772803536373955_8904948470108913664_n.jpg?ig_cache_key=MTQyMzU4MzI1NDY0OTU1Mzk0Mg%3D%3D.2.c", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15803744_1772803536373955_8904948470108913664_n.jpg?ig_cache_key=MTQyMzU4MzI1NDY0OTU1Mzk0Mg%3D%3D.2"}, {"owner": {"id": "1500881"}, "dimensions": {"width": 640, "height": 360}, "caption": "Day 18. Maple and Spruce #100daysofmusic #100daysproject #the100dayproject https://aaronparecki.com/2017/01/07/14/day18", "id": "1422931731842176177", "likes": {"count": 2}, "comments": {"count": 0}, "comments_disabled": false, "code": "BO_RN8AFZSx", "is_video": true, "video_views": 32, "date": 1483846702, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/e15/c157.0.405.405/15624670_548881701986735_8264383763249627136_n.jpg?ig_cache_key=MTQyMjkzMTczMTg0MjE3NjE3Nw%3D%3D.2.c", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15624670_548881701986735_8264383763249627136_n.jpg?ig_cache_key=MTQyMjkzMTczMTg0MjE3NjE3Nw%3D%3D.2"}, {"owner": {"id": "1500881"}, "dimensions": {"width": 640, "height": 360}, "caption": "Day 17 #100daysofmusic #100daysproject #the100dayproject", "id": "1422248445385971330", "likes": {"count": 3}, "comments": {"count": 0}, "comments_disabled": false, "code": "BO812z5lRaC", "is_video": true, "video_views": 32, "date": 1483765248, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/e15/c157.0.405.405/15877501_1163795280401949_6778196169685204992_n.jpg?ig_cache_key=MTQyMjI0ODQ0NTM4NTk3MTMzMA%3D%3D.2.c", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15877501_1163795280401949_6778196169685204992_n.jpg?ig_cache_key=MTQyMjI0ODQ0NTM4NTk3MTMzMA%3D%3D.2"}, {"owner": {"id": "1500881"}, "dimensions": {"width": 640, "height": 360}, "caption": "Day 16: Woodbury. I sampled an ad from an old radio program, and set it to video from the TV version of the show. #100daysofmusic", "id": "1421488994613945367", "likes": {"count": 2}, "comments": {"count": 0}, "comments_disabled": false, "code": "BO6JLWQF2QX", "is_video": true, "video_views": 39, "date": 1483674714, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/e15/c157.0.405.405/15877366_168619313618864_1261670673542021120_n.jpg?ig_cache_key=MTQyMTQ4ODk5NDYxMzk0NTM2Nw%3D%3D.2.c", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15877366_168619313618864_1261670673542021120_n.jpg?ig_cache_key=MTQyMTQ4ODk5NDYxMzk0NTM2Nw%3D%3D.2"}, {"owner": {"id": "1500881"}, "dimensions": {"width": 1080, "height": 809}, "caption": "Kind of crazy to see the whole year laid out like this. #planning #2017", "id": "1421357945305100906", "likes": {"count": 13}, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/c135.0.809.809/15803256_1832278043695907_4846092951052353536_n.jpg?ig_cache_key=MTQyMTM1Nzk0NTMwNTEwMDkwNg%3D%3D.2.c", "comments_disabled": false, "code": "BO5rYVElvJq", "is_video": false, "date": 1483659092, "comments": {"count": 2}, "display_src": "https://scontent.cdninstagram.com/t51.2885-15/e35/15803256_1832278043695907_4846092951052353536_n.jpg?ig_cache_key=MTQyMTM1Nzk0NTMwNTEwMDkwNg%3D%3D.2"}, {"owner": {"id": "1500881"}, "dimensions": {"width": 640, "height": 360}, "caption": "Day 15. #100daysofmusic #100daysproject #the100dayproject", "id": "1420764733800503247", "likes": {"count": 3}, "comments": {"count": 0}, "comments_disabled": false, "code": "BO3kf9zlNfP", "is_video": true, "video_views": 22, "date": 1483588376, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/e15/c157.0.405.405/15876755_221940651592214_6077781888125108224_n.jpg?ig_cache_key=MTQyMDc2NDczMzgwMDUwMzI0Nw%3D%3D.2.c", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15876755_221940651592214_6077781888125108224_n.jpg?ig_cache_key=MTQyMDc2NDczMzgwMDUwMzI0Nw%3D%3D.2"}, {"owner": {"id": "1500881"}, "dimensions": {"width": 640, "height": 360}, "caption": "Day 14: Slow-Scan TV #100daysofmusic #100daysproject \n#hamradio", "id": "1420121264157459769", "likes": {"count": 2}, "comments": {"count": 0}, "comments_disabled": false, "code": "BO1SMQAFYU5", "is_video": true, "video_views": 46, "date": 1483511668, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/e15/c157.0.405.405/15876662_566485723547483_1182812333798326272_n.jpg?ig_cache_key=MTQyMDEyMTI2NDE1NzQ1OTc2OQ%3D%3D.2.c", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15876662_566485723547483_1182812333798326272_n.jpg?ig_cache_key=MTQyMDEyMTI2NDE1NzQ1OTc2OQ%3D%3D.2"}, {"owner": {"id": "1500881"}, "dimensions": {"width": 640, "height": 360}, "caption": "Day 13. Daft Punk vs The Office #100daysofmusic #100daysproject #the100dayproject", "id": "1419363203654358999", "likes": {"count": 3}, "comments": {"count": 2}, "comments_disabled": false, "code": "BOyl1BJFBfX", "is_video": true, "video_views": 54, "date": 1483421300, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/e15/c157.0.405.405/15876038_1025262177578792_9151050615860756480_n.jpg?ig_cache_key=MTQxOTM2MzIwMzY1NDM1ODk5OQ%3D%3D.2.c", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15876038_1025262177578792_9151050615860756480_n.jpg?ig_cache_key=MTQxOTM2MzIwMzY1NDM1ODk5OQ%3D%3D.2"}, {"owner": {"id": "1500881"}, "dimensions": {"width": 640, "height": 360}, "caption": "Day 12. This started out as a totally unrelated riff, and by the time I was done adding to it, the original riff didn't make any sense so I deleted it. There are actually 4 different kinds of trumpet tracks in this in order to achieve this semi-realistic result. I was on the fence about adding a faint string section in the background and decided against it in the end. I enjoyed playing with the drum section in this one, using silence to emphasize the trumpet solos. #100daysofmusic #100daysproject #the100dayproject", "id": "1418523047083090611", "likes": {"count": 1}, "comments": {"count": 0}, "comments_disabled": false, "code": "BOvmzIXF6Kz", "is_video": true, "video_views": 31, "date": 1483321146, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/e15/c157.0.405.405/15624009_706856202813838_3219228496890953728_n.jpg?ig_cache_key=MTQxODUyMzA0NzA4MzA5MDYxMQ%3D%3D.2.c", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15624009_706856202813838_3219228496890953728_n.jpg?ig_cache_key=MTQxODUyMzA0NzA4MzA5MDYxMQ%3D%3D.2"}, {"owner": {"id": "1500881"}, "dimensions": {"width": 640, "height": 360}, "caption": "Day 11. I'm definitely less happy with this one than any others so far, but hey that's what this project is about. Putting stuff out there and not worrying too much about it. #100daysofmusic #100daysproject #the100dayproject", "id": "1417868433870509102", "likes": {"count": 1}, "comments": {"count": 0}, "comments_disabled": false, "code": "BOtR9QTF1Qu", "is_video": true, "video_views": 18, "date": 1483243110, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/e15/c157.0.405.405/15803065_1838848903022558_5714755476852310016_n.jpg?ig_cache_key=MTQxNzg2ODQzMzg3MDUwOTEwMg%3D%3D.2.c", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15803065_1838848903022558_5714755476852310016_n.jpg?ig_cache_key=MTQxNzg2ODQzMzg3MDUwOTEwMg%3D%3D.2"}, {"owner": {"id": "1500881"}, "dimensions": {"width": 640, "height": 360}, "caption": "Day 10. Mozart is probably rolling in his grave. I took the beginning of Lacrimosa, changed it to 4/4, and added drums and some other non orchestral instruments. This was my first time playing with the East/West Choir \"Word Builder\" which is a tool where you can type phonetically what you want the choir to sing and it puts it together. This rendition is by no means perfect, but I could get it a lot closer with more time, tuning the precise timings of moving from each consonant to vowel and back. The instrumentals I added are inspired by E.S. Posthumus. #100daysofmusic #100daysproject #the100dayproject", "id": "1417184091011571733", "likes": {"count": 3}, "comments": {"count": 0}, "comments_disabled": false, "code": "BOq2WwWFGAV", "is_video": true, "video_views": 31, "date": 1483161530, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/e15/c157.0.405.405/15801826_365862793770860_7523962569996894208_n.jpg?ig_cache_key=MTQxNzE4NDA5MTAxMTU3MTczMw%3D%3D.2.c", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15801826_365862793770860_7523962569996894208_n.jpg?ig_cache_key=MTQxNzE4NDA5MTAxMTU3MTczMw%3D%3D.2"}, {"owner": {"id": "1500881"}, "dimensions": {"width": 640, "height": 360}, "caption": "Day 9. I don't really know what I was going for here. I had this tune in my head on the bike ride home from downtown this evening. This one only took an hour or so to jot down, since I wasn't going for any particular sound. The animation kind of sums it up. #100daysofmusic #100daysproject #the100dayproject", "id": "1416445372818376597", "likes": {"count": 3}, "comments": {"count": 1}, "comments_disabled": false, "code": "BOoOY_alceV", "is_video": true, "video_views": 42, "date": 1483073468, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/e15/c157.0.405.405/14723712_924037024393881_4717633081979174912_n.jpg?ig_cache_key=MTQxNjQ0NTM3MjgxODM3NjU5Nw%3D%3D.2.c", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/14723712_924037024393881_4717633081979174912_n.jpg?ig_cache_key=MTQxNjQ0NTM3MjgxODM3NjU5Nw%3D%3D.2"}], "count": 1365}, "has_requested_viewer": false, "requested_by_viewer": false, "follows_viewer": false, "full_name": "Aaron Parecki", "country_block": null, "connected_fb_page": null, "blocked_by_viewer": false}} \ No newline at end of file +{"user": {"biography": "\ud83d\udce1 w7apk.com \ud83d\udd12 oauth.net \ud83c\udfa5 backpedal.tv \ud83c\udf99 streampdx.com", "blocked_by_viewer": false, "country_block": false, "external_url": "https://aaronparecki.com/", "external_url_linkshimmed": "https://l.instagram.com/?u=https%3A%2F%2Faaronparecki.com%2F\u0026e=ATNyqP0NhWzD5oF2-sUFfjXOkfA8MHQTxfjdQ0_q23cDeWNjv1FIi_hZbbmxZ2U", "followed_by": {"count": 386}, "followed_by_viewer": false, "follows": {"count": 203}, "follows_viewer": false, "full_name": "Aaron Parecki", "has_blocked_viewer": false, "has_requested_viewer": false, "id": "1500881", "is_private": false, "is_verified": false, "profile_pic_url": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-19/s150x150/14240576_268350536897085_1129715662_a.jpg", "profile_pic_url_hd": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-19/s320x320/14240576_268350536897085_1129715662_a.jpg", "requested_by_viewer": false, "username": "aaronpk", "connected_fb_page": null, "media": {"nodes": [{"__typename": "GraphImage", "id": "1493891623539498053", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1500881"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17934411_881099645364691_255728932693737472_n.jpg", "is_video": false, "code": "BS7XoRCANxF", "date": 1492305780, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17934411_881099645364691_255728932693737472_n.jpg", "caption": "Scheming. #indieweb", "comments": {"count": 0}, "likes": {"count": 18}}, {"__typename": "GraphImage", "id": "1490269547352079259", "comments_disabled": false, "dimensions": {"height": 640, "width": 640}, "owner": {"id": "1500881"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17495155_431593710527722_7458252190298144768_n.jpg", "is_video": false, "code": "BSugEHtgLub", "date": 1491873995, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17495155_431593710527722_7458252190298144768_n.jpg", "caption": "Well shoot, so much for releasing these as an album. Score one for indie distribution. I didn't have to get approval to publish these as a podcast! #100daysofmusic #indiemusic", "comments": {"count": 2}, "likes": {"count": 18}}, {"__typename": "GraphImage", "id": "1489584866273141611", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1500881"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17817731_1875843295996760_3848764822950772736_n.jpg", "is_video": false, "code": "BSsEYsxAiNr", "date": 1491792375, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17817731_1875843295996760_3848764822950772736_n.jpg", "caption": "#fortunecookie", "comments": {"count": 0}, "likes": {"count": 16}}, {"__typename": "GraphImage", "id": "1487899211339951606", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1500881"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17818145_427024737651196_292684502050799616_n.jpg", "is_video": false, "code": "BSmFHMRgG32", "date": 1491591429, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17818145_427024737651196_292684502050799616_n.jpg", "caption": "Fun with the green screen at #opensignalpdx", "comments": {"count": 0}, "likes": {"count": 10}}, {"__typename": "GraphImage", "id": "1478738173218670057", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1500881"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17495198_234228543713305_2273083064559075328_n.jpg", "is_video": false, "code": "BSFiIiqgkXp", "date": 1490499348, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17495198_234228543713305_2273083064559075328_n.jpg", "caption": "Taco Cleanse has begun! Corn-chip-battered Tofu with Chipotle sauce. #tacocleanse", "comments": {"count": 1}, "likes": {"count": 14}}, {"__typename": "GraphImage", "id": "1477361616210348563", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1500881"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17438321_425503681130878_1945914583621304320_n.jpg", "is_video": false, "code": "BSApJADA8oT", "date": 1490335250, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17438321_425503681130878_1945914583621304320_n.jpg", "caption": "Had a great time running the switcher for the last day of class at @opensignalpdx! \ud83c\udfa5 @hellasketchpdx", "comments": {"count": 0}, "likes": {"count": 7}}, {"__typename": "GraphImage", "id": "1471965244833313807", "comments_disabled": false, "dimensions": {"height": 1075, "width": 1080}, "owner": {"id": "1500881"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/c2.0.1075.1075/17265848_281523655586310_4569825154036662272_n.jpg", "is_video": false, "code": "BRteJdkArQP", "date": 1489691952, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17265848_281523655586310_4569825154036662272_n.jpg", "caption": "@anomalily teaching Budget like a Badass at @centrl_office", "comments": {"count": 2}, "likes": {"count": 11}}, {"__typename": "GraphImage", "id": "1469197306686478621", "comments_disabled": false, "dimensions": {"height": 1075, "width": 1080}, "owner": {"id": "1500881"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/c2.0.1075.1075/17265993_260639387723116_4128441325055901696_n.jpg", "is_video": false, "code": "BRjoyqSAhkd", "date": 1489361988, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17265993_260639387723116_4128441325055901696_n.jpg", "caption": "Haven't seen that in a while. Should I try to replace the hard drive and install OS 6? Or gut it and replace the internals with a Mac Mini? \ud83c\udf4e\ud83d\udcfa #apple #macintosh #macintoshSE", "comments": {"count": 6}, "likes": {"count": 23}}, {"__typename": "GraphImage", "id": "1465684822453286571", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1500881"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17126169_988574454577023_5787190718774640640_n.jpg", "is_video": false, "code": "BRXKJSbAnar", "date": 1488943268, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17126169_988574454577023_5787190718774640640_n.jpg", "caption": "Learning things. Soon will have access to an amazing studio and cameras! #opensignalpdx", "comments": {"count": 0}, "likes": {"count": 17}}, {"__typename": "GraphImage", "id": "1464920049780403495", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1500881"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17076397_1859418637668906_583593473211367424_n.jpg", "is_video": false, "code": "BRUcQYXgi0n", "date": 1488852100, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17076397_1859418637668906_583593473211367424_n.jpg", "caption": "Beer of Trust! \ud83c\udf7b\ud83d\udddd", "comments": {"count": 0}, "likes": {"count": 10}}, {"__typename": "GraphImage", "id": "1456166838324161181", "comments_disabled": false, "dimensions": {"height": 809, "width": 1080}, "owner": {"id": "1500881"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/c135.0.809.809/16906966_887549154681921_4758661564528066560_n.jpg", "is_video": false, "code": "BQ1WAY8A-qd", "date": 1487808635, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/16906966_887549154681921_4758661564528066560_n.jpg", "caption": "A cocktail on the table and a bike on the floor. \ud83c\udf78\ud83d\udeb2\ud83d\ude0d #bromptonlife", "comments": {"count": 1}, "likes": {"count": 11}}, {"__typename": "GraphVideo", "id": "1454821869407506904", "comments_disabled": false, "dimensions": {"height": 360, "width": 640}, "owner": {"id": "1500881"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e15/c157.0.405.405/16790254_788620791286476_3441553029382275072_n.jpg", "is_video": true, "code": "BQwkMhBgRHY", "date": 1487648303, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/e15/16790254_788620791286476_3441553029382275072_n.jpg", "video_views": 83, "caption": "It's aliiiiive! I finished all the plumbing today! #barbot \ud83e\udd16\ud83c\udf78", "comments": {"count": 5}, "likes": {"count": 16}}], "count": 1396, "page_info": {"has_next_page": true, "end_cursor": "AQBL511rd6PBLhRqf4CUKf6BCMcfS7MIg5w1h46ooDrZbLzTn03LabglgP9WllGJxnqBlGw4yDmud6E1Llw8BT_0_X2YNsK1DtblLuDn8iulgg"}}}, "logging_page_id": "profilePage_1500881"} \ No newline at end of file diff --git a/tests/data/www.instagram.com/kmikeym_?__a=1 b/tests/data/www.instagram.com/kmikeym_?__a=1 index 3e47791..758b592 100644 --- a/tests/data/www.instagram.com/kmikeym_?__a=1 +++ b/tests/data/www.instagram.com/kmikeym_?__a=1 @@ -4,4 +4,4 @@ Date: Wed, 09 Dec 2015 03:29:14 GMT Content-Type: application/json Connection: keep-alive -{"user": {"country_block": null, "followed_by_viewer": false, "is_private": false, "id": "1538723", "full_name": "Mike Merrill", "has_blocked_viewer": false, "is_verified": false, "profile_pic_url_hd": "https://scontent.cdninstagram.com/t51.2885-19/s320x320/12627953_686238411518831_1544976311_a.jpg", "biography": "Financier, Piano Teacher for Dogs, Lover of Markets, and World's Oldest Millennial\u2122", "external_url_linkshimmed": "https://l.instagram.com/?u=https%3A%2F%2Fkmikeym.com%2F\u0026e=ATMP32vRo0XElDpQPhuDxhJDcrSiPxVmPsKywXU5V1NwSia00YcATMLe85NbpoY", "username": "kmikeym", "requested_by_viewer": false, "profile_pic_url": "https://scontent.cdninstagram.com/t51.2885-19/s150x150/12627953_686238411518831_1544976311_a.jpg", "has_requested_viewer": false, "connected_fb_page": null, "follows_viewer": false, "follows": {"count": 558}, "blocked_by_viewer": false, "followed_by": {"count": 6585}, "external_url": "https://kmikeym.com/", "media": {"nodes": [{"dimensions": {"height": 750, "width": 750}, "id": "1423575630100745913", "comments_disabled": false, "comments": {"count": 1}, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/15801830_1831056737110057_2546244586607476736_n.jpg?ig_cache_key=MTQyMzU3NTYzMDEwMDc0NTkxMw%3D%3D.2", "caption": "Every night the family gathers to learn a new song.", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s750x750/sh0.08/e35/15801830_1831056737110057_2546244586607476736_n.jpg?ig_cache_key=MTQyMzU3NTYzMDEwMDc0NTkxMw%3D%3D.2", "date": 1483923461, "likes": {"count": 65}, "is_video": false, "code": "BPBjn4_Ds65", "owner": {"id": "1538723"}}, {"dimensions": {"height": 810, "width": 1080}, "id": "1416384956754503647", "comments_disabled": false, "comments": {"count": 2}, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/c135.0.810.810/15625437_162684017546974_1545879177893249024_n.jpg?ig_cache_key=MTQxNjM4NDk1Njc1NDUwMzY0Nw%3D%3D.2.c", "caption": "The \u2600\ufe0f struck my Lean Canvas. THIS MEANS SOMETHING. #god #bigmanupstairs #meaning #leancanvas", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/e35/15625437_162684017546974_1545879177893249024_n.jpg?ig_cache_key=MTQxNjM4NDk1Njc1NDUwMzY0Nw%3D%3D.2", "date": 1483066266, "likes": {"count": 42}, "is_video": false, "code": "BOoAp0kjyff", "owner": {"id": "1538723"}}, {"dimensions": {"height": 360, "width": 640}, "likes": {"count": 52}, "id": "1411177753353256727", "comments_disabled": false, "comments": {"count": 0}, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/e15/c157.0.405.405/15535512_384984601842479_5090512938502979584_n.jpg?ig_cache_key=MTQxMTE3Nzc1MzM1MzI1NjcyNw%3D%3D.2.c", "caption": "Where did it go?", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15535512_384984601842479_5090512938502979584_n.jpg?ig_cache_key=MTQxMTE3Nzc1MzM1MzI1NjcyNw%3D%3D.2", "date": 1482445519, "video_views": 129, "is_video": true, "code": "BOVgrCfjf8X", "owner": {"id": "1538723"}}, {"dimensions": {"height": 1080, "width": 1080}, "id": "1406756387552006844", "comments_disabled": false, "comments": {"count": 1}, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/15538977_1818220835083291_1856515105643036672_n.jpg?ig_cache_key=MTQwNjc1NjM4NzU1MjAwNjg0NA%3D%3D.2", "caption": "Facilitating some deep business thinking with @junebotanicals. Great way to spend an afternoon.", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/e35/15538977_1818220835083291_1856515105643036672_n.jpg?ig_cache_key=MTQwNjc1NjM4NzU1MjAwNjg0NA%3D%3D.2", "date": 1481918451, "likes": {"count": 45}, "is_video": false, "code": "BOFzXstjJK8", "owner": {"id": "1538723"}}, {"dimensions": {"height": 640, "width": 640}, "likes": {"count": 64}, "id": "1402046623085512418", "comments_disabled": false, "comments": {"count": 4}, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15275470_1661287440835263_5839118329377193984_n.jpg?ig_cache_key=MTQwMjA0NjYyMzA4NTUxMjQxOA%3D%3D.2", "caption": "The ice storm has met its match.", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/e15/15275470_1661287440835263_5839118329377193984_n.jpg?ig_cache_key=MTQwMjA0NjYyMzA4NTUxMjQxOA%3D%3D.2", "date": 1481357003, "video_views": 246, "is_video": true, "code": "BN1EfmvjEbi", "owner": {"id": "1538723"}}, {"dimensions": {"height": 1080, "width": 1080}, "id": "1401027634444199838", "comments_disabled": false, "comments": {"count": 4}, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/15259081_1814485698828626_7222143260918022144_n.jpg?ig_cache_key=MTQwMTAyNzYzNDQ0NDE5OTgzOA%3D%3D.2", "caption": "Something is wrong with my palm tree... \ud83c\udf34\ud83e\udd14", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/e35/15259081_1814485698828626_7222143260918022144_n.jpg?ig_cache_key=MTQwMTAyNzYzNDQ0NDE5OTgzOA%3D%3D.2", "date": 1481235530, "likes": {"count": 46}, "is_video": false, "code": "BNxczXnjWee", "owner": {"id": "1538723"}}, {"dimensions": {"height": 1080, "width": 1080}, "id": "1400183189096281784", "comments_disabled": false, "comments": {"count": 5}, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/15276657_1299530646786408_4726681401250807808_n.jpg?ig_cache_key=MTQwMDE4MzE4OTA5NjI4MTc4NA%3D%3D.2", "caption": "Sometimes it's wet and miserable in the morning and I wish we had a cat. Today is a good day to have a dog. #frosty", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/e35/15276657_1299530646786408_4726681401250807808_n.jpg?ig_cache_key=MTQwMDE4MzE4OTA5NjI4MTc4NA%3D%3D.2", "date": 1481134864, "likes": {"count": 40}, "is_video": false, "code": "BNuczEmjra4", "owner": {"id": "1538723"}}, {"dimensions": {"height": 1080, "width": 1080}, "id": "1399385836311409878", "comments_disabled": false, "comments": {"count": 1}, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/15276667_1463520143677014_7084147293137403904_n.jpg?ig_cache_key=MTM5OTM4NTgzNjMxMTQwOTg3OA%3D%3D.2", "caption": "Had an idea for a software product... used what I learned from startup training camp to do a lean canvas and uncertainty and impact chart. My hard question is, how many people want to \"go public\"?", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/e35/15276667_1463520143677014_7084147293137403904_n.jpg?ig_cache_key=MTM5OTM4NTgzNjMxMTQwOTg3OA%3D%3D.2", "date": 1481039813, "likes": {"count": 50}, "is_video": false, "code": "BNrngD9DfTW", "owner": {"id": "1538723"}}, {"dimensions": {"height": 1080, "width": 1080}, "id": "1398995694476082518", "comments_disabled": false, "comments": {"count": 0}, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/15275555_653932024779565_6403470125764182016_n.jpg?ig_cache_key=MTM5ODk5NTY5NDQ3NjA4MjUxOA%3D%3D.2", "caption": "Pretty much everything I've ever learned from @marcusestes is on display in this image. #VR #pcm", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/e35/15275555_653932024779565_6403470125764182016_n.jpg?ig_cache_key=MTM5ODk5NTY5NDQ3NjA4MjUxOA%3D%3D.2", "date": 1480993304, "likes": {"count": 67}, "is_video": false, "code": "BNqOywDjD1W", "owner": {"id": "1538723"}}, {"dimensions": {"height": 810, "width": 1080}, "id": "1397274879221250742", "comments_disabled": false, "comments": {"count": 7}, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/c135.0.810.810/15099451_1162637233820065_3188070089706438656_n.jpg?ig_cache_key=MTM5NzI3NDg3OTIyMTI1MDc0Mg%3D%3D.2.c", "caption": "My cardboard cutout is a permanent resident of the K5M Head Office reminding the entire neighborhood to get back to work. #work #officelife #kmikeym", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/e35/15099451_1162637233820065_3188070089706438656_n.jpg?ig_cache_key=MTM5NzI3NDg3OTIyMTI1MDc0Mg%3D%3D.2", "date": 1480788167, "likes": {"count": 97}, "is_video": false, "code": "BNkHhl9jzq2", "owner": {"id": "1538723"}}, {"dimensions": {"height": 1080, "width": 1080}, "id": "1395917317292915182", "comments_disabled": false, "comments": {"count": 0}, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/15275516_673921266119256_8518261595103559680_n.jpg?ig_cache_key=MTM5NTkxNzMxNzI5MjkxNTE4Mg%3D%3D.2", "caption": "The successful implementation of shareholder question 99. I have been interviewed by the documentary crew of The New Corporation. #pgtips #interview #thenewcorporation", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/e35/15275516_673921266119256_8518261595103559680_n.jpg?ig_cache_key=MTM5NTkxNzMxNzI5MjkxNTE4Mg%3D%3D.2", "date": 1480626333, "likes": {"count": 33}, "is_video": false, "code": "BNfS2d5D3nu", "owner": {"id": "1538723"}}, {"dimensions": {"height": 1080, "width": 1080}, "id": "1394513901555383560", "comments_disabled": false, "comments": {"count": 4}, "thumbnail_src": "https://scontent.cdninstagram.com/t51.2885-15/s640x640/sh0.08/e35/15047046_346283595729057_9167489646135869440_n.jpg?ig_cache_key=MTM5NDUxMzkwMTU1NTM4MzU2MA%3D%3D.2", "caption": "Thought provoking pre-Christmas gift. #sandwich", "display_src": "https://scontent.cdninstagram.com/t51.2885-15/e35/15047046_346283595729057_9167489646135869440_n.jpg?ig_cache_key=MTM5NDUxMzkwMTU1NTM4MzU2MA%3D%3D.2", "date": 1480459033, "likes": {"count": 60}, "is_video": false, "code": "BNaTwFIjX0I", "owner": {"id": "1538723"}}], "page_info": {"end_cursor": "1394513901555383560", "has_previous_page": false, "start_cursor": "1423575630100745913", "has_next_page": true}, "count": 1436}}} \ No newline at end of file +{"user": {"biography": "Financier, Piano Teacher for Dogs, Lover of Markets, and World's Oldest Millennial\u2122", "blocked_by_viewer": false, "country_block": false, "external_url": "http://tinyletter.com/kmikeym", "external_url_linkshimmed": "http://l.instagram.com/?u=http%3A%2F%2Ftinyletter.com%2Fkmikeym\u0026e=ATMF0ElBk9FCnUPSJizt49Rxm4jmMt4LvMyU5-5K4lrID2Gu3QnkMLsO4fCLqiQ", "followed_by": {"count": 6746}, "followed_by_viewer": false, "follows": {"count": 613}, "follows_viewer": false, "full_name": "Mike Merrill", "has_blocked_viewer": false, "has_requested_viewer": false, "id": "1538723", "is_private": false, "is_verified": false, "profile_pic_url": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-19/s150x150/12627953_686238411518831_1544976311_a.jpg", "profile_pic_url_hd": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-19/s320x320/12627953_686238411518831_1544976311_a.jpg", "requested_by_viewer": false, "username": "kmikeym", "connected_fb_page": null, "media": {"nodes": [{"__typename": "GraphImage", "id": "1493862247097110896", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1538723"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17931989_189309548252519_605880896028934144_n.jpg", "is_video": false, "code": "BS7Q8yFlxFw", "date": 1492302278, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17931989_189309548252519_605880896028934144_n.jpg", "caption": "Took out another bottle of @streginald because she is still going strong. \ud83c\udf77 + \u2600\ufe0f = so many chores.", "comments": {"count": 1}, "likes": {"count": 42}}, {"__typename": "GraphImage", "id": "1493790665913873148", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1538723"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17882948_209320759563129_8205981931829985280_n.jpg", "is_video": false, "code": "BS7ArI6lzL8", "date": 1492293745, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17882948_209320759563129_8205981931829985280_n.jpg", "caption": "We have a clear division of labor. Whenever she does chores I open a bottle of wine. Usually I mow so I'm celebrating this chore with @streginald", "comments": {"count": 1}, "likes": {"count": 58}}, {"__typename": "GraphImage", "id": "1491590074156295915", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1538723"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17495376_408030659579361_8954671860545486848_n.jpg", "is_video": false, "code": "BSzMUUIlabr", "date": 1492031414, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17495376_408030659579361_8954671860545486848_n.jpg", "caption": "I'm working on a project that involves a pile of women's shoes and a green screen. Learn more by clicking link in bio...", "comments": {"count": 11}, "likes": {"count": 26}}, {"__typename": "GraphImage", "id": "1490850662728343871", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1538723"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17881552_1435462819846208_5967245484513820672_n.jpg", "is_video": false, "code": "BSwkMdlFCE_", "date": 1491943270, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17881552_1435462819846208_5967245484513820672_n.jpg", "caption": "I think a fake Rolex with a dead battery is a more true expression of the purpose of a fancy watch. #showoff #fancy #rolex #authenticity", "comments": {"count": 7}, "likes": {"count": 48}}, {"__typename": "GraphVideo", "id": "1489416853856431896", "comments_disabled": false, "dimensions": {"height": 640, "width": 640}, "owner": {"id": "1538723"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/e15/17818103_705244379648147_7895976951955849216_n.jpg", "is_video": true, "code": "BSreLzAl68Y", "date": 1491772346, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/e15/17818103_705244379648147_7895976951955849216_n.jpg", "video_views": 218, "caption": "Happy birthday to my niece, who seems to love her new crossbow, which she named \"Crossbow\". Also, apologies to her parents. #sorrynotsorry", "comments": {"count": 3}, "likes": {"count": 55}}, {"__typename": "GraphImage", "id": "1488054749169564036", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1538723"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17819297_371822869884071_7783584495407464448_n.jpg", "is_video": false, "code": "BSmoekKlbmE", "date": 1491609971, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17819297_371822869884071_7783584495407464448_n.jpg", "caption": "There is no display of light in nature that can match the wondrous infinity of a well lit green screen.", "comments": {"count": 1}, "likes": {"count": 42}}, {"__typename": "GraphImage", "id": "1487201979478607697", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1538723"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17596060_1695745940716651_2113751099411267584_n.jpg", "is_video": false, "code": "BSjmlIgFIdR", "date": 1491508313, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17596060_1695745940716651_2113751099411267584_n.jpg", "caption": "#tbt Back in the late 90's I was in a one-man Hall and Oates cover band. Nothing about this venture was successful but I suspect the idea was sound, it was just a matter of bad timing...", "comments": {"count": 10}, "likes": {"count": 90}}, {"__typename": "GraphImage", "id": "1486640908196084196", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1538723"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17818373_106361489913009_2135703781067718656_n.jpg", "is_video": false, "code": "BShnAeJl3nk", "date": 1491441428, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17818373_106361489913009_2135703781067718656_n.jpg", "caption": "They call port \"fortified wine\" because it's so full of vitamins. You basically get healthier the more you drink. \ud83c\udf77 #ForYourHealth", "comments": {"count": 6}, "likes": {"count": 37}}, {"__typename": "GraphImage", "id": "1486477270042685418", "comments_disabled": false, "dimensions": {"height": 1080, "width": 1080}, "owner": {"id": "1538723"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/17817699_1771431426518839_3466737678223933440_n.jpg", "is_video": false, "code": "BShBzOPli_q", "date": 1491421921, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17817699_1771431426518839_3466737678223933440_n.jpg", "caption": "Don't you hate it on #LaundryDay when you have to dive into the back of your closet to find something to wear?", "comments": {"count": 1}, "likes": {"count": 37}}, {"__typename": "GraphVideo", "id": "1481435661462349375", "comments_disabled": false, "dimensions": {"height": 640, "width": 640}, "owner": {"id": "1538723"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/e15/17494826_139673599896023_3642662158598144000_n.jpg", "is_video": true, "code": "BSPHeKXDyY_", "date": 1490820914, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/e15/17494826_139673599896023_3642662158598144000_n.jpg", "video_views": 160, "caption": "I did a 10 minute poll on twitter asking if I should make more coffee and \ud83d\udcaf% of the four participants voted yes so I made this video for them.", "comments": {"count": 3}, "likes": {"count": 50}}, {"__typename": "GraphImage", "id": "1475462600909411171", "comments_disabled": false, "dimensions": {"height": 1075, "width": 1080}, "owner": {"id": "1538723"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/sh0.08/e35/c2.0.1075.1075/17439180_1934387740114173_6466087050973020160_n.jpg", "is_video": false, "code": "BR55WsOlFNj", "date": 1490108870, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/e35/17439180_1934387740114173_6466087050973020160_n.jpg", "caption": "Gia had an idea for a business so I'm teaching her how to think through it using a lean business canvas. She's a bit overwhelmed because she is color blind.", "comments": {"count": 3}, "likes": {"count": 95}}, {"__typename": "GraphVideo", "id": "1473512141218976653", "comments_disabled": false, "dimensions": {"height": 640, "width": 640}, "owner": {"id": "1538723"}, "thumbnail_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/e15/17333766_886146814860189_9059199802478166016_n.jpg", "is_video": true, "code": "BRy93xFlRON", "date": 1489876357, "display_src": "https://instagram.fsjc1-3.fna.fbcdn.net/t51.2885-15/s640x640/e15/17333766_886146814860189_9059199802478166016_n.jpg", "video_views": 131, "caption": "@mariiijke soothes the beasts.", "comments": {"count": 3}, "likes": {"count": 34}}], "count": 1462, "page_info": {"has_next_page": true, "end_cursor": "AQAeREC9PuIQS0VBP6L92N6hRk_FiegnfyR5p3A1C2FDNgB7zaZyf3uMmuDIVa6b1uAnsNDTVbzN2jbYco5Rgi6oDwfrio96ymMUL_4XXoaQFg"}}}, "logging_page_id": "profilePage_1538723"} \ No newline at end of file diff --git a/tests/data/www.instagram.com/photo.html b/tests/data/www.instagram.com/photo.html index 40e6441..60f37bf 100644 --- a/tests/data/www.instagram.com/photo.html +++ b/tests/data/www.instagram.com/photo.html @@ -16,123 +16,10 @@ Connection: keep-alive Instagram - - - - - - - - + @@ -148,25 +35,25 @@ Instagram - - - - - - + + + + + + - + - + - - - + + + @@ -179,59 +66,59 @@ Instagram - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -242,9 +129,9 @@ Instagram - - - + + + - - - - - - - + @@ -148,25 +35,25 @@ Instagram - - - - - - + + + + + + - + - + - - - + + + @@ -183,55 +70,55 @@ Instagram - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -242,9 +129,9 @@ Instagram - - - + + + - - - - - - - + @@ -148,25 +36,25 @@ Instagram - - - - - - + + + + + + - + - + - - - + + + @@ -179,59 +67,59 @@ Instagram - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -242,9 +130,9 @@ Instagram - - - + + + - - - - - - - + @@ -148,25 +35,25 @@ Instagram - - - - - - + + + + + + - + - + - - - + + + @@ -179,64 +66,64 @@ Instagram - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -247,9 +134,9 @@ Instagram - - - + + +