(function($) { $.fn.instahistory = function(options) { var settings; var searchType; var searchUrl; var buildTemplate; var $container = this; settings = $.extend({ get : '', imageSize: 150, limit : 6, links : true, squareImages: true, template: '' }, options); buildTemplate = function(data, image, link) { String.prototype.allReplace = function(obj) { var retStr = this; for (var x in obj) { retStr = retStr.replace(new RegExp(x, 'g'), obj[x]); } return retStr; }; var templateCodes = { '{{caption}}': data.edge_media_to_caption.edges[0].node.text, '{{comments}}': data.edge_media_to_comment.count, '{{image}}': image, '{{likes}}': data.edge_liked_by.count, '{{link}}': link } var template = settings.template.allReplace(templateCodes); return template; } if(settings.container) { if($container.find(settings.container).length > 0) { $container = $container.find(settings.container).first(); } } if($.type(options) == 'string') { settings.get = options; } if(settings.get != '') { // Determine what type of search we are going to make. if(settings.get.indexOf('#') > -1) { searchType = 'tag'; searchUrl = 'https://www.instagram.com/explore/tags/' + settings.get.split('#')[1] + '/?__a=1'; if(settings.limit > 68) { settings.limit = 68; console.log("The max number of images for a tag is 68"); } } else if(settings.get.indexOf('@') > -1) { searchType = 'user'; searchUrl = 'https://www.instagram.com/' + settings.get.split('@')[1] + '/?__a=1'; if(settings.limit > 12) { settings.limit = 12; console.log("The max number of images for a user is 12"); } } else { searchType = false; } if(searchType) { $.ajax({ url: searchUrl, success: function(data) { var nodes; if(searchType == 'tag') { nodes = data.graphql.hashtag.edge_hashtag_to_media.edges; } else { nodes = data.graphql.user.edge_owner_to_timeline_media.edges; } for (var i = 0; i < settings.limit; i++) { post = nodes[i].node; image = $(''); imageUrl = ''; linkUrl = 'https://www.instagram.com/p/' + post.shortcode + '/'; if(settings.squareImages) { var size; // is an index in an array switch(settings.imageSize) { case 150: size = 0; break; case 240: size = 1; break; case 320: size = 2; break; case 480: size = 3; break; case 640: size = 4; break; } imageUrl = post.thumbnail_resources[size].src; } else { imageUrl = post.display_url; } image.attr('src', imageUrl); if(settings.template == '') { if(settings.links) { link = $('',{ href: linkUrl, target: '_blank' }).append(image); $container.append(link); } else { $container.append(image); } } else { $container.append(buildTemplate(post, imageUrl, linkUrl)); } } }, error: function(err) { switch(err.status) { case 404: console.warn('Sorry, but there was no results for that ' + searchType); break; default: console.warn('An unknow error happend'); break; } } }); } else { console.warn("Your search word must contain a '#' or a '@'. Like it would on instagram"); } } else { console.warn("You need to specify a tag (e.g. #summer) or a user (e.g. @instagram) in the 'get' parameter, to search."); } } })(jQuery);