Home Forums WoodMart support forum Instagram thumbnail crashes on Widget – On homepage "Instagram did not return..

Instagram thumbnail crashes on Widget – On homepage "Instagram did not return..

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #33673

    rabbit
    Participant

    Hi,

    In widget area Instagram thumbnail crashes
    http://prntscr.com/i17rk6

    On homepage i get error: Instagram did not return a 200.
    http://prntscr.com/i17s21

    How fix this?

    many thanks

    #33676

    Artem Temos
    Keymaster

    Hi,

    Try to add the following PHP code snippet to the child theme functions.php file to do this

    function woodmart_scrape_instagram($username, $slice = 9) {
    		$username = strtolower( $username );
    		$by_hashtag = ( substr( $username, 0, 1) == '#' );
    		
    		if ( false === ( $instagram = get_transient( 'instagram-media-new-'.sanitize_title_with_dashes( $username ) ) ) ) {
    			
    			$request_param = ( $by_hashtag ) ? 'explore/tags/' . substr( $username, 1) : trim( $username );
    			$remote = wp_remote_get( 'https://instagram.com/'. $request_param );
    			
    			if ( is_wp_error( $remote ) )
    				return new WP_Error( 'site_down', esc_html__( 'Unable to communicate with Instagram.', 'woodmart' ) );
    				
    			if ( 200 != wp_remote_retrieve_response_code( $remote ) )
    				return new WP_Error( 'invalid_response', esc_html__( 'Instagram did not return a 200.', 'woodmart' ) );
    				
    			$shards = explode( 'window._sharedData = ', $remote['body'] );
    			$insta_json = explode( ';</script>', $shards[1] );
    			$insta_array = json_decode( $insta_json[0], TRUE );
    
    			if ( !$insta_array )
    				return new WP_Error( 'bad_json', esc_html__( 'Instagram has returned invalid data.', 'woodmart' ) );
    				
    			// old style
    			if ( isset( $insta_array['entry_data']['UserProfile'][0]['userMedia'] ) ) {
    				$images = $insta_array['entry_data']['UserProfile'][0]['userMedia'];
    				$type = 'old';
    			// old_2 style
    			} elseif( $by_hashtag && isset( $insta_array['entry_data']['TagPage'][0]['tag']['media']['nodes'] ) ) {
    				$images = $insta_array['entry_data']['TagPage'][0]['tag']['media']['nodes'];
    				$type = 'old_2';
    			}else if ( isset( $insta_array['entry_data']['ProfilePage'][0]['user']['media']['nodes'] ) ) {
    				$images = $insta_array['entry_data']['ProfilePage'][0]['user']['media']['nodes'];
    				$type = 'old_2';
    			// new style
    			} elseif( $by_hashtag && isset( $insta_array['entry_data']['TagPage'][0]['graphql']['hashtag']['edge_hashtag_to_media']['edges'] ) ) {
    				$images = $insta_array['entry_data']['TagPage'][0]['graphql']['hashtag']['edge_hashtag_to_media']['edges'];
    				$type = 'new';
    			} else {
    				return new WP_Error( 'bad_json_2', esc_html__( 'Instagram has returned invalid data.', 'woodmart' ) );
    			}
    
    			if ( !is_array( $images ) )
    				return new WP_Error( 'bad_array', esc_html__( 'Instagram has returned invalid data.', 'woodmart' ) );
    				
    			$instagram = array();
    			
    			switch ( $type ) {
    				case 'old':
    					foreach ( $images as $image ) {
    						if ( $image['user']['username'] == $username ) {
    							$image['link']						  = $image['link'];
    							$image['images']['thumbnail']		   = preg_replace( "/^http:/i", "", $image['images']['thumbnail'] );
    							$image['images']['standard_resolution'] = preg_replace( "/^http:/i", "", $image['images']['standard_resolution'] );
    							$image['images']['low_resolution']	  = preg_replace( "/^http:/i", "", $image['images']['low_resolution'] );
    							$instagram[] = array(
    								'description'   => $image['caption']['text'],
    								'link'		  	=> $image['link'],
    								'time'		  	=> $image['created_time'],
    								'comments'	  	=> $image['comments']['count'],
    								'likes'		 	=> $image['likes']['count'],
    								'thumbnail'	 	=> $image['images']['thumbnail'],
    								'large'		 	=> $image['images']['standard_resolution'],
    								'small'		 	=> $image['images']['low_resolution'],
    								'type'		  	=> $image['type']
    							);
    						}
    					}
    				break;
    				case 'old_2':
    					foreach ( $images as $image ) {
    						$image['thumbnail_src'] = preg_replace( "/^https:/i", "", $image['thumbnail_src'] );
    						$image['thumbnail'] = preg_replace( "/^https:/i", "", $image['thumbnail_resources'][0]['src'] );
    						$image['medium'] = preg_replace( "/^https:/i", "", $image['thumbnail_resources'][2]['src'] );
    						$image['large'] = $image['thumbnail_src'];
    						$image['display_src'] = preg_replace( "/^https:/i", "", $image['display_src'] );
    						if ( $image['is_video'] == true ) {
    							$type = 'video';
    						} else {
    							$type = 'image';
    						}
    						$caption = esc_html__( 'Instagram Image', 'woodmart' );
    						if ( ! empty( $image['caption'] ) ) {
    							$caption = $image['caption'];
    						}
    						$instagram[] = array(
    							'description'   => $caption,
    							'link'		  	=> '//instagram.com/p/' . $image['code'],
    							'time'		  	=> $image['date'],
    							'comments'	  	=> $image['comments']['count'],
    							'likes'		 	=> $image['likes']['count'],
    							'thumbnail'	 	=> $image['thumbnail'],
    							'medium'		=> $image['medium'],
    							'large'			=> $image['large'],
    							'original'		=> $image['display_src'],
    							'type'		  	=> $type
    						);
    					}
    				break;
    				default:
    					foreach ( $images as $image ) {
    						$image = $image['node'];
    						$caption = esc_html__( 'Instagram Image', 'woodmart' );
    						if ( ! empty( $image['edge_media_to_caption']['edges'][0]['node']['text'] ) ) $caption = $image['edge_media_to_caption']['edges'][0]['node']['text'];
    						
    						$image['thumbnail_src'] = preg_replace( "/^https:/i", "", $image['thumbnail_src'] );
    						$image['thumbnail'] = preg_replace( "/^https:/i", "", $image['thumbnail_resources'][0]['src'] );
    						$image['medium'] = preg_replace( "/^https:/i", "", $image['thumbnail_resources'][2]['src'] );
    						$image['large'] = $image['thumbnail_src'];
    						
    						$type = ( $image['is_video'] ) ? 'video' : 'image';
    						
    						$instagram[] = array(
    							'description'   => $caption,
    							'link'		  	=> '//instagram.com/p/' . $image['shortcode'],
    							'comments'	  	=> $image['edge_media_to_comment']['count'],
    							'likes'		 	=> $image['edge_liked_by']['count'],
    							'thumbnail'	 	=> $image['thumbnail'],
    							'medium'		=> $image['medium'],
    							'large'			=> $image['large'],
    							'type'		  	=> $type
    						);
    					}
    				break;
    			}
    			// do not set an empty transient - should help catch private or empty accounts
    			if ( ! empty( $instagram ) ) {
    				$instagram = woodmart_compress( maybe_serialize( $instagram ) );
    				set_transient( 'instagram-media-new-'.sanitize_title_with_dashes( $username ), $instagram, apply_filters( 'null_instagram_cache_time', HOUR_IN_SECONDS*2 ) );
    			}
    		}
    		if ( ! empty( $instagram ) ) {
    			$instagram = maybe_unserialize( woodmart_decompress( $instagram ) );
    			return array_slice( $instagram, 0, $slice );
    		} else {
    			return new WP_Error( 'no_images', esc_html__( 'Instagram did not return any images.', 'woodmart' ) );
    		}
    	}

    You will need to clear your WordPress transients to see the changes also.

    Regards

    #33751

    rabbit
    Participant

    Hi,

    This fix problem.
    Topic to close.

    Many thanks

    #33761

    Artem Temos
    Keymaster

    Great, you are welcome!

Viewing 4 posts - 1 through 4 (of 4 total)