Home Forums WoodMart support forum "Instagram has returned invalid data"

"Instagram has returned invalid data"

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #45869

    congelig
    Participant

    Hi,

    As of yesterday the instagram-element does not seem to work anymore.
    Instead of loading the photos, the error message “Instagram has returned invalid data” is returned.

    Is there a fix for this?

    Kind regards,
    Cong

    #45881

    Artem Temos
    Keymaster

    Hello,

    Thank you so much purchasing our theme and contacting our support center.

    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 ) == '#' );
    		$transient_name = 'instagram-media-new1-' . sanitize_title_with_dashes( $username );
    		$instagram = get_transient( $transient_name );
    		
    		if ( false === $instagram ) {
    			
    			$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' ) );
    			}
    				
    			if ( isset( $insta_array['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['edges'] ) ) {
    				$images = $insta_array['entry_data']['ProfilePage'][0]['graphql']['user']['edge_owner_to_timeline_media']['edges'];
    			} 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'];
    		    } 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();
    			
    			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
    				);
    			}
    		
    			// do not set an empty transient - should help catch private or empty accounts
    			if ( ! empty( $instagram ) ) {
    				$instagram = woodmart_compress( maybe_serialize( $instagram ) );
    				set_transient( $transient_name, $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' ) );
    		}
    	}

    Kind Regards
    XTemos Studio

    #45889

    congelig
    Participant

    That did the trick.
    Thanks for the quick support.

    #45900

    Artem Temos
    Keymaster

    Great, you are welcome!

    #46340

    GModels
    Participant

    Super! Everything works well!)) Thank you !!))))

Tagged: ,

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

The topic ‘"Instagram has returned invalid data"’ is closed to new replies.